作業系統檔案管理及IO機制

2021-10-09 20:47:57 字數 1289 閱讀 7429

磁碟引數:

磁碟大小計算:磁頭數 x 磁軌數 x 扇區數 x 扇區大小

檔案系統有多種格式:fat32、ntfs等等

作業系統中檔案讀寫以簇(windows)或塊(linux)為單位分配磁碟空間,通常乙個簇/塊由多個扇區組成。乙個扇區只屬於乙個簇/塊,乙個簇/塊只能由乙個檔案占用,乙個檔案可能占用多個簇/塊。

所以有時候我們看到乙個檔案,不管寫1000還是2000個位元組,占用的磁碟空間還是相同的。甚至還有下面這種,占用空間為0的:

實際並不是不占用磁碟空間,而是資料太少,和檔名寫在同乙個區域了,內容沒有單獨占用磁碟。

如果往這個檔案裡寫2k位元組的資料:

然後刪除,再看看是什麼情況:

還是占用4k,因為最小就是占用4k,且沒有把資料複製回檔案位址區域。

在程式中讀寫檔案的過程:

應用程式不管是讀和寫檔案,都不是直接訪問磁碟,而是訪問檔案快取(linux叫page cache,windows下叫file cache)。

有幾個問題:

何時會將檔案寫入檔案快取?

同乙個檔案會有多分快取嗎?

單個檔案快取有大小限制嗎?

系統記憶體不足時,檔案快取如何處理?

檔案快取占用的記憶體何時會被釋放?

寫入檔案快取後,何時回寫檔案?

linux:page cache、buffer cache、swap cache

windows:file cache、file buffer、virtual memory

檔案高速緩衝的作用:提高檔案讀寫速度,減少磁碟io。

通常作業系統提供兩類檔案操作介面:

以拷貝方式操作

以位址對映方式操作

兩者都離不開頁快取記憶體。

在我們需要將乙個檔案通過socket傳送給其他使用者時,我們需要在從系統檔案快取複製到使用者快取,然後從使用者快取複製到socket緩衝區,再由系統傳送出去。更好的方式是使用transmitfile(windows)\sendfile(linux),無需占用cpu。

參考:

作業系統的I O管理 I O控制方式

程式直接控制方式1 i o傳送讀請求之後,裝置啟動,並且狀態暫存器置為1即未就緒狀態 2 cpu輪詢,檢視暫存器狀態何時就緒 3 輸入裝置準備資料,傳給控制器並且報告自身的狀態 4 控制器拿到資料存到資料暫存器,狀態暫存器置為0 已就緒 5 cpu拿到資料讀入cpu暫存器,並且寫入記憶體中斷控制方式...

作業系統 檔案管理

使用者作業中要用到各種各樣的資訊,如源程式 目標程式 資料 各種語言的編譯程式等。有的資訊需要長期儲存,而有的只是臨時使用。計算機系統經常把資訊儲存在磁碟等儲存介質上,也要利用輸入級 印表機等裝置進行資訊的輸入或輸出。啟動外圍裝置訪問資訊時一項相當複雜 繁瑣的工作。為減輕使用者的負擔和保證系統的安全...

作業系統 檔案管理

檔案系統是用來管理計算機內部儲存的程式和資料。陣列組成可分為 資料項 記錄和檔案。資料項可以組成記錄,記錄可以組成檔案。屬性 檔案具有以下屬性 檔案型別 檔案長度 檔案物理位置 檔案的建立時間。型別 檔案型別可分為普通檔案 目錄檔案 特殊檔案。為了方便統一管理,系統將所有的輸入輸出裝置都視為檔案。檔...