段式虛擬存儲器中的段是按程序的邏輯結(jié)構(gòu)劃分的。本文將來介紹一下什么是段式存儲器管理,段式與頁式存儲器管理的區(qū)別又在哪,還有段頁式存儲器管理的工作原理。如果對頁式存儲管理方式不清楚的建議先弄懂頁式存儲管理方式(參考:深入理解操作系統(tǒng)之——分頁式存儲管理)
段式存儲器管理
段的劃分是具有邏輯意義的,例如:主程序段、數(shù)據(jù)段、堆棧段、子程序段等;
每個段都是從 0 開始的獨(dú)立邏輯地址空間;
而且各個段的長度因程序而不同。
虛擬地址
段式存儲器管理將虛擬地址分為兩部分:段號和段內(nèi)地址。與頁式中虛擬地址不同的是,段內(nèi)地址的位數(shù)不是固定的,段號與段內(nèi)地址的劃分不是簡單地將一個二進(jìn)制地址進(jìn)行高低位的切割得到的。
段表
段表則包括了段長和段基址
地址變換過程
①進(jìn)程訪問某個邏輯地址時,先取得段號
②若段號大于段表長度,越界錯誤
③查段表得到段開始地址和段長度
④若段內(nèi)地址大于段長度,越界錯誤
⑤通過段開始地址和段內(nèi)地址得到物理地址
⑥根據(jù)物理地址讀取數(shù)據(jù)
地址變換過程圖解:
計算例子
通過具體例子來算算就很好理解了。
例:某系統(tǒng)采用分段式存儲管理,在一個進(jìn)程中,它的段表如下所示,求邏輯地址為(2,89)對應(yīng)的物理地址(所有數(shù)據(jù)都是十進(jìn)制)
解答:
根據(jù)邏輯地址(2,89)可以知道,段號為 2,段內(nèi)地址為 89
根據(jù)段號 2 查段表可知,段號為 2 的段的段長為 380,段基址為 340
由段基址 340 和段內(nèi)地址 89 相加可得實際的物理地址為 429
分頁與分段的區(qū)別
頁是信息的物理單位,滿足系統(tǒng)空間管理需要。分頁實現(xiàn)離散分配方式,以消減內(nèi)存的外零頭, 提高內(nèi)存的利用率;
段是信息的邏輯單位,滿足用戶需要
頁的大小固定,由系統(tǒng)決定;
段的長度不固定, 由用戶決定
分頁的作業(yè)地址空間是一維的(虛擬地址由一個數(shù)表示);
分段的作業(yè)地址空間則是二維的(虛擬地址有兩個數(shù)(段號和段內(nèi)地址)表示)
段頁式
段頁式存儲器管理則是將段式與頁式結(jié)合,優(yōu)缺點互補(bǔ)。
段面向用戶程序需要,段長度不固定;段需要連續(xù)分配空間,存在連續(xù)分配的缺點,例如易產(chǎn)生碎片;
結(jié)合段式和頁式兩者管理優(yōu)點,既能節(jié)省內(nèi)存空間,提高內(nèi)存分配效率;又能兼顧用戶程序需要。
實現(xiàn)機(jī)制
先將用戶程序劃分為多個有邏輯意義的段,再將段劃分為多個頁
段頁式管理需要設(shè)置段表和頁表
每個段都對應(yīng)一張頁表,因此段表存放了每張頁表的開始地址和頁表長度
段頁式存儲器管理方式地址結(jié)構(gòu)
段頁式存儲器管理方式地址映射
段頁式的地址變換過程
①進(jìn)程訪問某個邏輯地址時,先取得段號
②段號大于段表長度,越界錯誤
③查段表,得到頁表開始地址
④在頁表內(nèi),根據(jù)段內(nèi)頁號查物理塊號
⑤頁內(nèi)地址直接對應(yīng)塊內(nèi)地址
⑥通過物理塊號和塊內(nèi)地址得到物理地址
⑦根據(jù)物理地址讀取數(shù)據(jù)
地址變換過程圖解:
編輯:hfy
-
存儲器
+關(guān)注
關(guān)注
38文章
7628瀏覽量
166297 -
存儲管理
+關(guān)注
關(guān)注
0文章
31瀏覽量
9370
發(fā)布評論請先 登錄
嵌入式技術(shù)解析:頁、扇區(qū)、塊的區(qū)別

什么是基于閃存平臺的存儲管理策略?
STM32的存儲器映像
外部存儲器的相關(guān)資料下載
STM32存儲器映像的相關(guān)資料
linux存儲器管理
NAS網(wǎng)絡(luò)存儲器的網(wǎng)絡(luò)管理
嵌入式存儲器如何來設(shè)計

嵌入式系統(tǒng)架構(gòu)淺談:硬件的選型(二) -------外部存儲器

評論