基本分頁存儲管理

假設(shè)是按字節(jié)編址

連續(xù)分配方式的缺點

考慮支持多道程序的兩種連續(xù)分配方式

  1. 固定分區(qū)分配:缺乏靈活性甥桂,會產(chǎn)生大量的內(nèi)部碎片黄选,內(nèi)存的利用率很低
  2. 動態(tài)分區(qū)分配:會產(chǎn)生很多外部碎片,雖然可以用“緊湊技術(shù)”處理貌夕,但是處理時間代價很高

原因:連續(xù)分配要求進(jìn)程占有的必須是一塊連續(xù)的內(nèi)存區(qū)域
能否講一個進(jìn)程分散地裝入到許多不相鄰的分區(qū)民镜,便可充分利用內(nèi)存

基本分頁存儲管理的思想:把內(nèi)存分為一個個相等的小分區(qū),再按照分區(qū)大小把進(jìn)程拆分成一個個小部分

分頁存儲管理的基本概念

頁框/頁幀:內(nèi)存空間分成的一個個大小相等的分區(qū)(比如4KB)
頁框號:頁框的編號们童,從0開始慧库,從低地址開始

頁/頁面:用戶進(jìn)程的地址空間分為和頁框大小相等的一個個區(qū)域
頁號:頁/頁面的編號亥鬓,從0開始

進(jìn)程的最后一個頁面可能沒有一個頁框那么大,頁框不能太大,否則可能產(chǎn)生過大的內(nèi)部碎片

操作系統(tǒng)以頁框為單位為各個進(jìn)程分配內(nèi)存空間熟呛。進(jìn)程的每個頁面分別放入一個頁框中尉姨,也就是說,進(jìn)程的頁面與內(nèi)存的頁框有一一對應(yīng)的關(guān)系
每個頁面不必連續(xù)存放九府,也不必按照先后順序覆致,可以放到不相鄰的各個頁框中

如何實現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換

進(jìn)程在內(nèi)存中連續(xù)存放時煌妈,通過動態(tài)重定位實現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換。在裝入模塊之后汰蜘,內(nèi)存中指令使用的依然是邏輯地址之宿,直到指令執(zhí)行的時候才會進(jìn)行地址轉(zhuǎn)換。系統(tǒng)會設(shè)置一個重定位寄存器色难,用來存放裝入模塊存放的起始位置,重定位寄存器中的值加上邏輯地址就是該邏輯地址實際對應(yīng)的物理地址

如果采用分頁技術(shù)

  1. 算出邏輯地址對應(yīng)的頁號柠掂。頁號 = 邏輯地址/頁面長度
  2. 該頁號對應(yīng)頁面在內(nèi)存中的起始地址依沮。操作系統(tǒng)會使用數(shù)據(jù)結(jié)構(gòu)記錄進(jìn)程某個頁面的起始地址
  3. 邏輯地址在頁面中的偏移量危喉。頁內(nèi)偏移量 = 邏輯地址%頁面長度
  4. 物理地址 = 頁面地址 + 頁內(nèi)偏移量

頁框大小為4KB,地址空間為4GB的系統(tǒng)
頁號為前20位皇拣,頁內(nèi)偏移量為后12位

頁表:為了能知道進(jìn)程的每個頁面在內(nèi)存中存放的位置薄嫡,操作系統(tǒng)要為每個進(jìn)程建立一張頁表

一個進(jìn)程對應(yīng)一張頁表
進(jìn)程的每一頁對應(yīng)一個頁表項
每個頁表項由頁號和頁框號組成
頁表記錄進(jìn)程頁面和實際存放的頁框之間的對應(yīng)關(guān)系

每個頁表項的長度是相同的毫深,頁號是隱含的
各頁表項會按順序連續(xù)存放在內(nèi)存中,如果該頁表在內(nèi)存中的起始地址是X钉寝,4GB/4KB系統(tǒng)的頁框有

2^{20}
個嵌纲,需要至少三個字節(jié)才夠腥沽,所以M號頁對應(yīng)的頁表項在X+3M的位置
如果進(jìn)程有n個頁面,進(jìn)程的頁表總共占3n個字節(jié)
因此只需要知道頁表存放起始地址和頁表項長度言沐,就可以找到各個頁號對應(yīng)的頁表項存放的位置

基本地址變換機構(gòu)

用于實現(xiàn)邏輯地址到物理地址轉(zhuǎn)換的一組硬件機構(gòu)

