亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

操作系統(tǒng)

IO的阻塞與非阻塞操作系統(tǒng)

時(shí)間:2025-05-30 13:58:31 操作系統(tǒng) 我要投稿
  • 相關(guān)推薦

IO的阻塞與非阻塞操作系統(tǒng)

  所謂IO的阻塞與非阻塞,是指當(dāng)進(jìn)行IO操作時(shí),需要的資源不可用,這時(shí)程序的表現(xiàn)。阻塞IO將讓程序處于等待狀態(tài),指導(dǎo)需要的資源可用;而非阻塞IO將直接返回,不等需要的資源可用。

  目前IO模型主要經(jīng)歷了以下五種: 1)阻塞IO 2)非阻塞IO 3)IO復(fù)用(select和poll) 4)信號(hào)驅(qū)動(dòng)IO(sigio) 5)異步IO(aio_)

  內(nèi)核空間和用戶空間: 由于操作系統(tǒng)都包括內(nèi)核空間和用戶空間(或者說(shuō)內(nèi)核態(tài)和用戶態(tài)),內(nèi)核空間主要存放的是內(nèi)核代碼和數(shù)據(jù),是供系統(tǒng)進(jìn)程使用的空間。而用戶空間主要存放的是用戶代碼和數(shù)據(jù),是供用戶進(jìn)程使用的空間。目前Linux系統(tǒng)簡(jiǎn)化了分段機(jī)制,使得虛擬地址與線性地址總是保持一致,因此,Linux系統(tǒng)的虛擬地址也是0~4G。Linux系統(tǒng)將這4G空間分為了兩個(gè)部分:將最高的1G空間(從虛擬地址0xC0000000到0xFFFFFFFF)供內(nèi)核使用,即為“內(nèi)核空間”,而將較低的3G空間(從虛擬地址 0x00000000到0xBFFFFFFF)供用戶進(jìn)程使用,即為“用戶空間”。同時(shí)由于每個(gè)用戶進(jìn)程都可以通過(guò)系統(tǒng)調(diào)用進(jìn)入到內(nèi)核空間,因此Linux的內(nèi)核空間可以認(rèn)為是被所有用戶進(jìn)程所共享的,因此對(duì)于一個(gè)具體用戶進(jìn)程來(lái)說(shuō),它可以訪問(wèn)的虛擬內(nèi)存地址就是0~4G。另外Linux系統(tǒng)分為了四種特權(quán)級(jí):0~3,主要是用來(lái)保護(hù)資源。0級(jí)特權(quán)最高,而3級(jí)則為最低,系統(tǒng)進(jìn)程主要運(yùn)行在0級(jí),用戶進(jìn)程主要運(yùn)行在3級(jí)。

  一般來(lái)說(shuō),IO操作都分為兩個(gè)階段,就拿套接口的輸入操作來(lái)說(shuō),它的兩個(gè)階段主要是: 1)等待網(wǎng)絡(luò)數(shù)據(jù)到來(lái),當(dāng)分組到來(lái)時(shí),將其拷貝到內(nèi)核空間的臨時(shí)緩沖區(qū)中 2)將內(nèi)核空間臨時(shí)緩沖區(qū)中的數(shù)據(jù)拷貝到用戶空間緩沖區(qū)中

  1、阻塞IO 默認(rèn)情況下,所有套接口都是阻塞的。

  假如recvfrom函數(shù)是一個(gè)系統(tǒng)調(diào)用:

  說(shuō)明:任何一個(gè)系統(tǒng)調(diào)用都會(huì)產(chǎn)生一個(gè)由用戶態(tài)到內(nèi)核態(tài)切換,再?gòu)膬?nèi)核態(tài)到用戶態(tài)切換的過(guò)程,而進(jìn)程上下文切換是通過(guò)系統(tǒng)中斷程序來(lái)實(shí)現(xiàn)的,需要保存當(dāng)前進(jìn)程的上下文狀態(tài),這是一個(gè)極其費(fèi)力的過(guò)程。

  2、非阻塞IO 當(dāng)我們把套接口設(shè)置成非阻塞時(shí),就是由用戶進(jìn)程不停地詢問(wèn)內(nèi)核某種操作是否準(zhǔn)備就緒,這就是我們常說(shuō)的“輪詢”。這同樣是一件比較浪費(fèi)CPU的方式。

  所謂IO的阻塞與非阻塞,是指當(dāng)進(jìn)行IO操作時(shí),需要的資源不可用,這時(shí)程序的表現(xiàn)。阻塞IO將讓程序處于等待狀態(tài),指導(dǎo)需要的資源可用;而非阻塞IO將直接返回,不等需要的資源可用。

  3、IO復(fù)用 我們常用到的IO復(fù)用,主要是select和poll。這里同樣是會(huì)阻塞進(jìn)程的,但是這里進(jìn)程是阻塞在select或者poll這兩個(gè)系統(tǒng)調(diào)用上,而不是阻塞在真正的IO操作上。 另外還有一點(diǎn)不同于阻塞IO的就是,盡管看起來(lái)與阻塞IO相比,這里阻塞了兩次,但是第一次阻塞在select上時(shí),select可以監(jiān)控多個(gè)套

  接口上是否已有IO操作準(zhǔn)備就緒的,而不是像阻塞IO那種,一次性只能監(jiān)控一個(gè)套接口。

  4、信號(hào)驅(qū)動(dòng)IO 信號(hào)驅(qū)動(dòng)IO就是說(shuō)我們可以通過(guò)sigaction系統(tǒng)調(diào)用注冊(cè)一個(gè)信號(hào)處理程序,然后主程序可以繼續(xù)向下執(zhí)行,當(dāng)我們所監(jiān)控的套接口有IO操作準(zhǔn)備就緒時(shí),由內(nèi)核通知觸發(fā)前面注冊(cè)的信號(hào)處理程序執(zhí)行,然后將我們所需要的數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間。

  所謂IO的阻塞與非阻塞,是指當(dāng)進(jìn)行IO操作時(shí),需要的資源不可用,這時(shí)程序的表現(xiàn)。阻塞IO將讓程序處于等待狀態(tài),指導(dǎo)需要的資源可用;而非阻塞IO將直接返回,不等需要的資源可用。

  5、異步IO 異步IO與信號(hào)驅(qū)動(dòng)IO最主要的區(qū)別就是信號(hào)驅(qū)動(dòng)IO是由內(nèi)核通知我們何時(shí)可以進(jìn)行IO操作了,而異步IO則是由內(nèi)核告訴我們IO操作何時(shí)完成了。具體來(lái)說(shuō)就是,信號(hào)驅(qū)動(dòng)IO當(dāng)內(nèi)核通知觸發(fā)信號(hào)處理程序時(shí),信號(hào)處理程序還需要阻塞在從內(nèi)核空間緩沖區(qū)拷貝數(shù)據(jù)到用戶空間

  緩沖區(qū)這個(gè)階段,而異步IO直接是在第二個(gè)階段完成后內(nèi)核直接通知可以進(jìn)程后續(xù)操作了。

  綜上所述,我們發(fā)現(xiàn) 前四種IO模型的主要區(qū)別是在第一階段,因?yàn)樗鼈兊牡诙A段都是在阻塞等待數(shù)據(jù)由內(nèi)核空間拷貝到用戶空間;而異步IO很明顯與前面四種有所不同,它在第一階段和第二階段都不會(huì)阻塞。具體參考如下:

  所謂IO的阻塞與非阻塞,是指當(dāng)進(jìn)行IO操作時(shí),需要的資源不可用,這時(shí)程序的表現(xiàn)。阻塞IO將讓程序處于等待狀態(tài),指導(dǎo)需要的資源可用;而非阻塞IO將直接返回,不等需要的資源可用。

  最后,總結(jié)下同步IO與異步IO的區(qū)別: 1)同步IO操作會(huì)引起進(jìn)程阻塞直到IO操作完成。 2)異步IO操作不引起進(jìn)程阻塞。

  因此,由上面定義可以看出,阻塞IO、非阻塞IO、IO復(fù)用、信號(hào)驅(qū)動(dòng)IO都是屬于同步IO,而異步IO模型才與異步IO定義所匹配。

【IO的阻塞與非阻塞操作系統(tǒng)】相關(guān)文章:

關(guān)于Java中的阻塞隊(duì)列05-28

護(hù)士資格教材考點(diǎn):慢性阻塞性肺疾病病人護(hù)理09-03

臨床助理醫(yī)師《呼吸系統(tǒng)》考點(diǎn):慢性阻塞性肺疾病10-28

2017醫(yī)學(xué)理論病理學(xué)考點(diǎn):慢性阻塞性肺氣腫09-09

2017中醫(yī)助理醫(yī)師考試《內(nèi)科學(xué)》之慢性阻塞性肺疾病08-22

linux查看磁盤(pán)io的方法是什么10-29

國(guó)產(chǎn)操作系統(tǒng)典范:deepin操作系統(tǒng)08-21

操作系統(tǒng)的種類07-07

LINUX操作系統(tǒng)09-19