天天看點

作業系統學習筆記

對檔案系統原理學習的了解

按需配置設定。打開的檔案屬性才放入記憶體中。

關鍵點是記錄某個檔案用到哪幾塊磁盤位址。一個檔案可能占多個磁盤塊,可能是一個。關鍵在于檔案的的大小

檔案名,磁盤塊位址,多個。

連續配置設定:一個檔案占據了3個磁盤塊。是連續在一起的。

讀的性能很好,讀一個檔案的内容隻要一次操作,找到第一個磁盤塊,後面的磁盤塊就知道了。不用繼續旋轉。

缺點是,磁盤碎片多。要想避免碎片,要多進行碎片整理(不顯示,太耗費性能)。是以這種方式不适合變化大小的檔案。适合固定大小。比如CD檔案。

連結清單配置設定:解決磁盤碎片。檔案占用三個磁盤塊,這三個磁盤塊可以在任意位置,很友善擴充檔案的容量。比如檔案增加内容,要加一個磁盤塊,随便去哪裡拖一個磁盤塊挂上去。有一個指針指向磁盤塊位址。

缺點是,随機讀寫耗費性能。比如要讀一個檔案的第6個磁盤塊的内容,必須從找到檔案的第一個磁盤塊然後順着順序第二,第三.....第五全部讀到,才能知道第六個磁盤塊在哪裡。

為了提高速度。把檔案的連結清單放到記憶體中。

在記憶體中存儲連結清單。

多少個檔案。就要多少個連結清單項嗎?

為了解決占用記憶體過多問題(磁盤容量比記憶體大多了。

疑問,這個連結清單項是如何設計的呢。

連結清單這種資料結構要看看。。

檔案名,目錄是特殊的檔案。

目錄下有子目錄如何實作的。檔案最終在目錄下

檔案系統幾種實作方式

檔案系統要解決的本質問題是,一個檔案在磁盤上如何組其内容。

然後記錄這個檔案分布在哪幾個磁盤塊上,這樣當讀取檔案内容的時候知道去磁盤哪裡找。

1、連續配置設定法

一個檔案的内容存儲在連續的磁盤塊上。

這樣實作很簡單:記錄檔案第一塊磁盤塊位置,然後記錄一個往後推的數字号。做簡單的加法即可找到内容。

缺點:造成磁盤碎片。發生在删除檔案的時候,這個檔案占據的磁盤塊就是空閑狀态。

剛開始不會有這問題,因為磁盤有足夠的空間可用。不用管這些空閑塊。但是後面磁盤空間不夠用的時候呢,還是要來使用它們。

如何讓新加的檔案使用這些空閑塊呢?

你存入資料之前必先先知道這個檔案大小,檔案大小要是固定的。比如5k。不是固定的話,檔案内容增長,超過5k後呢?

這樣計算大小的方式實際好不好?

假設你打開一個wps進行編輯,必須要先問使用者,你的檔案打算多大空間。這樣才能去選擇合适的磁盤塊存儲這個檔案。

使用者怎麼知道?

2、連結清單配置設定法

磁盤塊形成一個連結清單。串起來。相信我們生活中用的鍊子,是不是一個節點一個一起串起來的。

磁盤塊看成是節點。

每個磁盤塊第一個位元組,存一個指針,這個指針就是指向下一個磁盤塊。

想象一下房間号。

找出一批量房間給這些運動員的居住的。

現在明白了,記憶體中的檔案配置設定表。

實際上就是為每個檔案做一個條目。這個條目裡面記着磁盤塊的指針,指針是從開始到結束,按照順序來的。

為什麼window要進行分區而linux系統不用分區?

現在明白其中原理了。

window 之是以要進行分區。就是因為,它需要區分不同的檔案系統。當你請求一個檔案時,給出路徑,作業系統就能知道向哪個檔案系統去請求,就是因為分區。一個分區隻能有一個檔案系統。window通過盤符(c,d,e,f等字母)來确定檔案系統。

Linux不需要分區。因為它做了一個抽象層。來管理所有檔案系統。

作業系統針對這個抽象層來擷取資料。使用挂載的方式。a 和b兩個磁盤可以挂載到同一個目錄下去。讀取檔案的時候,關心的是所有檔案系統的抽象層操作,可以了解成接口。

分段和分頁技術

至今都沒搞明白,段和頁的差別。

頁是作業系統的看法,它将記憶體劃分成一塊一塊。

有什麼用呢?

搞清楚作業系統為什麼要這樣子做。

難道是為了解決記憶體不夠的問題嗎?

分段技術早于分頁技術。

最先有分段,它的特點是,程式需要多少記憶體空間,就以多少空間為整體換入磁盤,在磁盤和記憶體之間移動。

這裡的段很形象解釋了,程式運作在哪個記憶體區間,這就是段。分段,以段為機關來配置設定記憶體?

這樣效率并不高。提出一個分頁思想,通俗就是等份大小的記憶體。明顯的問題我還沒看到。

作業系統為每個程序配置設定時間片

為什麼作業系統要設計成搶占資源的方式呢?這一讓每個任務都能得到處理 如果一個任務将要耗費很長時間那麼,它就會占着cpu,結果導緻其他任務無法處理。

現實中有這樣的思想和案例。

上下文切換,是不是指的就是這種排程呢?

上下文切換:保持目前程序狀态(應該是放到磁盤上去?),然後把另外一個程序調入進去供cpu執行。

繼續閱讀