通常會在系統(tǒng)中設(shè)置一個頁表寄存器(PTR)险胰,存放頁表在內(nèi)存中的起始地址F和頁表長度M(M個頁表項)
進(jìn)程未執(zhí)行時矿筝,頁表的起始地址和頁表長度放在進(jìn)程控制塊(PCB)中,當(dāng)進(jìn)程被調(diào)度時榆综,操作系統(tǒng)內(nèi)核會把他們放到頁表寄存器中

  1. 根據(jù)邏輯地址A計算出頁號P和頁內(nèi)偏移量W(如果是十進(jìn)制給出,取商怯伊、取模)
  2. 根據(jù)頁表寄存器中的頁表長度檢查頁號是否合法耿芹,不合法(P≥M)拋出越界中斷
  3. 查詢頁表挪哄,找到頁號對應(yīng)的頁表項,確定頁面存放的頁框號(頁表起始地址+頁號*頁表項長度)
  4. 用頁框號和頁內(nèi)偏移量得到物理地址
  5. 訪問物理地址

例子:
若頁面大小L為1KB砸彬,頁號2對應(yīng)的內(nèi)存塊號b = 8斯入,將邏輯地址A = 2500轉(zhuǎn)換為物理地址E
等價描述:某系統(tǒng)按字節(jié)尋址,邏輯地址結(jié)構(gòu)中绽淘,頁內(nèi)偏移量占10位闹伪,頁號2對應(yīng)的內(nèi)存塊號b = 8偏瓤,將邏輯地址A = 2500轉(zhuǎn)換為物理地址E

頁號和頁內(nèi)偏移量:p = A/L = 2500/1024 = 2椰憋;w = A%L = 2500%1024 = 452
沒有越界,頁號2的頁框號為b = 8
物理地址E = b * L + w = 8 * 1024 + 452 = 8644

基本分頁存儲管理中地址是一維的橙依,即只要給出一個邏輯地址,系統(tǒng)就可以自動計算出頁號女责、偏移量创译,不需要顯式告訴系統(tǒng)偏移量是多少

理論上,頁表項長度為3即可表示內(nèi)存塊號的范圍刷喜,但是為了方便頁表查詢,會讓頁面恰好能裝得下整數(shù)個頁表項初茶,令每個頁表項占4字節(jié)
4KB頁面浊闪,可以放4096/3 =1365個頁表項,有4096%3 =1B的碎片桥氏,訪問1365及之后的頁表項時猛铅,還要考慮前面的頁框中的碎片,才能得到頁表項的物理地址堕伪,比較麻煩

進(jìn)程頁表通常存放在連續(xù)的頁框中栗菜,這樣就能用統(tǒng)一的計算方式得到想要得到的頁表項存儲的位置

地址變換過程中有兩次訪存操作:查詢頁表、訪問目標(biāo)內(nèi)存單元

具有快表的地址變換機構(gòu)

局部性原理

int i = 0;
int a[100];
while(i < 100){
    a[i] = i;
    i++;
}

如果這個程序?qū)⒊绦驅(qū)?yīng)的指令存放在10號內(nèi)存塊富俄,將程序中定義的變量存放在23號內(nèi)存塊而咆,當(dāng)這個程序執(zhí)行時,會很頻繁地反問10悠瞬、23號內(nèi)存塊

時間局部性:如果執(zhí)行了程序中的某條指令浅妆,那么不久后這條指令很有可能被再次執(zhí)行障癌;如果某個數(shù)據(jù)被訪問過,不久之后該數(shù)據(jù)很有可能再次被訪問(因為程序存在大量循環(huán))
空間局部性:一旦程序訪問了某個存儲單元趴乡,在不久之后,其附近的存儲單元也很有可能被訪問(因為很多數(shù)據(jù)在內(nèi)存中連續(xù)存放)

基本地址變換機構(gòu)中晾捏,每次要訪問一個邏輯地址惦辛,都要查詢頁表,由于局部性原理胖齐,可能連續(xù)多次查詢同一個頁表項

快表:又稱聯(lián)想寄存器(TLB),是一種訪問速度比內(nèi)存塊很多的高速緩存补履,用來存放當(dāng)前訪問的若干頁表項箫锤,以加速地址變換的過程雨女。內(nèi)存中的頁表常稱為慢表

引入快表后地址的變換過程

  1. CPU給出邏輯地址,由某個硬件計算出頁號馏臭、頁內(nèi)偏移量讼稚,將頁號與快表中的所有頁號比較
  2. 如果找到匹配的頁號锐想,說明要訪問的頁表項在快表中有副本,直接從快表中取出該頁對應(yīng)的內(nèi)存塊號,再將內(nèi)存塊號與頁內(nèi)偏移量拼接形成物理地址澜躺,最后,訪問該物理地址對應(yīng)的內(nèi)存單元耘戚。因此如果快表命中操漠,訪問某個邏輯地址僅需一次訪存
  3. 如果沒有找到匹配的頁號饿这,需要訪問內(nèi)存中的頁表长捧,找到對應(yīng)頁表項吻贿,得到頁面存放的內(nèi)存塊號,將內(nèi)存塊號和頁內(nèi)偏移量拼接形成物理地址肌割,訪問物理地址對應(yīng)的存儲單元;找到頁表項后把敞,同時也會將該頁表項存入快表奋早,若快表已滿,會按照一定的算法對舊的頁表項進(jìn)行替換伸蚯。因此如果快表未命中剂邮,訪問某個邏輯地址需要兩次訪存

