我們將會從兩個方面來說linux的儲存管理:
首先來簡單介紹一下buddy記憶體管理演算法:
buddy演算法是經典的記憶體管理演算法。
演算法基於計算機處理二進位制的優勢具有極高的效率。
演算法主要是為了解決記憶體外碎片的問題。
那麼,什麼是記憶體頁內碎片,什麼是記憶體頁外碎片呢?
頁內碎片:內部碎片是已經被分配出去(能明確指出屬於哪個程序)的記憶體空間大於請求所需的記憶體空間,不能被利用的記憶體空間就是內部碎片。總的來說,這也是讓記憶體分配與相鄰記憶體合併能快速進行。頁外碎片:
外部碎片是指還沒有分配出去(不屬於任何程序),但是由於大小而無法分配給申請記憶體空間的新程序的記憶體空閒塊。
在進行記憶體分配的時候,buddy記憶體分配原則是:向上取整為2的冪大小。
比如,70k->128k,129k->256k,666k->1024k
並且,buddy記憶體管理核心演算法為乙個「夥伴系統」。
夥伴,指的是記憶體的夥伴。
一片連續記憶體的夥伴,是相鄰的另一片大小一樣的連續記憶體。
其具體流程如下:
建立一系列空閒塊鍊錶,每一種都是2的冪
假設儲存空間有1m大小,我們目前有的空閒儲存塊為1k 2k 4k 8k…1m
我們需要先對程序塊向上取整為128k。然後考慮記憶體塊的分配。
先查詢是否有空閒的128k記憶體塊,有就分配,沒有就查詢256k,直到找到合適的。
最後,假如我們找到的是1m,那麼,1m-128k=872k,有872k是沒有占用了,那麼我們就可以切割出2的整數冪大小的記憶體塊分配出去/進行**。
交換空間(swap)是磁碟的乙個分割槽,linux物理記憶體存滿的時候,就會把一部分記憶體交換至swap空間,swap空間是初始化系統的時候配置的。但也有一定問題,swap是在硬碟上的儲存空間,我們的linux是執行在記憶體上的,如果一旦頻繁切換swap,linux執行速度就會極大的降低。
linux交換空間有三個依賴,分別如下:
冷啟動記憶體依賴
系統睡眠依賴
大程序空間依賴
說到這裡,我們也一定會想起類似功能的概念:虛擬記憶體。
swap空間
虛擬記憶體
swap空間存在於磁碟
虛擬記憶體存在於磁碟
swap空間與主存發生置換
虛擬記憶體與主存發生置換
swap空間是作業系統概念
虛擬記憶體是程序概念
swap空間解決系統物理記憶體不足的概念
虛擬記憶體解決程序物理記憶體不足的問題
作業系統專欄 死鎖
首先我們要明白,什麼是死鎖?死鎖是指兩個及以上程序在執行過程中,由於競爭資源或者由於彼此通訊而造成阻塞,無法繼續推進程式的一種情況,此時稱系統處於死鎖狀態或者系統產生了死鎖。先來說說,為什麼會產生死鎖?一共有兩個原因 也就是說,共享資源數量不滿足各個程序需求從而發生死鎖。而當死鎖產生的時候,必然會滿...
作業系統儲存管理
分段單元 分頁單元 邏輯位址 段基址 32位偏移量 線性位址 虛擬位址,0 4gb 實體地址 6個段暫存器 cs code段 ss stack段 ds data段 es fs gs 通用段暫存器 16位的段選擇符就存放在以上段暫存器中 線性位址 4gb 被分成以固定長度為單位的組,即頁。頁內部連續的...
作業系統 儲存管理
儲存管理 1 所謂虛擬儲存技術,即在記憶體中保留一部分程式或資料,在外存 硬碟 中放置整個位址空間的副本。程式執行過程中可以隨機訪問記憶體中的資料或程式,但需要的程式或資料不在記憶體中時,就將記憶體中的部分內容根據情況寫回外存,然後從外存調入所需程式或資料,實現作業內部的區域性對換,從而允許程式的位...