版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第10章I/O操作模式,鄭謙益、韓京宇,概述,I/O操作模式文件I/O操作模式內(nèi)存的I/O映射文件鎖終端I/O操作,I/O操作模式,I/O操作模式,阻塞方式非阻塞方式同步方式異步方式,阻塞方式,概念 通常,在應(yīng)用程序發(fā)出I/O請(qǐng)求后,如果I/O操作不能立刻完成,Linux內(nèi)核將發(fā)出讀寫(xiě)請(qǐng)求的進(jìn)程暫時(shí)掛起,將CPU交給其他進(jìn)程,等I/O完成后,重新切換回原來(lái)的進(jìn)程繼續(xù)運(yùn)行,這種I/O處理方式
2、稱為阻塞方式。,非阻塞方式,概念 進(jìn)程在發(fā)出讀寫(xiě)請(qǐng)求后,不管I/O是否真正完成,可立即返回,繼續(xù)執(zhí)行。問(wèn)題在于如何獲知I/O操作已經(jīng)完成,一種方法是不斷地查詢I/O狀態(tài),另一種方法是由操作系統(tǒng)通知I/O操作的完成,這種I/O處理方式稱為非阻塞方式。,同步方式,概念 進(jìn)程在發(fā)出文件讀寫(xiě)請(qǐng)求后,如果需要進(jìn)程等待或通過(guò)某種方式檢查I/O操作是否完成,從而決定是否繼續(xù)執(zhí)行后續(xù)的工作,這種方式稱為同步I/O
3、方式。,異步方式,概念 進(jìn)程在發(fā)出文件讀寫(xiě)請(qǐng)求后,如果進(jìn)程能繼續(xù)執(zhí)行其他工作,由內(nèi)核以消息的方式通知進(jìn)程請(qǐng)求的I/O操作已經(jīng)完成,無(wú)需等待或檢查I/O操作是否完成,這種方式稱為異步I/O方式;,文件I/O操作模式,文件I/O操作模式,同步阻塞I/O模式同步非阻塞I/O模式I/O多路復(fù)用模式信號(hào)驅(qū)動(dòng)I/O模式異步I/O模式,同步阻塞I/O模式,概念 通常,在進(jìn)行I/O操作時(shí),必須
4、等到I/O操作完成才能進(jìn)行下一步的操作,這種操作方式稱為同步阻塞I/O模式,,同步阻塞I/O模式,,實(shí)例分析,// exam10-1.cint fd_line,fd_kb,fd_display;char chr_from_kb[10];char chr_from_line[10];void test(){while (1) {read(fd_kb, &chr_from_kb, 1); //非阻塞write
5、(fd_line, &chr_from_kb, 1);read(fd_line, &chr_from_line, 1);//非阻塞write(fd_display, &chr_from_line, 1);}},同步非阻塞I/O模式,概念 在進(jìn)程發(fā)出文件讀寫(xiě)請(qǐng)求后,無(wú)論I/O操作是否完成,立刻返回。這樣進(jìn)程可繼續(xù)執(zhí)行后續(xù)代碼。為了獲知文件的I/O操作是否完成,需不斷地對(duì)文件I/
6、O狀態(tài)進(jìn)行測(cè)試。,同步非阻塞I/O模式,,同步非阻塞I/O模式,方法一: 在打開(kāi)文件時(shí),設(shè)定打開(kāi)的方式為非阻塞方式,例如: open("fifo1",O_RDONLY|O_NONBLOCK);方法二: 如果文件已經(jīng)打開(kāi),可通過(guò)fcntl函數(shù)改變文件的I/O模式.方法三: 如果文件已經(jīng)打開(kāi),也可通過(guò)ioctl函數(shù)來(lái)改變I/O操作的方式。,同步非阻塞I/O模式,多路復(fù)用I/
7、O模式,概念 基于多路復(fù)用I/O模式的進(jìn)程可同時(shí)對(duì)多個(gè)文件描述符的讀寫(xiě)狀態(tài)進(jìn)行檢測(cè),直到發(fā)現(xiàn)這些描述符中某個(gè)的狀態(tài)發(fā)生了變化時(shí)返回。這表明檢測(cè)到某文件的I/O操作已經(jīng)完成。此時(shí),進(jìn)程可根據(jù)返回的狀態(tài)進(jìn)行真正的讀寫(xiě)操作。,多路復(fù)用I/O模式,,多路復(fù)用I/O模式,信號(hào)驅(qū)動(dòng)的I/O模式,概念 信號(hào)驅(qū)動(dòng)I/O模式是利用文件描述符的I/O狀態(tài)的變化,產(chǎn)生SIGIO信號(hào),通過(guò)對(duì)SIGIO信號(hào)的處理,讀寫(xiě)相
8、應(yīng)的數(shù)據(jù)。,信號(hào)驅(qū)動(dòng)的I/O模式,,信號(hào)驅(qū)動(dòng)的I/O模式,實(shí)現(xiàn)步驟1. 利用signal或sigaction函數(shù)定義信號(hào)SIGIO的處理函數(shù)。2. 使用fcntl函數(shù)對(duì)文件描述符在狀態(tài)發(fā)生變化產(chǎn)生SIGIO信號(hào)時(shí),設(shè)置信號(hào)發(fā)送的對(duì)象。3. 在運(yùn)用open函數(shù)打開(kāi)文件時(shí),或運(yùn)用fcntl函數(shù)對(duì)已打開(kāi)的文件,設(shè)置為O_ASYNC方式。,異步I/O模式,概念 在進(jìn)程發(fā)出I/O讀寫(xiě)請(qǐng)求后,,無(wú)論I/O操作是否完成,立刻返回
9、,繼續(xù)執(zhí)行后續(xù)的代碼,當(dāng)要求的I/O操作完成時(shí),內(nèi)核向發(fā)出請(qǐng)求的進(jìn)程發(fā)送信號(hào),通知I/O操作已完成,此時(shí),操作的數(shù)據(jù)已就需,無(wú)需在內(nèi)核與用戶空間之間進(jìn)行拷貝,這種I/O操作方式稱為異步I/O模式。,異步I/O模式,,,在POSIX 1003.1標(biāo)準(zhǔn)中,定義了異步I/O模式的函數(shù)接口。Linux內(nèi)核從版本2.5開(kāi)始支持異步I/O模式,在文件操作集中增加了異步I/O的操作接口。API函數(shù)aio_read()aio_write()ai
10、o_error()aio_return(),內(nèi)存的I/O映射,內(nèi)存的I/O映射,概念 內(nèi)存的I/O映射是將文件某區(qū)間的內(nèi)容映射至進(jìn)程的虛擬地址空間的某個(gè)區(qū)域的技術(shù)。通過(guò)對(duì)文件的內(nèi)存I/O映射,可使用戶對(duì)文件的操作轉(zhuǎn)換為對(duì)內(nèi)存的操作。,內(nèi)存的I/O映射,文件鎖,文件鎖,當(dāng)多個(gè)進(jìn)程同時(shí)存取同一個(gè)文件時(shí),有可能出現(xiàn)數(shù)據(jù)不一致的現(xiàn)象。為了避免這種現(xiàn)象的發(fā)生,在多個(gè)進(jìn)程同時(shí)存取同一個(gè)文件時(shí),必須遵守一定的規(guī)則。鎖就是這樣一種
11、機(jī)制。1. 共享鎖2. 互斥鎖,文件鎖,終端I/O,終端的行為模式,終端的行為的變化可通過(guò)改變其屬性來(lái)實(shí)現(xiàn),但由于終端所涉及的屬性比較多,因此,不同屬性值的組合,會(huì)使得終端表現(xiàn)出不同的行為方式。常用終端行為模式有以下三種:1. 規(guī)范模式2. 非規(guī)范模式3. 原始模式,規(guī)范模式,概念 這是我們常用的模式,是終端設(shè)備驅(qū)動(dòng)通常使用的模式。終端驅(qū)動(dòng)將從鍵盤接收的字符暫時(shí)存放于編輯緩沖區(qū)。因此,用戶可對(duì)鍵盤輸入進(jìn)行行
12、編輯,直至接收到回車鍵。終端驅(qū)動(dòng)在接收到回車鍵后,將編輯緩沖區(qū)中的內(nèi)容傳遞給應(yīng)用程序。在這種模式下,終端驅(qū)動(dòng)還負(fù)責(zé)對(duì)一些特殊字符進(jìn)行處理,如CTRL-C等。,非規(guī)范模式,概念 在這種模式下,終端驅(qū)動(dòng)關(guān)閉了編輯緩沖區(qū),驅(qū)動(dòng)將從鍵盤上接收的字符直接傳送給應(yīng)用程序,其中包括退格鍵和光標(biāo)移動(dòng)鍵等,這些鍵不再具有編輯功能,但仍然保留了對(duì)一些特殊字符的處理。,原始模式,概念 在這種模式下,終端驅(qū)動(dòng)不僅關(guān)閉了編
13、輯緩沖區(qū),而且也關(guān)閉了對(duì)一些特殊字符的處理,如退格鍵、光標(biāo)移動(dòng)鍵和CTRL-C鍵等。終端驅(qū)動(dòng)將接收的任意一個(gè)字符都上傳給應(yīng)用程序。,終端模式的設(shè)置,API函數(shù)tcgetattr()tcsetattr()struct termios {tcflag_t c_iflag; // 輸入模式tcflag_t c_oflag; // 輸出模式 tcflag_t c_cflag; // 控制模式t
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第9章基于linux操作系統(tǒng)的arm編程
- [教育]移動(dòng)編程課件第8章數(shù)據(jù)存儲(chǔ)與訪問(wèn)
- linux音頻編程
- 數(shù)字電子技術(shù)--第10章--可編程邏輯器件
- 第章圖形編程-上海大學(xué)
- 第4章vba編程基礎(chǔ)
- 第6章windows編程資料
- 第10章.doc
- 第10章-領(lǐng)導(dǎo)
- linux多線程編程
- 第10章 可編程控制器綜合應(yīng)用實(shí)踐
- 《第2章_linux啟動(dòng)服務(wù)和xinetd》
- 市場(chǎng)營(yíng)銷》講稿 第1章-第10章[第6章
- 第10章 排序
- 第9章Matlab編程作業(yè).pdf
- linux操作系統(tǒng)原理與應(yīng)用 教學(xué)課件 ppt 作者 張玲 第1-6章 第4章
- 第10章湍流模型
- 第10章_淋巴系統(tǒng)
- 基于GNU-Linux交通違章抓拍系統(tǒng)設(shè)計(jì)與開(kāi)發(fā).pdf
- 鍋爐原理課件10章
評(píng)論
0/150
提交評(píng)論