馬哥教育網絡第20期—IO類型與IO模型

IO類型與IO模型

IO類型

同步與異步(synchronous,asynchronous):關注消息通知機制

同步:進程發出系統調用之后,不會立即有返回信息,但是一旦有返回信息,則一定是最終結果.
異步:進程發出系統調用之后,會有立即返回結果,但不是最終的結果,當內核處理完成之后,內核通過通知機制通知進程,該系統調用已完成.

阻塞與非阻塞(blocking,nonblocking):關注系統調用完成時,調用者的狀態

阻塞:調用者在返回結果之前,一直處于被掛起狀態,直到有調用結果返回時才能繼續工作.
非阻塞:調用者在調用結果返回之前,并不會被掛起,即系統調用這個動作不會阻塞調用者.

IO模型的分類

  • 阻塞I/O

  • 非阻塞I/O

  • 復用I/O

  • 事件驅動I/O

  • 異步I/O

自己畫的

37.png

畫完之后參考網上的

42.png

阻塞I/O模型

38.png

 當用戶進程發起系統調用之后,在內核還沒有完成該調用任務時,進程會一直被掛起,直到內核將調用完成(內核將數據從磁盤取出到內核內存做處理,處理完之后在將數據轉移至進程內存),這時進程才可以繼續工作.

非阻塞I/O模型

39.png

 當用戶進程發起系統調用之后,該進程不會被掛起,先是處于盲等待狀態,反復向內核確認該調用是否完成,當內核將數據從磁盤取出到內核內存處理完成時,該進程會被掛起,并且內核會將處理的數據轉移至進程內存,這時進程來能繼續工作(該進程在數據從內核內存轉移至進程內存時,是被掛起).

復用I/O模型

40.png

 當用戶進程發起系統調用之后,該進程可以發送多個處理請求交給內核處理,select,poll,epoll都是IO多路復用的機制。I/O多路復用就是通過一種機制,一個進程可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作。但select,poll,epoll本質上都是同步I/O,因為他們都需要在讀寫事件就緒后自己負責進行讀寫,也就是說這個讀寫過程是阻塞的,而異步I/O則無需自己負責進行讀寫,異步I/O的實現會負責把數據從內核拷貝到用戶空間.

事件驅動I/O模型

 當用戶進程發起系統調用之后,內核會立即返回一個信號,表示該調用已經收到,接下來該進程可以去處理其他工作,當內核將數據在內核內存中準備好之后,就會通知該進程,進程這個時候就會被掛起,等待內核將數據轉移至進程內存,進程才可以繼續工作.

異步I/O模型

41.png

 當用戶進程發起系統調用之后,內核會立即返回一個信號,表示該調用已經收到,進程可以自由活動,接下來內核處理數據,當內核將數據轉移至進程內存之后,會通知該進程數據已經準備好,此時進程只要去進程內存接著處理就OK.

原創文章,作者:nice_neo_linux,如若轉載,請注明出處:http://www.www58058.com/19860

(1)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-26
下一篇 2016-06-26

相關推薦

  • linux文本處理三劍客-sed

    sed 是什么? sed是一種流編輯器,它是文本處理中非常中的工具,在linux中被稱為linux文本處理三劍客之一,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文…

    Linux干貨 2017-03-15
  • kickstart+ftp+dhcp+tftp實現centos6的無人值守安裝

    環境IP : 172.16.0.32 centos 6.6 一.安裝相關包 安裝圖形界面 [root@localhost ~]# yum groupinstall “Desktop” “X Window System” “Chinese Support” [root@localhost ~]# yum -y install dhcp tftp-server …

    Linux干貨 2017-06-03
  • Linux運維基礎2

    shell編程

    Linux干貨 2018-03-19
  • 【社招】【小米-北京】運維開發工程師

    【社招】【小米-北京】運維開發工程師 【工作地點】北京市海淀區安寧莊東路72號科利源大廈 【薪酬福利】15k-30k 期權獎勵、六險一金、水果花茶、班車、健身房、食堂 【投遞方式】郵件主題“崗位+姓名”發送至lipengcheng3@xiaomi.com   崗位職責: 提高系統運維的自動化,主要包括運維平臺、PaaS、監控系統,自動化部…

    Linux干貨 2017-07-28
  • Linux – 計算機基礎知識體系

    一、認識計算機的組成      計算機組成(computer composition)指的是系統結構的邏輯實現,包括機器機內的數據流和控制流的組成及邏輯設計等。 計算機一般是由硬件系統和軟件系統這兩部分組成,硬件系統包括:CPU、內存、硬盤、輸入和輸出設備(鍵盤鼠標、顯示器等),軟件系統包括:系統軟件自身、用…

    Linux干貨 2017-02-19
  • 認識shell

    一、認識shell 什么是shell?shell為單詞外殼的意思。那么這是誰的外殼?我們知道一個系統中實際工作的是那些硬件,cpu、內存、磁盤等。我們如何調用這些硬件為我們工作?實際上,硬件是由內核kernel控制的。我們可以通過kernel控制硬件,但我們不能直接和內核kernel交流。我們需要一個外殼,這個外殼就是shell來溝通kernel。何為she…

    Linux干貨 2015-09-22
欧美性久久久久