系統程式設計 I O模型

2022-03-13 16:41:11 字數 1433 閱讀 4337

i/o處理五種模型

***阻塞i/o模型

***非阻塞i/o模型

***i/o多路轉接模型

***訊號驅動i/o模型

當資料報準備好的時候,核心會向應用程式傳送乙個訊號,程序對訊號進行捕捉,並且呼叫訊號處理函式來獲取資料報。

該模型分為兩個階段:

1.資料準備階段:未阻塞,當資料準備完成之後,會主動的通知使用者程序資料已經準備完成,對使用者程序做乙個**。

2.資料拷貝階段:阻塞使用者程序,等待資料拷貝。

***非同步i/o模型

同步和非同步是針對應用程式和核心互動而言的;

同步是使用者程序觸發io操作並等待或輪詢的去檢視是否就緒;

非同步是指使用者程序觸發io操作以後便開始做自己的事情,而當io操作已經完成的時候會得到io完成的通知,這需要cpu支援。

模擬一下,將非同步i/o模型模擬為叫外賣

此時科技已經非常發達,外賣機械人將外賣自動送達並轉換成營養快速注入我的體內,同時還能得到口感的滿足。

注入結束後,機械人會提醒我注入完畢。

在這個期間我可以放心大膽的做其他事情,甚至注射的時候也不需要停下來!

使用者程序發起系統呼叫後,立刻就可以開始去做其他的事情,然後直到i/o資料準備好並複製完成後,核心會給使用者程序傳送通知,告訴使用者程序操作已經完成了

1.非同步i/o執行的兩個階段都不會阻塞讀寫操作,由核心完成。

2.完成後核心將資料放到指定的緩衝區,通知應用程式來取。

小實驗非阻塞小實驗 - 思路

* 使用open開啟檔案時,設定o_nonblock檔案狀態標誌。

* 對於已經開啟的檔案, 則使用fcntl系統呼叫來修改其檔案狀態標誌。

Linux系統程式設計 IO部分

標準i o是ansi c建立的乙個標準i o模型,移植性好。例如在windows下或者在liunx下等平台下進行c開發都使用printf函式進行列印,所以printf就是典型的標準io。file型別 基本函式 操作函式 開啟檔案 fopen 關閉檔案 fclose 獲取乙個字元 fgetc 輸出乙個...

Linux系統程式設計 檔案IO 一

最近在在實驗樓上學linux,做點筆記。上面的課程對於學習linux還不錯,有興趣可以看看。檔案io linux提供給了使用者程式一些介面,用來呼叫執行相關的功能。大多數linux檔案i o只需要用到5個函式 open,read,write,lseek和close 檔案描述符 檔案描述符是乙個非負整...

linux系統程式設計之檔案I O

一 檔案描述符 linux系統中,所有開啟的檔案都對應乙個數字,這個數字由系統來分配,稱為檔案描述符。pcb程序控制塊裡有檔案描述符表,以陣列形式存放於核心區。乙個程序預設開啟3個檔案描述符 stdin fileno 0 stdout fileno 1 stderr fileno 2 新開啟檔案返回...