一般來說挥萌,快表的命中率可以達(dá)到90%以上

例子:
某系統(tǒng)使用基本分頁存儲,采用具有快表的地址變換機構(gòu)引瀑,訪問一次快表耗時1us憨栽,訪問一次內(nèi)存耗時100us屑柔,若快表的命中率為90%,那么訪問一個邏輯地址的平均耗時是多少掸宛?

(1+100) * 0.9 + (1 + 100 + 100) * 0.1 = 111(us)

有的系統(tǒng)支持快慢表同時查詢

(1+100) * 0.9 + (100+100) * 0.1 = 110.9(us)

多級頁表

單級頁表存在的問題

  1. 頁表必須連續(xù)存放唧瘾,因此當(dāng)頁表很大時,需要占用很多個連續(xù)的頁框
  2. 沒有必要讓整個頁表常駐內(nèi)存领虹,因為進(jìn)程在一段時間內(nèi)可能只需要訪問某幾個特定的頁面(局部性原理)

對問題1

可將頁表進(jìn)行分組菌羽,使每個內(nèi)存塊剛好可以放入一個分組注祖。為離散分配的頁表再建立一張頁表,稱為頁目錄表肚菠,或外層頁表
各級頁表的大小不能超過一個頁面

例子:
某系統(tǒng)按字節(jié)編址蚊逢,采用40位邏輯地址箫章,頁面大小為4KB,需要采用幾級頁表终抽,頁內(nèi)偏移量是多少位桶至?

頁框總數(shù)為

2^{40} / 2^{12} = 2^{28}
镣屹,需要
28
位來索引頁框號,
ceil(28/8) = 4B
持舆,所以一個頁表項占
4
字節(jié)吏廉。一個頁框能夠存放
4K/4 = 1K
個頁表項惰许,所以各級頁表最多包含
1K
個頁表項汹买,需要
10
個二進(jìn)制位才能映射到
1K
個頁表項晦毙,因此每級頁表對應(yīng)頁號為
10
位,
28
位的頁號需要至少分為
3

針對兩級頁表

  1. 按照地址結(jié)構(gòu)將邏輯地址拆分為三部分:一級頁號孤荣、二級頁號盐股、頁內(nèi)偏移量
  2. 從PCB中讀出頁目錄表起始地址疯汁,再根據(jù)一級頁號查找頁目錄表卵酪,找到下一級頁表在內(nèi)存中的位置
  3. 根據(jù)二級頁號查表溃卡,找到最終想訪問的內(nèi)存塊號
  4. 結(jié)合頁內(nèi)偏移量得到物理地址

對問題2

可以在需要訪問頁面時,才把頁面調(diào)入內(nèi)存(虛擬存儲技術(shù))漩仙,可以在頁表項中增加一個標(biāo)志位讯赏,用于表示該頁面是否已經(jīng)調(diào)入內(nèi)存
若想訪問的頁面不在內(nèi)存中漱挎,會產(chǎn)生缺頁中斷(內(nèi)中斷)雀哨,然后將目標(biāo)頁面從外存調(diào)入內(nèi)存
之后的文章會有展開

兩級頁表訪存次數(shù)分析:如果沒有TLB,第一次訪存是訪問內(nèi)存中的頁目錄表膊夹,第二次訪存是訪問內(nèi)存中的二級頁表捌浩,第三次訪存是訪問目標(biāo)內(nèi)存單元

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末放刨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尸饺,更是在濱河造成了極大的恐慌进统,老刑警劉巖助币,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異螟碎,居然都是意外死亡眉菱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門掉分,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俭缓,“玉大人,你說我怎么就攤上這事酥郭』梗” “怎么了季春?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵撵颊,是天一觀的道長逞刷。 經(jīng)常有香客問我夸浅,道長,這世上最難降的妖魔是什么坯钦? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任突颊,我火速辦了婚禮呈昔,結(jié)果婚禮上肝劲,老公的妹妹穿的比我還像新娘掷漱。我一直安慰自己卜范,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布沪袭。 她就那樣靜靜地躺著侠鳄,像睡著了一般伟恶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上台盯,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音明垢,去河邊找鬼施绎。 笑死致稀,一個胖子當(dāng)著我的面吹牛抖单,可吹牛的內(nèi)容都是我干的押蚤。 我是一名探鬼主播次屠,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼本昏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宿稀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仁期,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悦析,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡骑歹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年最域,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薄翅。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡训措,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站优妙,受9級特大地震影響胞皱,放射性物質(zhì)發(fā)生泄漏于颖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一浪秘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铣耘。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背传泊。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓却特,卻偏偏與公主長得像闽晦,于是被迫代替她去往敵國和親荠瘪。 傳聞我的和親對象是個殘疾皇子坊秸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350