作業系統實驗八 採用快取記憶體實現檔案讀寫

2021-10-08 18:55:28 字數 1855 閱讀 1048

(1)了解windows系統檔案快取記憶體的概念。

(2)熟悉windows系統檔案讀寫相關api。

(3)掌握採用緩衝方式實現檔案讀寫相關引數的設定。

快取記憶體

訪問快取必將訪問磁碟,而磁碟的訪問速度遠遠低於記憶體的訪問速度,快取記憶體就是利用記憶體中的儲存空間,來再存磁碟傳輸資料,因此快取記憶體不是真正的物理裝置,而是乙隻核心及記憶體映像機制。由於它被設定在記憶體中,因此速度非常快,可以在一定程度上解決cpu與磁碟速度不匹配的問題。

**快取記憶體的原理是:**假設乙個程序讀檔案的第一塊資料,它常常會按順序讀取第二個資料,第三塊資料等等,直到讀出所有需要的資料。利用這個規律可以進行檔案的預先讀,即在程序沒有讀第二塊資料,第三塊資料之前,作業系統提前把這些資料讀入記憶體的快取記憶體。當程序請求訪問這些資料時,就可以快速的將這些資料從快取記憶體中讀出交給程序使用。另外,由於檔案可能會被多次讀出,在第一次讀出後,將檔案儲存在快取記憶體中, 以後再讀時就不用去磁碟中去讀而直接從快取記憶體中讀取即可。利用lru(最少使用頁面置換演算法)原則,可以將不使用的檔案資料從快取記憶體中刪除以節約快取記憶體空間。

寫檔案可使用延遲寫機制,具體地說,如果乙個程序要求寫檔案,它首先把要寫的內容交給快取記憶體。而快取記憶體並不立即把它寫回磁碟,而是在cpu空閒時在完成寫操作。這樣,要寫磁碟的程序就可以不必等待寫操作完畢在繼續工作,從而節省了整個程序的執行時間。此外,如果另外乙個程序要訪問還沒有寫回磁碟的資料,在作業系統的管理下,就可以從快取記憶體中得到剛剛更新的資料,而不是磁碟上的舊資料,從而保障了檔案內容的一致性。

建立乙個函式,使用該函式將原始檔source.txt中的內容讀出,在寫到目標檔案sequential.txt去。

//#include

"stdafx.h"

#include

#ifdef _debug

#define new debug_new

#undef this_file

static

char this_file=

__file__

;#endif

dword buffersize=

1024

;char buf[

1024];

/using

namespace std;

void

(char

*source,

char

*destination)

;int

_tmain

(int argc, tchar* ar**[

], tchar* envp)

void

(char

*source,

char

*destination)

cycle=true;

while

(cycle)

if(numberofbyteread

cycle=false;

//寫檔案if(

!writefile

(handle_dst,buffer,numberofbyteread,

&numberofbytewrite,

null))

}//關閉檔案控制代碼

closehandle

(handle_src)

;closehandle

(handle_dst);}

由於要採用快取記憶體進行檔案操作,在使用函式createfile()建立檔案時,其引數dwflagsandattiibutes應選用file_flag_sequential_scan

執行結果:

總結過程:

作業系統實驗 採用快取記憶體實現檔案讀 寫

1 了解windows系統檔案快取記憶體的概念。2 熟悉windows系統檔案讀寫相關api。3 掌握採用緩衝方式實現檔案讀寫相關引數的設定。快取記憶體 原理 訪問快取必將訪問磁碟,而磁碟的訪問速度遠遠低於記憶體的訪問速度,快取記憶體就是利用記憶體中的儲存空間,來加快磁碟傳輸資料,因此快取記憶體不是...

作業系統中的主儲存器 快取記憶體

儲存管理是作業系統的重要組成部分,它負責管理計算機系統中的主儲存器。任何程式 及資料在執行前必須進入主存空間,因此儲存管理的優劣直接影響系統的效能,主儲存空間一般分為兩部分 一部分是系統區,存放作業系統的核心程式以及標準子程式等 另一部分是使用者區,存放使用者的程式和資料等,供當前正在執行的程式使用...

作業系統複習(八) 執行緒的實現

1.核心支援執行緒kst 核心級執行緒 kernel level threads,klt 也有叫做核心支援的執行緒 執行緒管理的所有工作 建立和撤銷 由作業系統核心完成 作業系統核心提供乙個應用程式設計介面api,供開發者使用klt 純核心級執行緒特點 程序中的乙個執行緒被阻塞,核心能排程同一程序的...