日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据缓冲区高速缓冲

發(fā)布時(shí)間:2024/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据缓冲区高速缓冲 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)據(jù)緩沖區(qū)高速緩沖

緩沖頭部




一個(gè)緩沖區(qū)有兩部分組成:一個(gè)含有磁盤(pán)上數(shù)據(jù)的存儲(chǔ)數(shù)組和一個(gè)標(biāo)識(shí)該緩

沖區(qū)的緩沖頭部。

一個(gè)緩沖區(qū)的數(shù)據(jù)與文件系統(tǒng)上一個(gè)邏輯磁盤(pán)塊中的數(shù)據(jù)相對(duì)應(yīng),并且通過(guò)

考察緩沖頭部中的標(biāo)識(shí)字段來(lái)識(shí)別緩沖區(qū)內(nèi)容。緩沖區(qū)是磁盤(pán)塊在主存中的拷貝,

磁盤(pán)塊的內(nèi)容映射到緩沖區(qū)中。但是同一時(shí)刻,一個(gè)磁盤(pán)塊不能映射到多個(gè)緩沖

區(qū)中。

設(shè)備號(hào)字段和塊號(hào)字段指明了文件系統(tǒng)和磁盤(pán)上數(shù)據(jù)的塊號(hào),唯一地標(biāo)識(shí)了

該緩沖區(qū)。設(shè)備號(hào)是邏輯文件系統(tǒng)號(hào),不是物理設(shè)備號(hào)。緩沖區(qū)的數(shù)據(jù)部分必須

大于等于磁盤(pán)塊的大小。

緩沖區(qū)的狀態(tài)是有下列條件的組合:

1)緩沖區(qū)當(dāng)前為“上鎖”(忙)

2)緩沖區(qū)包含有效數(shù)據(jù)

3)內(nèi)核把某緩沖區(qū)重新分配出去之前必須把該緩沖區(qū)內(nèi)容寫(xiě)到磁盤(pán)上(延遲寫(xiě))

4)內(nèi)核當(dāng)前正從磁盤(pán)往緩沖區(qū)讀信息或把緩沖區(qū)的內(nèi)容寫(xiě)到磁盤(pán)上

5)一個(gè)進(jìn)程當(dāng)前正在等候緩沖區(qū)變?yōu)殚e。


緩沖池

內(nèi)核按照最近最少使用算法把數(shù)據(jù)緩存于緩沖池中,內(nèi)核維護(hù)一個(gè)緩沖區(qū)的

空閑表(雙向鏈表),它保存最近被使用的次序。離空閑表最近的緩沖區(qū)比離空

閑表頭遠(yuǎn)的緩沖區(qū)是最近最少使用的。


散列隊(duì)列

內(nèi)核把緩沖區(qū)組織成一個(gè)個(gè)隊(duì)列,這些隊(duì)列是按照設(shè)備號(hào)和塊號(hào)散列的。內(nèi)

核把一個(gè)散列隊(duì)列上的緩沖區(qū)鏈接成一個(gè)個(gè)類(lèi)似空閑表結(jié)構(gòu)的雙向鏈接循環(huán)表,

內(nèi)核使用的散列函數(shù)也是簡(jiǎn)單的,這樣保證性能。

一個(gè)緩沖區(qū)必須在散列隊(duì)列里面,也可以在空閑表中。


緩沖區(qū)的檢索

若果一個(gè)進(jìn)程想要都一個(gè)文件中的數(shù)據(jù),則內(nèi)核需要判定數(shù)據(jù)在哪個(gè)文件系統(tǒng)

的哪個(gè)塊上。當(dāng)要從一個(gè)特定的磁盤(pán)上讀取數(shù)據(jù)時(shí),內(nèi)核檢測(cè)數(shù)據(jù)是否在緩沖區(qū)上,

是在就直接可以從緩沖區(qū)上讀取數(shù)據(jù);否則,分一個(gè)空閑緩沖區(qū)。


讀寫(xiě)磁盤(pán)塊--算法getblk

內(nèi)核給緩沖區(qū)分配磁盤(pán)塊時(shí),可能出現(xiàn)五種情況:

1)內(nèi)核在散列隊(duì)列找到該塊,并且它的緩沖區(qū)是空閑的

2)內(nèi)核在散列隊(duì)列中找不到該塊,因此,從空閑表中分配一個(gè)緩沖區(qū)

3)內(nèi)核在散列隊(duì)列中找不到該塊,試圖從空閑表中分配一個(gè)緩沖區(qū)的時(shí)候,

在空閑表中找到一個(gè)已經(jīng)表上“延遲寫(xiě)”標(biāo)記的緩沖區(qū)。內(nèi)核必須該緩沖區(qū)的

