記憶體分段和分頁的區別

2021-06-18 00:06:12 字數 1524 閱讀 4964

分段和分頁其實都是一種對位址的劃分或者對映的方式。

兩者的區別主要有以下幾點:

a)頁是資訊的物理單位,分頁是為實現離散分配方式,以消減記憶體的外零頭,提高記憶體的利用率;或者說,分頁僅僅是由於系統管理的需要,而不是使用者的需要(也是對使用者透明的)。段是資訊的邏輯單位,它含有一組其意義相對完整的資訊(比如資料段、**段和堆疊段等)。分段的目的是為了能更好的滿足使用者的需要(使用者也是可以使用的)。

b)頁的大小固定且由系統確定,把邏輯位址劃分為頁號和頁內位址兩部分,是由機器硬體實現的,因而乙個系統只能有一種大小的頁面。段的長度卻不固定,決定於使用者所編寫的程式,通常由編輯程式在對源程式進行編輯時,根據資訊的性質來劃分。

c)分頁的作業位址空間是一維的,即單一的線性空間,程式設計師只須利用乙個記憶符(線性位址的16進製表示),即可表示一位址。分段的作業位址空間是二維的,程式設計師在標識乙個位址時,既需給出段名(比如資料段、**段和堆疊段等),又需給出段內位址。

d)頁和段都有儲存保護機制。但訪問許可權不同:段有讀、寫和執行三種許可權;而頁只有讀和寫兩種許可權。

1.分段機制

80386的兩種工作模式

80386的工作模式包括實位址模式和虛位址模式(保護模式)。linux主要工作在保護模式下。

分段機制

在保護模式下,80386虛位址空間可達16k個段,每段大小可變,最大達4gb。

從邏輯位址到線性位址的轉換由80386分段機制管理。段暫存器cs、ds、es、ss、fs或gs標識乙個段。這些段暫存器作為段選擇器,用來選擇該段的描述符。

分段邏輯位址到線性位址轉換圖

圖9_7 分段邏輯位址到線性位址轉換圖

2. 分頁機制

分頁機制的作用

分頁機制是在段機制之後進行的,它進一步將線性位址轉換為實體地址。

80386使用4k位元組大小的頁,且每頁的起始位址都被4k整除。因此,80386把4gb位元組線性位址空間劃分為1m個頁面,採用了兩級表結構。

兩級頁表

兩級表的第一級表稱為頁目錄,儲存在乙個4k位元組的頁中,頁目錄表共有1k個表項,每個表項為4個位元組,線性位址最高的10位(22-31)用來產生第一級表索引,由該索引得到的表項中的內容定位了二級表中的乙個表的位址,即下級頁表所在的記憶體塊號。

第二級表稱為頁表,儲存在乙個4k位元組頁中,它包含了1k位元組的表項,每個表項包含了乙個頁的實體地址。二級頁表由線性位址的中間10位(12-21)位進行索引,定位頁表表項,獲得頁的實體地址。頁實體地址的高20位與線性位址的低12位形成最後的實體地址。

利用兩級頁表轉換位址

圖9_8 利用兩級頁表轉換位址

3. 核心空間和使用者空間

使用者空間

在linux中,每個使用者程序都可以訪問4gb的線性虛擬記憶體空間。其中從0到3gb的虛存位址是使用者空間,使用者程序可以直接訪問。

核心空間

從3gb到4gb的虛存位址為核心態空間,存放供核心訪問的**和資料,使用者態程序不能訪問。所有程序從3gb到4gb的虛擬空間都是一樣的,linux以此方式讓核心態程序共享**段和資料段。

分段和分頁區別

分頁儲存管理 使用者程式的位址空間被劃分成若干固定大小的區域,稱為 頁 相應地,記憶體空間分成若干個物理塊,頁和塊的大小相等。可將使用者程式的任一頁放在記憶體的任一塊中,實現了離散分配。為了能在記憶體中找到每個頁面對應的物理塊,系統為每個程序建立一張頁表,用於記錄程序邏輯頁面與記憶體物理頁面之間的對...

分段和分頁的區別

這兩天把湯子瀛的 現代作業系統 儲存器管理認真看了一遍。在分頁分段方面有點點個人的想法。首先申明,我雖然上過作業系統的課,不過沒聽過課,這可以說是首次接觸,如果有啥錯誤請大家指正 書上說 頁和分段系統有許多相似之處,但在概念上兩者完全不同,主要表現在 1 頁是資訊的物理單位,分頁是為實現離散分配方式...

記憶體的分段 分頁機制

摘錄自 程式設計師的自我修養 1.5節 早期的計算機中,記憶體有限,在執行多個程式時有如下問題 1.位址空間不隔離 程式直接訪問物理記憶體,程式間互相影響 2.記憶體使用效率低 需要將整個程式載入記憶體,程式切換時候,在記憶體和磁碟間交換效率低下 3.程式執行位址不確定 因為直接訪問物理記憶體,使用...