akae-network-programming-models-2011.09.06.pdf

akae-network-programming-models-2011.09.06.pdf

ID:33739013

大小:879.59 KB

頁數(shù):46頁

時間:2019-02-28

akae-network-programming-models-2011.09.06.pdf_第1頁
akae-network-programming-models-2011.09.06.pdf_第2頁
akae-network-programming-models-2011.09.06.pdf_第3頁
akae-network-programming-models-2011.09.06.pdf_第4頁
akae-network-programming-models-2011.09.06.pdf_第5頁
資源描述:

《akae-network-programming-models-2011.09.06.pdf》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、I/O模型與調(diào)度模型楊勁松yjs@oldhand.org2011.09.06參考資料◆W.RichardStevens《UNIX網(wǎng)絡(luò)編程》(第1卷)◆W.RichardStevens《TCP/IP詳解》(第1卷)◆W.Richardstevens《UNIX環(huán)境高級編程》◆EricS.Raymond《UNIX編程藝術(shù)》2http://www.akaedu.org09/06/11學(xué)習(xí)方法(建議)◆參考W.RichardStevens《TCP/IP詳解》(卷一)◆閱讀相關(guān)的RFC文檔◆動手實(shí)踐●使用tcpdump分析數(shù)據(jù)包●使用wireshark分析數(shù)據(jù)包3http://www.aka

2、edu.org09/06/111.I/O模型◆系統(tǒng)I/O與服務(wù)器模型◆阻塞I/O模型◆非阻塞I/O模型◆多路復(fù)用I/O模型◆信號驅(qū)動I/O模型◆異步I/O模型◆I/O模型比較4http://www.akaedu.org09/06/111.1系統(tǒng)I/O與服務(wù)器模型◆在UNIX/Linux下有5種I/O模型:●阻塞I/O:◇最常用、最簡單、效率最低●非阻塞I/O:◇可防止進(jìn)程阻塞在I/O操作上●I/O多路復(fù)用:◇允許同時對多個I/O進(jìn)行控制●信號驅(qū)動I/O:◇當(dāng)某個描述符字上發(fā)生了某個事件時,讓內(nèi)核通過信號SIGIO通知進(jìn)程●異步I/O5http://www.akaedu.org09

3、/06/111.2阻塞IO模型◆阻塞I/O模式是最普遍使用的I/O模式,大部分程序使用的都是阻塞模式的I/O?!羧笔∏闆r下,套接字建立后所處于的模式就是阻塞I/O模式?!羟懊鎸W(xué)習(xí)的很多讀寫函數(shù)在調(diào)用過程中會發(fā)生阻塞●讀操作中的read()/readv()/recv()/recvfrom()/recvmsg()●寫操作中的write()/writev()/send()/sendto()/sendmag()●另外:accept()/connect()6http://www.akaedu.org09/06/111.2.1阻塞I/O模型7http://www.akaedu.org09/0

4、6/111.2.2讀阻塞◆以read()為例:●進(jìn)程調(diào)用read()從套接字上讀取數(shù)據(jù),當(dāng)套接字的接收緩沖區(qū)中還沒有數(shù)據(jù)可讀,函數(shù)read()將發(fā)生阻塞?!袼鼤恢弊枞氯?,等待套接字的接收緩沖區(qū)中有數(shù)據(jù)可讀。●經(jīng)過一段時間后,緩沖區(qū)內(nèi)接收到數(shù)據(jù),于是內(nèi)核便去喚醒該進(jìn)程,通過read()訪問這些數(shù)據(jù)。●如果在進(jìn)程阻塞過程中,對方發(fā)生故障,那這個進(jìn)程將永遠(yuǎn)阻塞下去。8http://www.akaedu.org09/06/111.2.3寫阻塞◆在寫操作時發(fā)生阻塞的情況要比讀操作少。主要發(fā)生在要寫入的緩沖區(qū)的大小小于要寫入的數(shù)據(jù)量的情況下?!暨@時,寫操作不進(jìn)行任何拷貝工作,將發(fā)生阻塞。

5、◆一量發(fā)送緩沖區(qū)內(nèi)有足夠的空間,內(nèi)核將喚醒進(jìn)程,將數(shù)據(jù)從用戶緩沖區(qū)中拷貝到相應(yīng)的發(fā)送數(shù)據(jù)緩沖區(qū)。◆UDP不用等待確認(rèn),沒有實(shí)際的發(fā)送緩沖區(qū),所以UDP協(xié)議中不存在發(fā)送緩沖區(qū)滿的情況,在UDP套接字上執(zhí)行的寫操作永遠(yuǎn)都不會阻塞。9http://www.akaedu.org09/06/111.3非阻塞I/O模型◆當(dāng)我們將一個套接字設(shè)置為非阻塞模式,我們相當(dāng)于告訴了系統(tǒng)內(nèi)核:“當(dāng)我請求的I/O操作不能夠馬上完成,你想讓我的進(jìn)程進(jìn)行休眠等待的時候,不要這么做,請馬上返回一個錯誤給我。”◆當(dāng)一個應(yīng)用程序使用了非阻塞模式的套接字,它需要使用一個循環(huán)來不停地測試是否一個文件描述符有數(shù)據(jù)可讀(稱

6、做polling)?!魬?yīng)用程序不停的polling內(nèi)核來檢查是否I/O操作已經(jīng)就緒。這將是一個極浪費(fèi)CPU資源的操作。◆這種模式使用中不是很普遍。10http://www.akaedu.org09/06/111.3.1非阻塞I/O模型11http://www.akaedu.org09/06/111.3.2非阻塞I/O調(diào)度過程EAGAINEAGAIN讀到數(shù)據(jù)read返read返read返回回回readreadread多次調(diào)用用戶態(tài)read核心態(tài)套接套接套接字緩字緩字緩……沖區(qū)中數(shù)沖區(qū)沖區(qū)據(jù)到達(dá),中沒中沒進(jìn)行數(shù)據(jù)有數(shù)有數(shù)復(fù)制據(jù)據(jù)12http://www.akaedu.org09/06

7、/111.4多路復(fù)用IO◆應(yīng)用程序中同時處理多路輸入輸出流,若采用阻塞模式,將得不到預(yù)期的目的;◆若采用非阻塞模式,對多個輸入進(jìn)行輪詢,但又太浪費(fèi)CPU時間;◆若設(shè)置多個進(jìn)程,分別處理一條數(shù)據(jù)通路,將新產(chǎn)生進(jìn)程間的同步與通信問題,使程序變得更加復(fù)雜;◆比較好的方法是使用I/O多路復(fù)用。其基本思想是:●先構(gòu)造一張有關(guān)描述符的表,然后調(diào)用一個函數(shù),它要到這些描述符中的一個已準(zhǔn)備好進(jìn)行I/O時才返回?!穹祷貢r,它告訴進(jìn)程那個描述符已準(zhǔn)備好可以進(jìn)行I/O。13http://www.aka

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。
相關(guān)文章
更多
相關(guān)標(biāo)簽