內存管理:分頁,分段,段頁結合

進程如何使用內存


進程是操作系統資源分配的最小單元。操作系統分配給進程的內存空間中包含五種段:數據段、代碼段、BSS、堆、棧。

數據段:存放程序中的靜態變量和已初始化且不爲零的全局變量。

代碼段:存放可執行文件的操作指令,代碼段是隻讀的,不可進行寫操作。這部分的區域在運行前已知其大小。

BSS段( Block Started By Symbol):存放未初始化的全局變量,在變量使用前由運行時初始化爲零。

:存放進程運行中被動態分配的內存,其大小不固定。

:存放程序中的臨時的局部變量和函數的參數值。


內存區域中以上五個段的組織形式:



邏輯地址、相對地址與物理地址


邏輯地址與當前數據在內存中的物理分配地址無關的訪問地址,在執行對內存的訪問之前必須轉化爲物理地址。

相對地址特殊的邏輯地址,相對於某些已知點的存儲單元。
物理地址:數據在主存中的實際位置

內存管理技術


幾種內存管理技術整理


技術

簡要說明

優點

缺點

固定分區

主存被分爲很多大小固定的分區,進程可以裝載到大於等於自身大小的分區。

實現簡單

1.有內部碎片

2.活動進程的數目是固定的

動態分區

分區是被動態創建的,進程可以裝載到正好等於自身大小的分區。

沒有內部碎片,內存使用更完全

有外部碎片,需要壓縮外部碎片

簡單分頁

主存被分爲很多大小相同的幀,進程被分爲很多與幀大小相同的頁。要裝入一個進程,需要將進程所有的頁裝入主存,可以是不連續的幀中。

沒有外部碎片

有很少的內部碎片(僅出現在進程的最後一頁)

簡單分段

進程被分爲很多的段,要裝入一個進程,需要將進程所有的段裝入主存中不一定連續的動態分區。

沒有內部碎片,比較與動態分區,內存利用率更高,開銷小

有外部碎片,需要壓縮外部碎片

虛擬內存分頁

與簡單分頁相比,不需要將進程的所有頁裝入主存

  1. 沒有外部碎片
  2. 巨大的虛擬內存空間
  3. 更高程度的多到程序設計

複雜的內存管理開銷

虛擬內存分段

與簡單分段相比,不需要將進程所有的段都裝入主存

具有虛擬內存分頁的三個優點,並且支持保護和共享

複雜的內存管理開銷


分頁


邏輯地址到物理地址的映射過程

1. 提取頁號,即邏輯地址最左的n位

2. 以這個頁號爲索引,查找該進程頁表中相應的幀號k

3. 該幀的起始物理地址爲k*2^m,被訪問字節的物理地址是這個數加上偏移量




舉個例子

騰訊今年的實習生筆試的某個選擇題


根據上面的三個步驟可以很容易得到結果:物理地址 = 3 * 8 * 1024 + 9612 % 8192 = 25996



分段


邏輯地址到物理地址的映射過程

1. 提取段號,即邏輯地址最左的n位s

2. 以這個段號爲索引,查找該進程段表中該段的起始物理地址

3. 最右m位表示偏移量,偏移量和段長度比較,如果偏移量大於該長度,則該地址失效

4. 物理地址爲該段的起始物理地址加上偏移量的和





分頁、分段的特點


1. 進程的所有存儲器訪問的都是邏輯地址,在運行時動態地轉換爲物理地址。

2. 一個進程可以劃分爲許多塊,在執行的過程中,這些塊不需要連續的存在主存中。


段頁式結合


對於每一個虛擬地址,處理器使用段號檢索進程段表來尋找該段的頁表;頁號用來檢索頁表並查找到幀號。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章