Windows作業系統實習之快速檔案系統

2021-04-14 15:27:53 字數 2498 閱讀 4991

眾所周知,cpu是整個計算機系統中運算速度最快的部分,而外部裝置是最慢的部分,它們之間存在著很大的差別。然而,cpu卻時時刻刻可能要求訪問外設。如果cpu的每次操作都必須等待外設完成,那麼cpu寶貴的執行時間就會大大浪費。隨著現代計算機技術的發展,大多數現代作業系統都對這個問題進行了處理。下面就介紹windows 2000中解決這個不匹配問題的方法:快取記憶體和非同步傳輸。

1.檔案快取記憶體

檔案快取記憶體是cpu訪問外設的乙個「中間裝置」。說是裝置,其實它不是真正的物理裝置,而是一種核心級記憶體映像機制。由於它被設定在記憶體中,因此速度非常快,可以部分解決cpu與硬碟速度差異的問題。檔案系統的驅動程式通過呼叫「快取記憶體管理程式」 來使用檔案快取記憶體,然後快取記憶體管理程式執行快取記憶體的處理工作。

檔案快取記憶體的原理是:假設乙個程序讀了檔案的第乙個位元組,它常常會按照順序讀第二個第三個位元組,一直到讀出所有的位元組。利用這個原理可以進行「預取」,也就是說,在程序沒請求讀磁碟之前就先把檔案讀出來並放到快取記憶體中。這樣,當程序請求訪問磁碟時,快取記憶體可以快速地把已經取到記憶體中的檔案內容直接送給程序使用,從而大大加速了訪問磁碟的速度。另外,由於乙個檔案可能會被多次讀入,因此可以在第一次讀入後,將檔案資料儲存在快取記憶體中。這樣,下次再讀時,就不必從硬碟而可以從快取中讀取。利用lru(least recently used)的原則,可以將不常使用的檔案從快取中刪除以節省快取記憶體空間。

2.非同步傳輸

與檔案快取記憶體不同,檔案的非同步傳輸是一種改變指令執行順序的機制。在以往的作業系統中,指令都是順序執行的,下一條指令必須在上一條指令執行完畢後才能執行。因此,如果cpu遇到一條放盤指令,那麼它就必須等待緩慢的磁碟訪問結束以後才能進行後續工作。如果它後面遇到的指令並不依賴於訪盤操作時,這個等待就很沒有必要。windows2000中使用了一種非同步檔案傳輸機制來解決這個問題。它通過設定開啟檔案時的乙個標誌位來使程序不等待讀些檔案操作而繼續執行。當後續指令必須用到磁碟訪問的結果資料時,它在通過一條wait指令進行等待。這樣,在訪盤指令和等待指令之間的指令就可以與磁碟訪問同時進行了,從而大大加快了系統的整體速度。

實習要求:

設計乙個函式int filter(char source, char *sink, int f),其中:

source:原始檔,即從哪個檔案讀。

sink:目標檔案,即寫到哪個檔案。

f:乙個對檔案的操作(可以指定任何操作)

分別用3種方法實現乙個對檔案的操作:

1)無緩衝方式:表示用的標誌位是file_flag_no_buffering。

2)緩衝方式:表示用的標誌位是file_flag_sequential_scan。

源**如下:

#include

#include

// three partterns

void filter_nobuffer(char *source, char *sink, void (*func)(char *addr));

void filter_sequen(char *source, char *sink, void (*func)(char *addr));

void filter_overlp(char *source, char *sink, void (*func)(char *addr));

// five function operations

void f1(char *addr);

void f2(char *addr);

void f3(char *addr);

void f4(char *addr);

void f5(char *addr);

#define buffer_size 1024

char *buffer;

void main()

void f2(char *addr)

void f3(char *addr)

void f4(char *addr)

void f5(char *addr)

// 沒有檔案快取記憶體的filter函式

void filter_nobuffer(char *source, char *sink, void (*func) (char *addr))

void filter_sequen(char *source, char *sink, void (*func) (char *addr))

handle_dst = createfile(sink, generic_write, null, null,

create_always, null, null);

if(handle_src == invalid_handle_value || handle_dst == invalid_handle_value)

當然,這些資料還需要更多的測試才準確,但是整體看來還是使用快取記憶體時速度最快啊。不過我們還是應該根據情況採用不同的檔案操作模式。

windows作業系統

1.檢視埠 netstat ano netstat ano find 2檢視程序 tasklist 3.刪除程序 tskill 4.開啟程序管理器 taskmgr 5.ping 6.ipconfig all 7.f 8 cd cd.9.mkdir rmdir linux rm rf 10.dir 列...

歷代Windows作業系統

1985 年windows 1.0 正式推出,相信一些老一輩計算機使用者應該熟悉吧?1987年10 月推出windows 2.0 比windows 1.0 版有了不少進步,但自身不完善,效果不好。1990年5 月windows 3.0 版推出,期間微軟繼 2.0後還有代號為 286 386兩款系統,...

作業系統之作業系統引論

掌握作業系統的概念 特徵 功能和提供的服務,作業系統的發展與分類 作業系統是計算機硬體與使用者的橋梁,是計算機硬體上的的第一層軟體,是對硬體系統的首次擴充.作業系統是一組控制和管理計算機硬體和軟體資源.合理地對各類作業 job 進行排程,以及方便使用者的程式的集合.無作業系統 單批道作業系統 多批道...