磁碟引數:
磁碟大小計算:磁頭數 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暫存器,並且寫入記憶體中斷控制方式...
作業系統 檔案管理
使用者作業中要用到各種各樣的資訊,如源程式 目標程式 資料 各種語言的編譯程式等。有的資訊需要長期儲存,而有的只是臨時使用。計算機系統經常把資訊儲存在磁碟等儲存介質上,也要利用輸入級 印表機等裝置進行資訊的輸入或輸出。啟動外圍裝置訪問資訊時一項相當複雜 繁瑣的工作。為減輕使用者的負擔和保證系統的安全...
作業系統 檔案管理
檔案系統是用來管理計算機內部儲存的程式和資料。陣列組成可分為 資料項 記錄和檔案。資料項可以組成記錄,記錄可以組成檔案。屬性 檔案具有以下屬性 檔案型別 檔案長度 檔案物理位置 檔案的建立時間。型別 檔案型別可分為普通檔案 目錄檔案 特殊檔案。為了方便統一管理,系統將所有的輸入輸出裝置都視為檔案。檔...