記憶體管理筆記六 非固定分割槽的記憶體管理

2021-08-16 10:03:32 字數 1439 閱讀 1978

引言:第五篇筆記,介紹了固定分割槽的記憶體管理方式。本篇筆記將介紹非固定分割槽的記憶體管理。

一、非固定分割槽的記憶體管理

1.1、產生由來—對固定分割槽的改進

在第五篇筆記中,我們介紹了固定分割槽的缺點,包括程式大小和分割槽大小匹配不令人滿意、無法解決程式長度大於分割槽問題、位址空間劃分以後無法增長。這些弊端是因為分割槽時固定的大小,這樣改進的方式即為採用非固定分割槽的方式來管理多道程式設計的記憶體空間。

1.2、核心思想–按需分配

非固定分割槽的思想很簡單:除了劃分給作業系統的空間外,其餘記憶體空間是作為乙個整體存在的。當乙個程式需要占用記憶體空間時,就在該片空間裡面分出乙個大小剛剛滿足程式的空間;再來乙個程式,則在剩下的空間裡面再分出這樣一塊來。

在這種模式下,乙個程式可以加在到任何地方,也可以和物理記憶體一樣大。同樣對每個程式設定乙個基址和極限暫存器,所有訪問都必須在兩個暫存器值框定的空間裡,否則就算非法訪問。

1.3、載入例項

圖1、非固定分割槽的多道程式設計的記憶體管理

如上圖1所示,一開始記憶體中只有作業系統,這時候a來了,從最底下分出一塊與程序a大小一樣的記憶體空間;然後程序b來了,我們在程序a上面的大片空間中分出一塊與程序b大小一樣的記憶體空間,依次可以有程序c、d、e、f等等。

1.4、存在弊端

非固定分割槽存在乙個很大的弊端,每個程式順序累積,如果程式b在執行過程中,不斷產生新的資料,從而導致資料所需空間的增長,不斷進行函式巢狀呼叫又會造成所需棧的增長。需要更多空間,怎麼辦?另外產生外部碎片的弊端會在寫分頁筆記時介紹。

1.5、解決弊端的兩種方式

1)、留有一片閒置區域供程式增長用-且棧和資料反向(利用了公共空間)

圖2、棧和資料反向增長

2)、swap交換機制:將程序從記憶體倒到磁碟上,待有足夠記憶體空間再將其從磁碟上載入到記憶體中的過程,這種交換的主要目的是為程式尋找一塊更大的空間,防止其因空間不夠而崩潰。但是其程序切換成本較高,一般不這樣做。

圖3、程序a因空間增長而交換到更大的空間中去

興趣問題:如果乙個程式超過物理記憶體,還能執行嗎?

能,當前想到的辦法就是「重疊(overlay)」,即將程式按照功能分成一段一段功能相對完整的單元。乙個單元執行完後,再執行下乙個單元,就不會再執行前面的單元。可將後面單元覆蓋到前面單元上,即可執行乙個比物理記憶體還大的程式。但是這相當於將記憶體管理的部分功能交給了使用者,從根本上說,不能算是作業系統的解決方案,後面會介紹分頁分段的解決機制。

六 記憶體管理

殭屍物件 已經被釋放的物件。再使用物件就會報錯。野指標 乙個指標指向被釋放的物件的記憶體。前提 相對於mrc下,一次 retain alloc 對應一次release,經常需要手動release進行記憶體管理,防止記憶體洩漏。從而引出自動釋放池 自動釋放池 自動釋放池是以棧為節點通過雙向鍊錶組合而成...

記憶體分割槽介紹 筆記

在程式沒有執行前,有幾個記憶體分割槽已經確定,雖然分割槽確定,但是沒有載入內容,程式只有執行時才載入記憶體 text 區 唯讀,函式。data 初始化的資料區,全域性變數,static變數,文字常量區 唯讀 bss 沒有初始化的資料,全域性變數,static變數。當執行程式,載入記憶體,首先根據前面...

固定記憶體分割槽(c語言實現)

記憶體是計算機的重要組成部分,它主要配合cpu的告訴運轉,提高計算機的執行速度。在計算機內部執行的都是一道道程式,而程式是儲存在外存 硬碟 中的,但外存的讀取速度非常緩慢,如果直接與cpu進行資料傳輸,會大大的降低cpu的效率。這時候能夠提供高速訪問的記憶體就很適合與cpu直接進行資料傳輸,但提供了...