對檔案系統原理學習的理解
按需分配。開啟的檔案屬性才放入記憶體中。
關鍵點是記錄某個檔案用到哪幾塊磁碟地址。一個檔案可能佔多個磁碟塊,可能是一個。關鍵在於檔案的的大小
檔名,磁碟塊地址,多個。
連續分配:一個檔案佔據了3個磁碟塊。是連續在一起的。
讀的效能很好,讀一個檔案的內容只要一次操作,找到第一個磁碟塊,後面的磁碟塊就知道了。不用繼續旋轉。
缺點是,磁碟碎片多。要想避免碎片,要多進行碎片整理(不顯示,太耗費效能)。所以這種方式不適合變化大小的檔案。適合固定大小。比如CD檔案。
連結串列分配:解決磁碟碎片。檔案佔用三個磁碟塊,這三個磁碟塊可以在任意位置,很方便擴充檔案的容量。比如檔案增加內容,要加一個磁碟塊,隨便去哪裡拖一個磁碟塊掛上去。有一個指標指向磁碟塊地址。
缺點是,隨機讀寫耗費效能。比如要讀一個檔案的第6個磁碟塊的內容,必須從找到檔案的第一個磁碟塊然後順著順序第二,第三.....第五全部讀到,才能知道第六個磁碟塊在哪裡。
為了提高速度。把檔案的連結串列放到記憶體中。
在記憶體中儲存連結串列。
多少個檔案。就要多少個連結串列項嗎?
為了解決佔用記憶體過多問題(磁碟容量比記憶體大多了。
關鍵點是記錄某個檔案用到哪幾塊磁碟地址。一個檔案可能佔多個磁碟塊,可能是一個。關鍵在於檔案的的大小
檔名,磁碟塊地址,多個。
連續分配:一個檔案佔據了3個磁碟塊。是連續在一起的。
讀的效能很好,讀一個檔案的內容只要一次操作,找到第一個磁碟塊,後面的磁碟塊就知道了。不用繼續旋轉。
缺點是,磁碟碎片多。要想避免碎片,要多進行碎片整理(不顯示,太耗費效能)。所以這種方式不適合變化大小的檔案。適合固定大小。比如CD檔案。
連結串列分配:解決磁碟碎片。檔案佔用三個磁碟塊,這三個磁碟塊可以在任意位置,很方便擴充檔案的容量。比如檔案增加內容,要加一個磁碟塊,隨便去哪裡拖一個磁碟塊掛上去。有一個指標指向磁碟塊地址。
缺點是,隨機讀寫耗費效能。比如要讀一個檔案的第6個磁碟塊的內容,必須從找到檔案的第一個磁碟塊然後順著順序第二,第三.....第五全部讀到,才能知道第六個磁碟塊在哪裡。
為了提高速度。把檔案的連結串列放到記憶體中。
在記憶體中儲存連結串列。
多少個檔案。就要多少個連結串列項嗎?
為了解決佔用記憶體過多問題(磁碟容量比記憶體大多了。
疑問,這個連結串列項是如何設計的呢。
連結串列這種資料結構要看看。。
檔名,目錄是特殊的檔案。
目錄下有子目錄如何實現的。檔案最終在目錄下
檔案系統幾種實現方式
檔案系統要解決的本質問題是,一個檔案在磁碟上如何組其內容。
然後記錄這個檔案分佈在哪幾個磁碟塊上,這樣當讀取檔案內容的時候知道去磁碟哪裡找。
1、連續分配法
一個檔案的內容儲存在連續的磁碟塊上。
這樣實現很簡單:記錄檔案第一塊磁碟塊位置,然後記錄一個往後推的數字號。做簡單的加法即可找到內容。
缺點:造成磁碟碎片。發生在刪除檔案的時候,這個檔案佔據的磁碟塊就是空閒狀態。
剛開始不會有這問題,因為磁碟有足夠的空間可用。不用管這些空閒塊。但是後面磁碟空間不夠用的時候呢,還是要來使用它們。
如何讓新加的檔案使用這些空閒塊呢?
你存入資料之前必先先知道這個檔案大小,檔案大小要是固定的。比如5k。不是固定的話,檔案內容增長,超過5k後呢?
這樣計算大小的方式實際好不好?
假設你開啟一個wps進行編輯,必須要先問使用者,你的檔案打算多大空間。這樣才能去選擇合適的磁碟塊儲存這個檔案。
使用者怎麼知道?
2、連結串列分配法
磁碟塊形成一個連結串列。串起來。相信我們生活中用的鏈子,是不是一個節點一個一起串起來的。
磁碟塊看成是節點。
每個磁碟塊第一個位元組,存一個指標,這個指標就是指向下一個磁碟塊。
想象一下房間號。
找出一批量房間給這些運動員的居住的。
現在明白了,記憶體中的檔案分配表。
實際上就是為每個檔案做一個條目。這個條目裡面記著磁碟塊的指標,指標是從開始到結束,按照順序來的。
為什麼window要進行分割槽而linux系統不用分割槽?
現在明白其中原理了。
window 之所以要進行分割槽。就是因為,它需要區分不同的檔案系統。當你請求一個檔案時,給出路徑,作業系統就能知道向哪個檔案系統去請求,就是因為分割槽。一個分割槽只能有一個檔案系統。window通過碟符(c,d,e,f等字母)來確定檔案系統。
Linux不需要分割槽。因為它做了一個抽象層。來管理所有檔案系統。
作業系統針對這個抽象層來獲取資料。使用掛載的方式。a 和b兩個磁碟可以掛載到同一個目錄下去。讀取檔案的時候,關心的是所有檔案系統的抽象層操作,可以理解成介面。
分段和分頁技術
至今都沒搞明白,段和頁的區別。
頁是作業系統的看法,它將記憶體劃分成一塊一塊。
有什麼用呢?
搞清楚作業系統為什麼要這樣子做。
難道是為了解決記憶體不夠的問題嗎?
頁是作業系統的看法,它將記憶體劃分成一塊一塊。
有什麼用呢?
搞清楚作業系統為什麼要這樣子做。
難道是為了解決記憶體不夠的問題嗎?
分段技術早於分頁技術。
最先有分段,它的特點是,程式需要多少記憶體空間,就以多少空間為整體換入磁碟,在磁碟和記憶體之間移動。
這裡的段很形象解釋了,程式執行在哪個記憶體區間,這就是段。分段,以段為單位來分配記憶體?
這樣效率並不高。提出一個分頁思想,通俗就是等份大小的記憶體。明顯的問題我還沒看到。
作業系統為每個程式分配時間片
為什麼作業系統要設計成搶佔資源的方式呢?這一讓每個任務都能得到處理 如果一個任務將要耗費很長時間那麼,它就會佔著cpu,結果導致其他任務無法處理。
現實中有這樣的思想和案例。
上下文切換,是不是指的就是這種排程呢?
上下文切換:保持當前程式狀態(應該是放到磁碟上去?),然後把另外一個程式調入進去供cpu執行。
現實中有這樣的思想和案例。
上下文切換,是不是指的就是這種排程呢?
上下文切換:保持當前程式狀態(應該是放到磁碟上去?),然後把另外一個程式調入進去供cpu執行。