陳亦欣 江漢大學(xué) 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院
緩存管理器是Windows系統(tǒng)中的一個(gè)組件,提供一個(gè)與I/O管理器、虛擬內(nèi)存管理器和文件系統(tǒng)協(xié)同作業(yè)的數(shù)據(jù)緩沖,這個(gè)緩沖在整個(gè)操作系統(tǒng)的存儲(chǔ)設(shè)備上保持一致。緩存管理器把可用內(nèi)存空間分割為跟頁(yè)面一樣大的緩沖區(qū),磁盤(pán)中的數(shù)據(jù)可讀入緩沖區(qū),緩沖區(qū)數(shù)據(jù)可寫(xiě)入磁盤(pán)。緩存管理器以及文件系統(tǒng)二者可互相調(diào)用,前者為后者提供一些調(diào)用,并發(fā)出IRP請(qǐng)求,后者則為前者注冊(cè)回調(diào)函數(shù)。
當(dāng)有程序首次發(fā)出讀文件請(qǐng)求時(shí),緩存管理器就把文件數(shù)據(jù)讀取到文件系統(tǒng)緩存之中,接著用戶態(tài)進(jìn)程把緩沖區(qū)中的數(shù)據(jù)復(fù)制到自己的進(jìn)程空間里;而當(dāng)進(jìn)程完成了自身的工作后,數(shù)據(jù)先被寫(xiě)入文件系統(tǒng)緩存,最后再由緩存管理器將緩沖區(qū)中的數(shù)據(jù)寫(xiě)回磁盤(pán)文件中。
由于被緩沖文件的一切I/O請(qǐng)求全部需要通過(guò)緩存管理器,對(duì)于緩存管理器的策略會(huì)根據(jù)用戶態(tài)進(jìn)程的數(shù)據(jù)訪問(wèn)模式的不同而進(jìn)行調(diào)整。對(duì)于一個(gè)請(qǐng)求讀文件的應(yīng)用程序,緩存管理器會(huì)預(yù)先將其請(qǐng)求之后的數(shù)據(jù)也讀入緩沖區(qū),從而使得當(dāng)應(yīng)用程序接下來(lái)請(qǐng)求后面的數(shù)據(jù)時(shí)可以快速響應(yīng),縮短了等待時(shí)間。對(duì)于一個(gè)請(qǐng)求寫(xiě)文件的應(yīng)用程序,緩存管理器會(huì)將數(shù)據(jù)寫(xiě)入緩沖區(qū)并保留一段時(shí)間暫時(shí)不寫(xiě)入磁盤(pán),延遲一段時(shí)間再將緩沖區(qū)數(shù)據(jù)一起寫(xiě)入磁盤(pán)中。這樣就能使多個(gè)寫(xiě)操作合并成為一次寫(xiě)操作,更有效率,也降低了重復(fù)修改同一塊數(shù)據(jù)時(shí)對(duì)磁盤(pán)反復(fù)寫(xiě)的負(fù)載。
緩存管理器將文件映射到內(nèi)存中實(shí)現(xiàn)緩沖文件數(shù)據(jù)。一個(gè)由用戶態(tài)進(jìn)程發(fā)起的讀操作被I/O管理器傳遞到文件系統(tǒng)時(shí),緩存管理器協(xié)同I/O管理器、虛擬內(nèi)存管理器和文件系統(tǒng)共同工作,流程如下:
(1)用戶應(yīng)用程序執(zhí)行一個(gè)讀操作,它使控制被轉(zhuǎn)移到內(nèi)核中的I/O管理器中。
(2)I/O管理器使用IRP來(lái)把一個(gè)讀請(qǐng)求傳遞給合適的文件系統(tǒng)驅(qū)動(dòng)。
(3)文件系統(tǒng)驅(qū)動(dòng)接收到讀請(qǐng)求并發(fā)現(xiàn)是該讀操作是針對(duì)一個(gè)以緩沖方式打開(kāi)的文件。如果緩沖尚未初始化,那么緩存管理器就會(huì)被文件系統(tǒng)驅(qū)動(dòng)調(diào)用從而將其初始化。反過(guò)來(lái),緩存管理器請(qǐng)求虛擬內(nèi)存管理器為被緩存的文件創(chuàng)建一個(gè)文件映射(段對(duì)象)。
(4)文件系統(tǒng)驅(qū)動(dòng)程序調(diào)用CcCopyRead將讀取請(qǐng)求傳遞給緩存管理器。緩存管理器此時(shí)負(fù)責(zé)將數(shù)據(jù)傳輸?shù)接脩艟彌_區(qū)的一系列必要步驟。
(5)緩存管理器檢查它的數(shù)據(jù)結(jié)構(gòu),以確定是否存在含有用戶所請(qǐng)求的字節(jié)范圍的文件的映射視圖。如果沒(méi)有映射視圖存在,則由緩存管理器創(chuàng)建一個(gè)。
(6)緩存管理器從映射視圖復(fù)制數(shù)據(jù)到用戶緩沖區(qū)。
(7)如果文件的映射視圖不在包含所需數(shù)據(jù)的物理頁(yè)中,則產(chǎn)生一個(gè)頁(yè)錯(cuò)誤,且控制轉(zhuǎn)移到虛擬內(nèi)存管理器。
(8)虛擬內(nèi)存管理器為頁(yè)錯(cuò)誤分配物理頁(yè)面,它們會(huì)被用來(lái)包含被請(qǐng)求的數(shù)據(jù)。然后通過(guò)I/O管理器向文件系統(tǒng)驅(qū)動(dòng)發(fā)出一個(gè)非緩存分頁(yè)I/O讀操作。
(9)在接收到非緩沖的讀請(qǐng)求時(shí),文件系統(tǒng)驅(qū)動(dòng)程序創(chuàng)建一個(gè)相應(yīng)的I / O請(qǐng)求從二級(jí)存儲(chǔ)介質(zhì)獲取數(shù)據(jù)并將該I / O請(qǐng)求傳給較低層驅(qū)動(dòng)程序。
(10)文件系統(tǒng)下的設(shè)備驅(qū)動(dòng)程序從二級(jí)存儲(chǔ)(或通過(guò)網(wǎng)絡(luò))得到數(shù)據(jù)并完成請(qǐng)求。
(11)文件系統(tǒng)驅(qū)動(dòng)程序完成來(lái)自虛擬內(nèi)存管理器的分頁(yè)I/O請(qǐng)求。
(12)導(dǎo)致頁(yè)錯(cuò)誤的指令被重新執(zhí)行。
(13)緩存管理器完成從映射視圖到用戶緩沖區(qū)的復(fù)制操作。
(14)緩沖數(shù)據(jù)被復(fù)制到用戶緩沖區(qū)中后,緩存管理器將控制返回給文件系統(tǒng)驅(qū)動(dòng)程序。這些數(shù)據(jù)也將為緩存管理器繼續(xù)保留在虛擬地址空間里。虛擬內(nèi)存管理器能隨時(shí)將其從內(nèi)存里拋棄。
(15)文件系統(tǒng)驅(qū)動(dòng)完成由I/O管理器發(fā)送給它的原始IRP請(qǐng)求。
(16)I/O管理器完成用戶原始的讀取請(qǐng)求。
緩沖寫(xiě)操作的步驟也要依照一定的順序來(lái)滿足寫(xiě)入請(qǐng)求,和讀操作是基本類似的。Windows操作系統(tǒng)通過(guò)文件緩沖機(jī)制大大提高了系統(tǒng)文件的讀寫(xiě)相應(yīng)效率。
[1]方旺盛等.2004.一種基于文件緩沖方式的操作大數(shù)據(jù)量數(shù)據(jù)的方法[J]. 計(jì)算技術(shù)與自動(dòng)化, 23(4).
[2]陳煒,曹斌.基于雙緩沖文件系統(tǒng)過(guò)濾驅(qū)動(dòng)技術(shù)研究[J].信息安全與技術(shù),2013,4(11):44-47.