I O多路復用一些概念

2022-07-04 03:48:10 字數 2416 閱讀 4234

在事件驅動模型中,我們說當程式遇到i/o操作時,註冊 乙個**到事件迴圈中,主程式繼續做其他事情。當i/o操作完成後,再切換回原來的任務。這就是說i/o操作是和程式本身沒關係的,其實i/o操作都是由作業系統來完成的。那麼程式怎麼知道i/o操作完成並切換回來呢?這就要求這個i/o操作處理完成之後呼叫乙個**函式(註冊在佇列中的事件一般都各自儲存各自的處理函式指標),告訴程式整個i/o過程執行完畢。

linux環境下的network i/o

- 使用者空間和核心空間

- 程序切換

- 程序的阻塞

- 檔案描述符

- 快取 i/o

現在作業系統都是採用虛擬儲存器,那麼對32位作業系統而言,它的定址空間(虛擬儲存空間)為4g(2的32次方)。作業系統的核心是核心,獨立於普通的應用程式,可以訪問受保護的記憶體空間,也有訪問底層硬體裝置的所有許可權。為了保證使用者程序不能直接操作核心(kernel),保證核心的安全,操心系統將虛擬空間劃分為兩部分,一部分為核心空間,一部分為使用者空間。針對linux作業系統而言,將最高的1g位元組(從虛擬位址0xc0000000到0xffffffff),供核心使用,稱為核心空間,而將較低的3g位元組(從虛擬位址0x00000000到0xbfffffff),供各個程序使用,稱為使用者空間。  

cpu的兩種工作狀態:

現在的作業系統都是分時作業系統,分時的根源,來自於硬體層面作業系統核心占用的記憶體與應用程式占用的記憶體彼此之間隔離。cpu通過psw(程式狀態暫存器)中的乙個2進製位來控制cpu本身的工作狀態,即核心態與使用者態。

核心態:作業系統核心只能運作於cpu的核心態,這種狀態意味著可以執行cpu所有的指令,可以執行cpu所有的指令,這也意味著對計算機硬體資源有著完全的控制許可權,並且可以控制cpu工作狀態由核心態轉成使用者態。

使用者態:應用程式只能運作於cpu的使用者態,這種狀態意味著只能執行cpu所有的指令的一小部分(或者稱為所有指令的乙個子集),這一小部分指令對計算機的硬體資源沒有訪問許可權(比如i/o),並且不能控制由使用者態轉成核心態。

為了控制程序的執行,核心必須有能力掛起正在cpu上執行的程序,並恢復以前掛起的某個程序的執行。這種行為被稱為程序切換。因此可以說,任何程序都是在作業系統核心的支援下執行的,是與核心緊密相關的。

從乙個程序的執行轉到另乙個程序上執行,這個過程中經過下面這些變化:

儲存處理機上下文,包括程式計數器和其他暫存器。

更新pcb資訊。

把程序的pcb移入相應的佇列,如就緒、在某事件阻塞等佇列。

選擇另乙個程序執行,並更新其pcb。

更新記憶體管理的資料結構。

恢復處理機上下文。

總而言之就是很耗資源,具體的可以參考這篇文章:程序切換

注:程序控制塊(processing control block),是作業系統

核心中一種資料結構,主要表示程序狀態。其作用是使乙個在多道程式環境下不能獨立執行的程式(含資料),成為乙個能獨立執行的基本單位或與其它程序併發執行的程序。或者說,os是根據pcb來對併發執行的程序進行控制和管理的。 pcb通常是系統記憶體占用區中的乙個連續存區,它存放著作業系統用於描述程序情況及控制程序執行所需的全部資訊 

正在執行的程序,由於期待的某些事件未發生,如請求系統資源失敗、等待某種操作的完成、新資料尚未到達或無新工作做等,則由系統自動執行阻塞原語(block),使自己由執行狀態變為阻塞狀態。可見,程序的阻塞是程序自身的一種主動行為,也因此只有處於執行態的程序(獲得cpu),才可能將其轉為阻塞狀態。當程序進入阻塞狀態,是不占用cpu資源的

檔案描述符(file descriptor)是電腦科學中的乙個術語,是乙個用於表述指向檔案的引用的抽象化概念。

檔案描述符在形式上是乙個非負整數。實際上,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞著檔案描述符展開。但是檔案描述符這一概念往往只適用於unix、linux這樣的作業系統。

快取 i/o 又被稱作標準 i/o,大多數檔案系統的預設 i/o 操作都是快取 i/o。在 linux 的快取 i/o 機制中,作業系統會將 i/o 的資料快取在檔案系統的頁快取( page cache )中,也就是說,資料會先被拷貝到作業系統核心的緩衝區中,然後才會從作業系統核心的緩衝區拷貝到應用程式的位址空間。

1、i/o操作都是由作業系統執行的。在事情驅動模型中,i/o操作完成後都要求呼叫乙個**函式,以告知該i/o完成,再切換原來的任務

2、檔案讀寫和socket網路資料傳輸的資料都會先進入系統的緩衝區,再拷貝到應用程式的位址空間中。但是這些操作cpu和記憶體的開銷都大,以至於作業系統會儘量減少核心態和使用者態之間來回copy,於是socket網路傳輸中會有粘包現象 

I O多路復用

一 五種i o模型 1 阻塞i o模型 最流行的i o模型是阻塞i o模型,預設情形下,所有套介面都是阻塞的。我們以資料報套介面為例來講解此模型 我們使用udp而不是tcp作為例子的原因在於就udp而言,資料準備好讀取的概念比較簡單 要麼整個資料報已經收到,要麼還沒有。然而對於tcp來說,諸如套介面...

i o多路復用

最常見的i o多路復用就是 select poll epoll了,下面說說他們的一些特點和區別吧。select 可讀 可寫 異常三種檔案描述符集的申明和初始化。fd set readfds,writefds,exceptionfds fd zero readfds fd zero writefds ...

I O多路復用

我們都知道unix like 世界裡,一切皆檔案,而檔案是什麼呢?檔案就是一串二進位製流而已,不管socket,還是fifo 管道 終端,對我們來說,一切都是檔案,一切都是流。在資訊 交換的過程中,我們都是對這些流進行資料的收發操作,簡稱為i o操作 input and output 往流中讀出資料...