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