操作系統-內存映射文件

(臨時筆記 後面再修改)

將文件映射到一個正在運行的進程的地址空間。

例如,假設一個文件f,長度爲64,映射到從512k地址開始的虛地址出,這樣任何機器指令在512地址處讀取字節內容會得到文件的第0個字節,類似的,像512K+21000地址處寫入則修改了文件的第210000字節,當進程種植時,被修改的文件留在磁盤上。

實際發生的是,系統內部表被改變以使該文件成爲從512K到576K內存之間的後備儲存。這樣,從512K開始的讀操作會引起一個頁面失效,導致裝入含有改地址的頁面,之後,對存儲器的寫就可以開始。如果該頁面被被免職換算法所逐出,他會被寫回到該文件的合適位置處,進程結束時,所有被映射、被修改的頁面要寫回他們的文件中。

 

段頁式管理中,程序根據邏輯被拆分成大小不一的段,每個段又被分成大小相同的頁,所以CPU讀到的程序中的虛擬地址先要讀段表,再讀頁表,對應到物理頁號,物理頁號不一定全部在內存中,若不存在,則需要產生缺頁錯誤,將磁盤中的一個頁面調入內存。

 

所以文件映射的關鍵是,將待讀/寫的文件物理地址與程序讀/寫的數據虛擬地址進行映射,則也不需要進行操作系統向緩衝區寫入數據以及將緩衝區的數據寫回磁盤中。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章