儲存管理
儲存管理指的是對記憶體儲器的管理,負責對記憶體的分配和回收、記憶體的保護和擴充等,目的是盡量提高記憶體的使用效率。
文章脈絡:
分類
實存:真正的記憶體空間;虛存:外存中的虛擬記憶體
重定位
重定位是指,裝入程式時,將程式中的邏輯地址轉換為物理地址的過程。安裝方式,可以分為靜態重定位和動態重定位。為什麼要重定位?因為程式的邏輯地址一般從0開始,而記憶體中前面的空間留給系統或其他程式使用,導致了邏輯地址和物理地址不對應的問題,所以進行轉換。
靜態重定位:虛空間程式執行之前,裝配程式完成的地址轉換工作。如下,程式轉移時,把其中涉及到的邏輯地址全部轉換為物理地址,如下所示:
動態重定位:程式裝入記憶體,CPU訪問記憶體之前,進行的地址轉換。如下:
因為動態重定位實在CPU訪問之前才進行地址轉換,所以在記憶體中2500仍為2500,當CPU提取時,才會進行地址轉換。
實存分配
分為以下幾種方式
單一連續分配:把整個使用者可用記憶體區當做一個塊使用,很明顯,這樣只能執行單使用者單程式模式。
固定分區分配:把使用者可用記憶體區分成幾個不等的塊,一旦分配即固定不變。
可變分區分配:分成幾個大小不等的塊,但是可以隨著程式執行完畢對記憶體進行回收和合并。可變分區有四種演算法:
首次適應法:從主存地址值開始尋找,找到第一塊可用的自由區,並把剩餘的部分進行合并。這種方法的優點是可以快速分配,縮小尋找時間。
最佳適應法:選擇記憶體中等於或最接近需求大小的記憶體自由區。這種方法的優點是可以減少記憶體片段,但是由於最接近需求所用的記憶體地區,容易剩餘小得無法再用的片段。
最差適應法:選擇記憶體中最大的自由區使用。
迴圈首次適應演算法:是首次適應法的變型,它的特點是每次都是向下尋找,而不是從頭開始。
隨著進程的執行,剩餘的地區變得越來越小,怎麼解決?可以用合并自由地區和儲存拼接技術。合并自由區指的是,將相鄰自由儲存區合并為單一自由區的方法;儲存拼接技術也叫片段收集,包括移動儲存空間等,把所有佔用的地區放到主存的一端,依此來解決片段浪費問題。
每種演算法都有各自的優缺點,根據實際情況選擇使用。
虛存管理
為什麼會有虛存?因為虛存可以擴大記憶體的使用範圍,讓原本記憶體不可啟動並執行大程式,經過虛存管理變成可行。虛存管理方式分為以下三種方式:
頁式儲存群組織
這種方式是將使用者程式分為若干個大小相等的頁,將記憶體分為若干個段,讓後把這些也和段分別對應起來,盛放對應關係的容器,稱之為頁表,如下所示:
段式儲存群組織
從使用者的角度出發,何為從使用者的角度出發?即按照意義將程式分段,比如按主程式、子程式、邏輯分段,段的大小不等,且段的大小大於頁的大小。
段頁式儲存
結合了頁式儲存群組織和段式儲存群組織的優勢,根據程式模組分段,段內再分頁,記憶體被分為定長的頁,段也是儲存雖然提高了記憶體空間的利用率,但是增加了段表和頁表的開銷:
頁面置換演算法
如果頁面被頻繁地裝入和調出,成為“抖動”,應盡量減少抖動,常用的演算法有以下幾種:
- 最優演算法:選擇不再使用或很久以後才使用的頁。的確最優,但是難以實現。
- 隨機演算法:隨機播放被淘汰的頁,開銷小,但是可能剛選中就要訪問。
- 先進先出演算法:選擇在記憶體駐留時間最長的頁,但也可能淘汰掉頻繁使用的頁。
- 最近最少使用演算法:選擇離目前時間使用最少的頁。
還有其它演算法,不管演算法是什麼,都圍繞這一個主題:合理減少頁面的淘汰和調入。
儲存管理的對象是記憶體,圍繞著記憶體管理、分配、最佳化等中心,讓盡量少的資源完成盡量多的任務,儲存管理先說到這裡。