1. 磁盤高速緩存(Disk Cache)
操作系統(tǒng)中使用磁盤高速緩存技術(shù)來提高磁盤的I/O速度,對高速緩存復制的訪問要比原始數(shù)據(jù)訪問更為高效。例如,正在運行的進程的指令既存儲在磁盤上,也存儲在物理內(nèi)存上,也被復制到CPU的二級和一級高速緩存中。
不過,磁盤高速緩存技術(shù)不同于通常意義下的介于CPU與內(nèi)存之間的小容量高速存儲器,而是指利用內(nèi)存中的存儲空間來暫存從磁盤中讀出的一系列盤塊中的信息。因此,磁盤高速緩存在邏輯上屬于磁盤,物理上則是駐留在內(nèi)存中的盤塊。
高速緩存在內(nèi)存中分為兩種形式:一種是在內(nèi)存中開辟一個單獨的存儲空間作為磁速緩存,大小固定;另一種是把未利用的內(nèi)存空間作為一個緩沖池,供請求分頁系統(tǒng)和磁盤I/O時共享。
2. 緩沖區(qū)(Buffer)
在設(shè)備管理子系統(tǒng)中,引入緩沖區(qū)的目的主要有:
- 緩和CPU與I/O設(shè)備間速度不匹配的矛盾。
- 減少對CPU的中斷頻率,放寬對CPU中斷響應時間的限制。
- 解決基本數(shù)據(jù)單元大?。磾?shù)據(jù)粒度)不匹配的問題。
- 提高CPU和I/O設(shè)備之間的并行性。
其實現(xiàn)方法有:
- 釆用硬件緩沖器,但由于成本太高,除一些關(guān)鍵部位外,一般不釆用硬件緩沖器
- 釆用緩沖區(qū)(位于內(nèi)存區(qū)域)。
根據(jù)系統(tǒng)設(shè)置緩沖器的個數(shù),緩沖技術(shù)可以分為:
1) 單緩沖
在設(shè)備和處理機之間設(shè)置一個緩沖區(qū)。設(shè)備和處理機交換數(shù)據(jù)時,先把被交換數(shù)據(jù)寫入緩沖區(qū),然后需要數(shù)據(jù)的設(shè)備或處理機從緩沖區(qū)取走數(shù)據(jù)。
如圖5-5所示,在塊設(shè)備輸入時,假定從磁盤把一塊數(shù)據(jù)輸入到緩沖區(qū)的時間為T,操作系統(tǒng)將該緩沖區(qū)中的數(shù)據(jù)傳送到用戶區(qū)的時間為M,而CPU對這一塊數(shù)據(jù)處理的時間為 C。由于T和C是可以并行的,當T>C時,系統(tǒng)對每一塊數(shù)據(jù)的處理時間為M十T,反之則為M+C,故可把系統(tǒng)對每一塊數(shù)據(jù)的處理時間表示為Max(C, T)+M。
2) 雙緩沖
根據(jù)單緩沖的特點,CPU在傳送時間M內(nèi)處于空閑狀態(tài),由此引入雙緩沖。 I/O設(shè)備輸入數(shù)據(jù)時先裝填到緩沖區(qū)1,在緩沖區(qū)1填滿后才開始裝填緩沖區(qū)2,與此同時處理機可以從緩沖區(qū)1中取出數(shù)據(jù)放入用戶進程處理,當緩沖區(qū)1中的數(shù)據(jù)處理完后,若緩沖區(qū)2已填滿,則處理機又從緩沖區(qū)2中取出數(shù)據(jù)放入用戶進程處理,而I/O設(shè)備又可以裝填緩沖區(qū)1。雙緩沖機制提高了處理機和輸入設(shè)備的并行操作的程度。
如圖5-6所示,系統(tǒng)處理一塊數(shù)據(jù)的時間可以粗略地認為是MAC(C, T)。如果C<T,可使塊設(shè)備連續(xù)輸入(圖中所示情況);如果C>T,則可使CPU不必等待設(shè)備輸入。對于字符設(shè)備,若釆用行輸入方式,則釆用雙緩沖可使用戶在輸入完第一行之后,在CPU執(zhí)行第一行中的命令的同時,用戶可繼續(xù)向第二緩沖區(qū)輸入下一行數(shù)據(jù)。而單緩沖情況下則必須等待一行數(shù)據(jù)被提取完畢才可輸入下一行的數(shù)據(jù)。
如果兩臺機器之間通信僅配置了單緩沖,如圖5-7(a)所示。那么,它們在任一時刻都只能實現(xiàn)單方向的數(shù)據(jù)傳輸。例如,只允許把數(shù)據(jù)從A機傳送到B機,或者從B機傳送到A 機,而絕不允許雙方同時向?qū)Ψ桨l(fā)送數(shù)據(jù)。為了實現(xiàn)雙向數(shù)據(jù)傳輸,必須在兩臺機器中都設(shè)置兩個緩沖區(qū),一個用做發(fā)送緩沖區(qū),另一個用做接收緩沖區(qū),如圖5-7(b)所示。
圖5-7 雙機通信時緩沖區(qū)的設(shè)置
3) 循環(huán)緩沖
包含多個大小相等的緩沖區(qū),每個緩沖區(qū)中有一個鏈接指針指向下一個緩沖區(qū),最后一個緩沖區(qū)指針指向第一個緩沖區(qū),多個緩沖區(qū)構(gòu)成一個環(huán)形。
循環(huán)緩沖用于輸入/輸出時,還需要有兩個指針in和out。對輸入而言,首先要從設(shè)備接收數(shù)據(jù)到緩沖區(qū)中,in指針指向可以輸入數(shù)據(jù)的第一個空緩沖區(qū);當運行進程需要數(shù)據(jù)時,從循環(huán)緩沖區(qū)中取一個裝滿數(shù)據(jù)的緩沖區(qū),并從此緩沖區(qū)中提取數(shù)據(jù),out指針指向可以提取數(shù)據(jù)的第一個滿緩沖區(qū)。輸出則正好相反。
4) 緩沖池
由多個系統(tǒng)公用的緩沖區(qū)組成,緩沖區(qū)按其使用狀況可以形成三個隊列:空緩沖隊列、裝滿輸入數(shù)據(jù)的緩沖隊列(輸入隊列)和裝滿輸出數(shù)據(jù)的緩沖隊列(輸出隊列)。還應具有四種緩沖區(qū):用于收容輸入數(shù)據(jù)的工作緩沖區(qū)、用于提取輸入數(shù)據(jù)的工作緩沖區(qū)、 用于收容輸出數(shù)據(jù)的工作緩沖區(qū)及用于提取輸出數(shù)據(jù)的工作緩沖區(qū),如圖5-8所示。
當輸入進程需要輸入數(shù)據(jù)時,便從空緩沖隊列的隊首摘下一個空緩沖區(qū),把它作為收容輸入工作緩沖區(qū),然后把輸入數(shù)據(jù)輸入其中,裝滿后再將它掛到輸入隊列隊尾。當計算進程需要輸入數(shù)據(jù)時,便從輸入隊列取得一個緩沖區(qū)作為提取輸入工作緩沖區(qū),計算進程從中提取數(shù)據(jù),數(shù)據(jù)用完后再將它掛到空緩沖隊列尾。當計算進程需要輸出數(shù)據(jù)時,便從空緩沖隊列的隊首取得一個空緩沖區(qū),作為收容輸出工作緩沖區(qū),當其中裝滿輸出數(shù)據(jù)后,再將它掛到輸出隊列隊尾。當要輸出時,由輸出進程從輸出隊列中取得一個裝滿輸出數(shù)據(jù)的緩沖區(qū),作為提取輸出工作緩沖區(qū),當數(shù)據(jù)提取完后,再將它掛到空緩沖隊列的隊尾。
3. 高速緩存與緩沖區(qū)的對比
高速緩存是可以保存數(shù)據(jù)拷貝的高速存儲器,訪問高速緩存比訪問原始數(shù)據(jù)更高效速度更快。其對比見表5-1。
表5-1 高速緩存和緩沖區(qū)的對比 | 高速緩存 | 緩沖區(qū) |
---|
| 相同點 | 都是介于高速設(shè)備和低速設(shè)備之間 |
區(qū)別 | 存放數(shù)據(jù) | 存放的是低速設(shè)備上的某些數(shù)據(jù)的復制數(shù)據(jù),也就是高速緩存上有的低速設(shè)備上面必然有 | 存放的是低速設(shè)備傳遞給高速設(shè)備的數(shù)據(jù)(或者是高速設(shè)備傳送給低速設(shè)備的數(shù)據(jù)),而這些數(shù)據(jù)在低速設(shè)備(或者高速設(shè)備)卻不一定有備份,這些數(shù)據(jù)在從緩存區(qū)傳送到髙速設(shè)備(或者低速設(shè)備) |
目的 | 高速緩存存放的是高速設(shè)備經(jīng)常要訪問的數(shù)據(jù),如果高速設(shè)備要訪問的數(shù)據(jù)不在高速緩存中,高速設(shè)備就需要訪問低速設(shè)備 | 高速設(shè)備和低速設(shè)備的通信都要經(jīng)過緩存區(qū),高速設(shè)備永遠不會直接去訪問低速設(shè)備 |