內(nèi)容寫(xiě)到磁盤(pán)上,并分配另外一個(gè)緩沖區(qū)。

4)內(nèi)核在散列隊(duì)列中找不到該塊,并且空閑表已空。

5)內(nèi)核在散列隊(duì)列中找到該塊,但是它的緩沖區(qū)為忙。


算法:getblk 輸入:文件系統(tǒng)號(hào) 塊號(hào) 輸出:現(xiàn)在能被磁盤(pán)塊使用的上了鎖的緩沖區(qū) {while(沒(méi)有找到緩沖區(qū)){if(塊在散列隊(duì)列中){if(塊忙){/*第5種情況*/sleep(等待“緩沖區(qū)變?yōu)榭臻e”事件);continue;}為緩沖區(qū)標(biāo)記上“忙”;從空閑表中摘下緩沖區(qū);return (緩沖區(qū));}else{if(空閑表中沒(méi)有緩沖區(qū)){/*第4種情況*/sleep(等待“任何緩沖區(qū)變?yōu)榭臻e”事件);continue;}從空閑表中摘下緩沖區(qū);if(緩沖區(qū)標(biāo)記著延遲寫(xiě)){/*第3種情況*/把緩沖區(qū)異步寫(xiě)到磁盤(pán)上;continue;}從舊散列隊(duì)列中摘下緩沖區(qū);把緩沖區(qū)投入新散列隊(duì)列;return (緩沖區(qū));}} }

釋放緩沖區(qū)算法brelse

算法:brelse 輸入:上鎖態(tài)的緩沖區(qū) 輸出:無(wú) {喚醒正在等待緩沖區(qū)變?yōu)榭臻e的所有進(jìn)程;喚醒正在等待任何緩沖區(qū)變?yōu)榭臻e的所有進(jìn)程;提高處理機(jī)執(zhí)行級(jí)以封鎖中斷;if(緩沖區(qū)所有內(nèi)容有效且緩沖區(qū)非舊)將緩沖區(qū)送入空閑表尾部else將緩沖區(qū)送入空閑表頭部降低處理機(jī)執(zhí)行級(jí)以允許中斷;給緩沖區(qū)解鎖;}

情況1:內(nèi)核搜索塊4的實(shí)例圖


? ? ? ?圖--在散列隊(duì)列上搜索塊4



? ? ? ? 圖--從空閑表上摘下第4塊


情況2:從緩沖區(qū)上找第21塊


圖--在緩沖區(qū)上搜索第21塊



圖--從空閑表中摘下第一個(gè)緩沖區(qū),分配給第21塊

重新給該塊的緩沖區(qū)安置在相應(yīng)的散列隊(duì)列里面。


情況3:內(nèi)核必須從空閑表中分配到一個(gè)緩沖區(qū)。

從空閑表中摘下的緩沖區(qū)已經(jīng)被標(biāo)上“延遲寫(xiě)”,因此,它必須在使用該緩沖區(qū)之前,

將緩沖區(qū)的內(nèi)容寫(xiě)到磁盤(pán)上。內(nèi)核開(kāi)始了一個(gè)異步寫(xiě),并且試圖從空閑表上分配到

另外一個(gè)緩沖區(qū)。當(dāng)異步寫(xiě)完成時(shí),內(nèi)核把該緩沖區(qū)釋放,并把它放到空閑表的首部。


? ? ? ? 圖-- 搜索第21塊,空閑表上頭兩個(gè)緩沖區(qū)標(biāo)記著延遲寫(xiě)



圖--寫(xiě)第3塊、第5塊,把第4塊的緩沖區(qū)分配該第21塊


情況4:散列隊(duì)列找不到該塊,并且空閑表為空

進(jìn)程A進(jìn)入睡眠狀態(tài),直到有另外一個(gè)進(jìn)程執(zhí)行算法brelse,釋放一個(gè)緩沖區(qū)。當(dāng)內(nèi)核

調(diào)度到進(jìn)程A時(shí),它必須重新為該塊重新搜索散列隊(duì)列,此舉保證僅有一個(gè)緩沖區(qū)包含

該塊。





情況5:進(jìn)程B等待進(jìn)程A正在使用的塊(忙),進(jìn)程B將進(jìn)入睡眠狀態(tài)

進(jìn)程A執(zhí)行算法brelse,釋放該緩沖區(qū),這時(shí)將喚醒”緩沖區(qū)變?yōu)榭臻e“上睡眠的所

進(jìn)程,包括進(jìn)程B。當(dāng)內(nèi)核調(diào)度到進(jìn)程B執(zhí)行時(shí),進(jìn)程B需要再次搜索該磁盤(pán)塊。
















總結(jié)

以上是生活随笔為你收集整理的数据缓冲区高速缓冲的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。