天天看點

linux阻塞io和非阻塞io,IO的阻塞與非阻塞作業系統

IO的阻塞與非阻塞作業系統

所謂IO的阻塞與非阻塞,是指當進行IO操作時,需要的資源不可用,這時程式的表現。阻塞IO将讓程式處于等待狀态,指導需要的資源可用;而非阻塞IO将直接傳回,不等需要的資源可用。

目前IO模型主要經曆了以下五種: 1)阻塞IO 2)非阻塞IO 3)IO複用(select和poll) 4)信号驅動IO(sigio) 5)異步IO(aio_)

核心空間和使用者空間: 由于作業系統都包括核心空間和使用者空間(或者說核心态和使用者态),核心空間主要存放的是核心代碼和資料,是供系統程序使用的空間。而使用者空間主要存放的是使用者代碼和資料,是供使用者程序使用的空間。目前Linux系統簡化了分段機制,使得虛拟位址與線性位址總是保持一緻,是以,Linux系統的虛拟位址也是0~4G。Linux系統将這4G空間分為了兩個部分:将最高的1G空間(從虛拟位址0xC0000000到0xFFFFFFFF)供核心使用,即為“核心空間”,而将較低的3G空間(從虛拟位址 0x00000000到0xBFFFFFFF)供使用者程序使用,即為“使用者空間”。同時由于每個使用者程序都可以通過系統調用進入到核心空間,是以Linux的核心空間可以認為是被所有使用者程序所共享的,是以對于一個具體使用者程序來說,它可以通路的虛拟記憶體位址就是0~4G。另外Linux系統分為了四種特權級:0~3,主要是用來保護資源。0級特權最高,而3級則為最低,系統程序主要運作在0級,使用者程序主要運作在3級。

一般來說,IO操作都分為兩個階段,就拿套接口的輸入操作來說,它的兩個階段主要是: 1)等待網絡資料到來,當分組到來時,将其拷貝到核心空間的臨時緩沖區中 2)将核心空間臨時緩沖區中的資料拷貝到使用者空間緩沖區中

1、阻塞IO 預設情況下,所有套接口都是阻塞的。

假如recvfrom函數是一個系統調用:

說明:任何一個系統調用都會産生一個由使用者态到核心态切換,再從核心态到使用者态切換的過程,而程序上下文切換是通過系統中斷程式來實作的,需要儲存目前程序的上下文狀态,這是一個極其費力的過程。

2、非阻塞IO 當我們把套接口設定成非阻塞時,就是由使用者程序不停地詢問核心某種操作是否準備就緒,這就是我們常說的“輪詢”。這同樣是一件比較浪費CPU的方式。

所謂IO的阻塞與非阻塞,是指當進行IO操作時,需要的資源不可用,這時程式的表現。阻塞IO将讓程式處于等待狀态,指導需要的資源可用;而非阻塞IO将直接傳回,不等需要的資源可用。

3、IO複用 我們常用到的IO複用,主要是select和poll。這裡同樣是會阻塞程序的,但是這裡程序是阻塞在select或者poll這兩個系統調用上,而不是阻塞在真正的'IO操作上。 另外還有一點不同于阻塞IO的就是,盡管看起來與阻塞IO相比,這裡阻塞了兩次,但是第一次阻塞在select上時,select可以監控多個套

接口上是否已有IO操作準備就緒的,而不是像阻塞IO那種,一次性隻能監控一個套接口。

4、信号驅動IO 信号驅動IO就是說我們可以通過sigaction系統調用注冊一個信号處理程式,然後主程式可以繼續向下執行,當我們所監控的套接口有IO操作準備就緒時,由核心通知觸發前面注冊的信号處理程式執行,然後将我們所需要的資料從核心空間拷貝到使用者空間。

所謂IO的阻塞與非阻塞,是指當進行IO操作時,需要的資源不可用,這時程式的表現。阻塞IO将讓程式處于等待狀态,指導需要的資源可用;而非阻塞IO将直接傳回,不等需要的資源可用。

5、異步IO 異步IO與信号驅動IO最主要的差別就是信号驅動IO是由核心通知我們何時可以進行IO操作了,而異步IO則是由核心告訴我們IO操作何時完成了。具體來說就是,信号驅動IO當核心通知觸發信号處理程式時,信号處理程式還需要阻塞在從核心空間緩沖區拷貝資料到使用者空間

緩沖區這個階段,而異步IO直接是在第二個階段完成後核心直接通知可以程序後續操作了。

綜上所述,我們發現 前四種IO模型的主要差別是在第一階段,因為它們的第二階段都是在阻塞等待資料由核心空間拷貝到使用者空間;而異步IO很明顯與前面四種有所不同,它在第一階段和第二階段都不會阻塞。具體參考如下:

所謂IO的阻塞與非阻塞,是指當進行IO操作時,需要的資源不可用,這時程式的表現。阻塞IO将讓程式處于等待狀态,指導需要的資源可用;而非阻塞IO将直接傳回,不等需要的資源可用。

最後,總結下同步IO與異步IO的差別: 1)同步IO操作會引起程序阻塞直到IO操作完成。 2)異步IO操作不引起程序阻塞。

是以,由上面定義可以看出,阻塞IO、非阻塞IO、IO複用、信号驅動IO都是屬于同步IO,而異步IO模型才與異步IO定義所比對。

【IO的阻塞與非阻塞作業系統】相關文章: