探索Linux 作業系統記憶體模型和管理-1(轉)

Rounders發表於2007-08-10
探索Linux 作業系統記憶體模型和管理-1[@more@]理解 Linux 設計的第一步 在這篇 Linux? 記憶體模型指南中,我們將學習如何構建和管理記憶體方面的基礎知識。本指南介紹了記憶體控制單元、分頁模型方面的內容,並詳細介紹了實體記憶體區域方面的知識。 理解 Linux 使用的記憶體模型是從更大程度上掌握 Linux 設計和實現的第一步,因此本文將概述 Linux 記憶體模型和管理。 Linux 使用的是單一整體式結構 (Monolithic),其中定義了一組原語或系統呼叫以實現作業系統的服務,例如在幾個模組中以超級模式執行的程式管理、併發控制和記憶體管理服務。儘管出於相容性考慮,Linux 依然將段控制單元模型 (segment control unit model) 保持一種符號表示,但實際上已經很少使用這種模型了。 與記憶體管理有關的主要問題有: ●虛擬記憶體的管理,這是介於應用程式請求與實體記憶體之間的一個邏輯層。 ●實體記憶體的管理。 ●核心虛擬記憶體的管理/核心記憶體分配器,這是一個用來滿足對記憶體的請求的元件。這種對記憶體的請求可能來自於核心,也可能來自於使用者。 ●虛擬地址空間的管理。 ●交換和快取。 本文探討了以下問題,可以幫助您從作業系統中記憶體管理的角度來理解 Linux 的內幕: ●段控制單元模型,通常專用於 Linux ●2分頁模型,通常專用於 Linux ●實體記憶體方面的知識 雖然本文並沒有詳細介紹 Linux 核心管理記憶體的方法,但是介紹了有關整個記憶體模型的知識以及系統的定址方式,這些介紹可為您進一步的學習提供一個框架。本文重點介紹的是 x86 架構,但本文中的知識對於其他硬體實現同樣適用。 x86 記憶體架構 在 x86 架構中,記憶體被劃分成 3 種型別的地址: ●邏輯地址 (logical address) 是儲存位置的地址,它可能直接對應於一個物理位置,也可能不直接對應於一個物理位置。邏輯地址通常在請求控制器中的資訊時使用。 ●線性地址 (linear address) (或稱為 平面地址空間)是從 0 開始進行定址的記憶體。之後的每個位元組都可順序使用下一數字來引用(0、1、2、3 等),直到記憶體末尾為止。這就是大部分非 Intel CPU 的定址方式。Intel? 架構使用了分段的地址空間,其中記憶體被劃分成 64KB 的段,有一個段暫存器總是指向當前正在定址的段的基址。這種架構中的 32 位模式被視為平面地址空間,不過它也使用了段。 ●實體地址 (physical address) 是使用實體地址匯流排中的位表示的地址。實體地址可能與邏輯地址不同,記憶體管理單元可以將邏輯地址轉換成實體地址。 CPU 使用兩種單元將邏輯地址轉換成實體地址。第一種稱為分段單元 (segmented unit),另外一種稱為分頁單元 (paging unit)。 圖 1. 轉換地址空間使用的兩種單元 下面讓我們來介紹一下段控制單元模型。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9417382/viewspace-940057/,如需轉載,請註明出處,否則將追究法律責任。

相關文章