緩沖區(qū)的出現(xiàn)是為了減少頻繁的系統(tǒng)調(diào)用,由于系統(tǒng)調(diào)用需要保存之前的進(jìn)程數(shù)據(jù)和狀態(tài)等信息,而結(jié)束調(diào)用之后回來(lái)還需要回復(fù)之前的信息,為了減少這種耗時(shí)耗性能的調(diào)用于是出現(xiàn)了緩沖區(qū)。 在linux系統(tǒng)中,每個(gè)進(jìn)程有自己獨(dú)立的緩沖區(qū),叫做進(jìn)程緩沖區(qū),而系統(tǒng)內(nèi)核也有個(gè)緩沖區(qū)叫做內(nèi)核緩沖區(qū)。 當(dāng)進(jìn)程需要指定的磁盤(pán)數(shù)據(jù)的時(shí)候,進(jìn)程先到內(nèi)核緩沖區(qū)去看看數(shù)據(jù)是否在內(nèi)核緩沖區(qū),如果沒(méi)有,內(nèi)核把讀取磁盤(pán)中此數(shù)據(jù)的請(qǐng)求添加到內(nèi)核的請(qǐng)求隊(duì)列,然后掛起此進(jìn)程,等解決了別的進(jìn)程的問(wèn)題之后,磁盤(pán)中的數(shù)據(jù)也讀取到了內(nèi)核緩沖區(qū),然后復(fù)制數(shù)據(jù)到進(jìn)程緩沖區(qū),接著喚醒這個(gè)被掛起的進(jìn)程,進(jìn)程從自己的進(jìn)程緩沖區(qū)中拿到數(shù)據(jù),然后繼續(xù)工作。 但是一般的操作系統(tǒng)在存儲(chǔ)數(shù)據(jù)的時(shí)候也并不是立即存儲(chǔ)的,這個(gè)是磁盤(pán)文件系統(tǒng)設(shè)計(jì)的問(wèn)題,有些UNIX操作系統(tǒng)除外,相對(duì)數(shù)據(jù)安全,但是IO不可避免的會(huì)降低。操作系統(tǒng)使用read函數(shù)把數(shù)據(jù)從內(nèi)核緩沖區(qū)復(fù)制到進(jìn)程緩沖區(qū),write把數(shù)據(jù)從進(jìn)程緩沖區(qū) 復(fù)制到內(nèi)核緩沖區(qū)中。至于什么時(shí)候讀取和存儲(chǔ)則由內(nèi)核來(lái)決定,內(nèi)核緩沖區(qū)滿則存儲(chǔ)到磁盤(pán),讀取的時(shí)候內(nèi)核緩沖區(qū)空則從磁盤(pán)讀取到內(nèi)核緩沖區(qū)中,當(dāng)然,在寫(xiě)入的時(shí)候如果系統(tǒng)突然關(guān)閉則會(huì)造成內(nèi)核緩沖區(qū)的數(shù)據(jù)無(wú)法存儲(chǔ)到磁盤(pán)的事情發(fā)生。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注