




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
UNIX系統(tǒng)的IO模型 其實并非原創(chuàng),只是摘錄了Stevens的大作UNIX網(wǎng)絡(luò)編程,寫下來,一、加深理解和記憶;二、書是借的,記錄一下備忘。感謝臻,借我此書一閱,受益匪淺。6.2 I/O模型阻塞式I/O;非阻塞式I/O;I/O復(fù)用;信號驅(qū)動式I/O;異步I/O;一個輸入操作通常包括兩個不同的階段:1)等待數(shù)據(jù)準備好;2)從內(nèi)核向進程復(fù)制數(shù)據(jù);對于一個套接字上的輸入操作,第一步通常涉及等待數(shù)據(jù)從網(wǎng)絡(luò)中到達。當所等待分組到達時,它被復(fù)制到內(nèi)核中的某個緩沖區(qū)。第二步就是把數(shù)據(jù)從內(nèi)核緩沖區(qū)復(fù)制到應(yīng)用進程緩沖區(qū)。6.2.1阻塞式I/O模型最流行的I/O模型是阻塞式I/O(blocking I/O)模型,默認情況下,所有套接字都是阻塞的。以數(shù)據(jù)報套接字作為例子,我們有如圖6-1所示的情形。圖6-1阻塞式I/O模型在圖6-1中,進程調(diào)用recvfrom,其系統(tǒng)調(diào)用直到數(shù)據(jù)報到達且被復(fù)制到應(yīng)用進程的緩沖區(qū)中或者發(fā)生錯誤才返回。我們說進程在從調(diào)用recvfrom開始到它返回的整段時間內(nèi)是被阻塞的。recvfrom成功返回后,應(yīng)用進程開始處理數(shù)據(jù)報。6.2.2非阻塞式I/O模型進程把一個套接字設(shè)置成非阻塞是在通知內(nèi)核:當所請求的I/O操作非得把本進程投入睡眠才能完成時,不要把本進程投入睡眠,而是返回一個錯誤。非阻塞式I/O(notblocking I/O)模型如圖6-2所示:圖6-2非阻塞式I/O模型前三次調(diào)用recvfrom時沒有數(shù)據(jù)可返回,因此內(nèi)核轉(zhuǎn)而立即返回一個EWOULDBLOCK錯誤。第四次調(diào)用recvfrom時已有一個數(shù)據(jù)報準備好,它被復(fù)制到應(yīng)用進程緩沖區(qū),于是recvfrom成功返回。我們接著處理數(shù)據(jù)。當一個應(yīng)用進程像這樣對一個非阻塞描述符循環(huán)調(diào)用recvfrom時,我們稱之為輪詢(polling)。應(yīng)用進程只需輪詢內(nèi)核,以查看某個操作是否就緒。這么做往往耗費大量CPU時間。6.2.3 I/O復(fù)用模型有了I/O復(fù)用(I/O multiplexing),我們就可以調(diào)用select或poll,阻塞在這兩個系統(tǒng)調(diào)用中的某一個上,而不是阻塞在真正的I/O系統(tǒng)調(diào)用上。圖6-3概括展示了I/O復(fù)用模型。圖6-3 I/O復(fù)用模型我們阻塞于select調(diào)用,等待數(shù)據(jù)報套接字變?yōu)榭勺x。當select返回套接字可讀這一條件時,我們調(diào)用recvfrom把所讀數(shù)據(jù)報復(fù)制到應(yīng)用進程緩沖區(qū)。比較圖6-3和圖6-1,I/O復(fù)用并不顯得有什么優(yōu)勢,事實上由于使用select需要兩個而不是單個系統(tǒng)調(diào)用,I/O復(fù)用還稍有劣勢。使用select的優(yōu)勢在于我們可以等待多個描述符就緒。與I/O復(fù)用密切相關(guān)的另一種I/O模型是在多線程中使用阻塞式I/O(我們經(jīng)常這么干)。這種模型與上述模型極為相似,但它并沒有使用select阻塞在多個文件描述符上,而是使用多個線程(每個文件描述符一個線程),這樣每個線程都可以自由的調(diào)用recvfrom之類的阻塞式I/O系統(tǒng)調(diào)用了。6.2.4信號驅(qū)動式I/O模型我們也可以用信號,讓內(nèi)核在描述符就緒時發(fā)送SIGIO信號通知我們。我們稱這種模型為信號驅(qū)動式I/O(signal-driven I/O),圖6-4是它的概要展示。圖6-4信號驅(qū)動式I/O模型我們首先開啟套接字的信號驅(qū)動式I/O功能,并通過sigaction系統(tǒng)調(diào)用安裝一個信號處理函數(shù)。改系統(tǒng)調(diào)用將立即返回,我們的進程繼續(xù)工作,也就是說他沒有被阻塞。當數(shù)據(jù)報準備好讀取時,內(nèi)核就為該進程產(chǎn)生一個SIGIO信號。我們隨后就可以在信號處理函數(shù)中調(diào)用recvfrom讀取數(shù)據(jù)報,并通知主循環(huán)數(shù)據(jù)已經(jīng)準備好待處理,也可以立即通知主循環(huán),讓它讀取數(shù)據(jù)報。無論如何處理SIGIO信號,這種模型的優(yōu)勢在于等待數(shù)據(jù)報到達期間進程不被阻塞。主循環(huán)可以繼續(xù)執(zhí)行,只要等到來自信號處理函數(shù)的通知:既可以是數(shù)據(jù)已準備好被處理,也可以是數(shù)據(jù)報已準備好被讀取。6.2.5異步I/O模型異步I/O(asynchronous I/O)由POSIX規(guī)范定義。演變成當前POSIX規(guī)范的各種早起標準所定義的實時函數(shù)中存在的差異已經(jīng)取得一致。一般地說,這些函數(shù)的工作機制是:告知內(nèi)核啟動某個操作,并讓內(nèi)核在整個操作(包括將數(shù)據(jù)從內(nèi)核復(fù)制到我們自己的緩沖區(qū))完成后通知我們。這種模型與前一節(jié)介紹的信號驅(qū)動模型的主要區(qū)別在于:信號驅(qū)動式I/O是由內(nèi)核通知我們何時可以啟動一個I/O操作,而異步I/O模型是由內(nèi)核通知我們I/O操作何時完成。圖6-5給出了一個例子。圖6-5異步I/O模型我們調(diào)用aio_read函數(shù)(POSIX異步I/O函數(shù)以aio_或lio_開頭),給內(nèi)核傳遞描述符、緩沖區(qū)指針、緩沖區(qū)大?。ㄅcread相同的三個參數(shù))和文件偏移(與lseek類似),并告訴內(nèi)核當整個操作完成時如何通知我們。該系統(tǒng)調(diào)用立即返回,并且在等待I/O完成期間,我們的進程不被阻塞。本例子中我們假設(shè)要求內(nèi)核在操作完成時產(chǎn)生某個信號。改信號直到數(shù)據(jù)已復(fù)制到應(yīng)用進程緩沖區(qū)才產(chǎn)生,這一點不同于信號驅(qū)動I/O模型。6.2.6各種I/O模型的比較圖6-6對比了上述5中不同的I/O模型??梢钥闯?,前4中模型的主要區(qū)別在于第一階段,因為他們的第二階段是一樣的:在數(shù)據(jù)從內(nèi)核復(fù)制到調(diào)用者的緩沖區(qū)期間,進程阻塞于recvfrom調(diào)用。相反,異步I/O模型在這兩個階段都要處理,從而不同于其他4中模型。圖6-6 5種I/O模型的比較6.2.7同步I/O和異步I/O對比POSIX把這兩個術(shù)語定于如下:同步I/O操作(sysnchronous I/O opetation)導(dǎo)致請求進程阻塞,直到I/O操作完成;異步I/O操作(asynchronous I/O opetation)不導(dǎo)致請求進程阻塞。根據(jù)上述定義,我們的前4種模型-阻塞式I/O模型、非阻塞式I/O模型、I/O復(fù)用模型和信號驅(qū)動I/O模型都是同步I/O模型,因為其中真正的I/O操作(recvfrom)將阻塞進程。只有異步I/O模型與POSIX定義的異步I/O相匹配。 ConnectString = Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PassWord=123;Initial Catalog=student;Data Source=192.x.x.x 由東莞搬遷公司 東莞搬家公司 www.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州國企招聘2024貴州省水利水電工程咨詢有限責任公司招聘16人筆試參考題庫附帶答案詳解
- 軟件開發(fā)就業(yè)報告范文
- IC產(chǎn)業(yè)現(xiàn)況與趨勢
- 二零二五年度高端個人專利授權(quán)合同
- 二零二五年度汽車租賃合伙人入股協(xié)議
- 2025年度電力線路維修維保合同
- 農(nóng)村宅基地互換與農(nóng)業(yè)科技推廣協(xié)議書
- 二零二五年家庭房產(chǎn)析產(chǎn)分配與財產(chǎn)繼承合同
- 2025年度礦山股權(quán)轉(zhuǎn)讓及礦山礦產(chǎn)資源開發(fā)與環(huán)境保護合同
- 二零二五年度木質(zhì)防火門市場拓展與品牌建設(shè)合同
- 下肢骨關(guān)節(jié)損傷課件
- 2023發(fā)電企業(yè)防汛工作管理辦法
- 食品安全風險評估的課件
- 醫(yī)療機構(gòu)資產(chǎn)評估報告
- 復(fù)方板藍根顆粒工藝驗證方案大全
- 信息技術(shù)拓展模塊高職PPT完整全套教學(xué)課件
- 《動物王國開大會》說課PPT
- 春玉米套種秋黃瓜技術(shù)
- QC成果提高工業(yè)廠房基礎(chǔ)預(yù)埋地腳螺栓的精確度
- 四年級下冊勞動技術(shù)教案
- 城市軌道交通服務(wù)禮儀和意識基本知識
評論
0/150
提交評論