13 內(nèi)存非連續(xù)分配管理方式

非連續(xù)分配允許一個程序分散地裝入到不相鄰的內(nèi)存分區(qū)中砌创,根據(jù)分區(qū)的大小是否固定分為分頁存儲管理方式和分段存儲管理方式。在分頁存儲管理方式中鲫懒,如果不具備頁面對換功能嫩实,則稱為基本分頁存儲管理方式,或純分頁管理方式窥岩。

基本分頁存儲管理方式

固定分區(qū)會產(chǎn)生內(nèi)部碎片舶赔,動態(tài)分區(qū)會產(chǎn)生外部碎片,這兩種技術(shù)對內(nèi)存的利用率都比較低谦秧。為盡量避免碎片的產(chǎn)生,引入了分頁的思想:把主存空間劃分為大小相等且固定的塊撵溃,塊相對較小疚鲤,作為主存的基本單位。每個進(jìn)程也以塊為單位進(jìn)行劃分缘挑,進(jìn)程在執(zhí)行時集歇,以塊為單位逐個申請主存中的塊空間。

分頁方法與固定分區(qū)技術(shù)不同點在于:塊的大小相對于分區(qū)小很多语淘,而且進(jìn)程也按照塊進(jìn)行劃分诲宇,進(jìn)程運行時际歼,按照塊申請主存可用空間并執(zhí)行。與分區(qū)留在較大的內(nèi)部碎片不同姑蓝,分頁方式只會在最后一個主存塊上留下頁內(nèi)碎片鹅心。

1 分頁存儲的幾個基本概念
1.1 頁面和頁面大小

進(jìn)程中的塊稱為頁(Page),內(nèi)存中的塊稱為頁框或頁幀(Page Frame)纺荧。外存也以同樣的單位進(jìn)行劃分旭愧,直接稱為塊(Block)。進(jìn)程在執(zhí)行時需要申請主存空間宙暇,就是要為每個頁面分配主存中的可用頁框输枯,頁與頁框的一一對應(yīng)。

為方便地址轉(zhuǎn)換占贫,頁面大小應(yīng)是2的整數(shù)冪桃熄,通常是512B~8KB。同時頁面大小應(yīng)該適中型奥,需要進(jìn)行空間效率和時間效率的權(quán)衡瞳收。如果頁面太小,會使進(jìn)程的頁面數(shù)過多桩引,這樣頁表就過長缎讼,占用大量內(nèi)存,而且也會增加硬件地址轉(zhuǎn)換的開銷坑匠,降低頁面換入/換出的效率血崭;頁面過大又會使頁內(nèi)碎片增大,降低內(nèi)存的利用率厘灼。

1.2 地址結(jié)構(gòu)

分頁存儲管理的邏輯地址結(jié)構(gòu)如圖所示:


地址結(jié)構(gòu)包含兩部分:前一部分為頁號P夹纫,后一部分為頁內(nèi)偏移量W。地址長度為32 位设凹,其中0-11位為頁內(nèi)地址舰讹,即每頁大小為4KB;12-31位為頁號闪朱,地址空間最多允許有2^20(1M)頁月匣。

1.3 頁表

為了便于在內(nèi)存中找到進(jìn)程的每個頁面所對應(yīng)的物理塊,系統(tǒng)為每個進(jìn)程建立一張頁表奋姿,記錄頁面在內(nèi)存中對應(yīng)的物理塊號锄开,頁表一般存放在內(nèi)存中。

進(jìn)程通過查表得到每頁在內(nèi)存中的物理塊號称诗。由頁表實現(xiàn)了從頁號到物理塊號的地址映射萍悴。如下圖所示:


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

地址變換機構(gòu)的任務(wù)是將邏輯地址轉(zhuǎn)換為內(nèi)存中物理地址,地址變換是借助于頁表實現(xiàn)的。轉(zhuǎn)換過程中癣诱,業(yè)內(nèi)偏移是固定的计维,需要完成由頁號到塊號的變換。

在系統(tǒng)中通常設(shè)置一個頁表寄存器(PTR)撕予,存放頁表在內(nèi)存的始址F和頁表長度M鲫惶。進(jìn)程未執(zhí)行時,頁表的始址和長度存放在進(jìn)程控制塊中嗅蔬,當(dāng)進(jìn)程執(zhí)行時剑按,才將頁表始址和長度存入頁表寄存器。設(shè)頁面大小為L澜术,邏輯地址A到物理地址E的變換過程如下:

  • 計算頁號P(P=A/L)和頁內(nèi)偏移量W (W=A%L)艺蝴。
  • 比較頁號P和頁表長度M,若P >= M鸟废,則產(chǎn)生越界中斷猜敢,否則繼續(xù)執(zhí)行。
  • 頁表中頁號P對應(yīng)的頁表項地址 = 頁表起始地址F + 頁號P * 頁表項長度盒延,取出該頁表項內(nèi)容b缩擂,即為物理塊號。
  • 計算E=b*L+W添寺,用得到的物理地址E去訪問內(nèi)存胯盯。

以上整個地址變換過程均是由硬件自動完成的。

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

若頁表全部放在內(nèi)存中计露,則存取一個數(shù)據(jù)或一條指令至少要訪問兩次內(nèi)存:一次是訪問頁表博脑,確定所存取的數(shù)據(jù)或指令的物理地址,第二次才根據(jù)該地址存取數(shù)據(jù)或指令票罐。這種方法比通常執(zhí)行指令的速度慢了一半叉趣。

為加速地址變換的過程,在地址變換機構(gòu)中增設(shè)了一個具有并行查找能力的高速緩沖存儲器——快表该押,又稱聯(lián)想寄存器(TLB)疗杉,用來存放當(dāng)前訪問的若干頁表項。與此對應(yīng)蚕礼,主存中的頁表也常稱為慢表烟具,配有快表的地址變換機構(gòu)如圖所示:

image.png

在具有快表的分頁機制中,地址的變換過程:

  • CPU給出邏輯地址后奠蹬,由硬件進(jìn)行地址轉(zhuǎn)換并將頁號送入高速緩存寄存器朝聋,并將此頁號與快表中的所有頁號進(jìn)行比較。
  • 如果在快表中找到匹配的頁號罩润,則直接從中取出該頁對應(yīng)的頁框號,與頁內(nèi)偏移量拼接形成物理地址翼馆。這樣割以,存取數(shù)據(jù)僅一次訪存便可實現(xiàn)金度。
  • 如果沒有找到,則需要訪問主存中的頁表严沥,在讀出頁表項后猜极,應(yīng)同時將其存入快表,以便后面可能的再次訪問消玄。但若快表已滿跟伏,則必須按照一定的算法對舊的頁表項進(jìn)行替換。

有些處理機設(shè)計為快表和慢表同時查找翩瓜,如果在快表中查找成功則終止慢表的查找受扳。一般快表的命中率可以達(dá)到90%以上,這樣兔跌,分頁帶來的速度損失就降低到10%以下勘高。

4 兩級和多級頁表

現(xiàn)代大多數(shù)計算機系統(tǒng)都支持非常大的邏輯地址空間(232~264),在這樣的環(huán)境下坟桅,頁表就變得非常大华望,要占很大的內(nèi)存空間。32 位邏輯地址空間仅乓、頁面大小4KB赖舟、頁表項大小4B為例,若要實現(xiàn)進(jìn)程對全部邏輯地址空間的映射夸楣,則每個進(jìn)程需要2^20個頁表項宾抓。也就是說,每個進(jìn)程僅頁表這一項就需要4MB主存空間裕偿,這顯然是不切實際的洞慎。

此問題解決分兩方面:一方面,只將當(dāng)前需要的部分表項調(diào)入內(nèi)存嘿棘,其余的頁表仍然駐留在磁盤上劲腿,需要時再調(diào)入。另一方面鸟妙,需要對頁表映射的思想進(jìn)一步延伸焦人,就可以得到二級分頁。

二級頁表將頁表的10頁空間也進(jìn)行地址映射重父,建立上一級頁表花椭,用于存儲頁表的映射關(guān)系。上一級頁表只需要1頁就足夠(可以存儲2^10=1024個頁表項)房午。在進(jìn)程執(zhí)行時矿辽,只需要將這1頁的上一級頁表調(diào)入內(nèi)存即可,進(jìn)程的頁表和進(jìn)程本身的頁面,可以在后面的執(zhí)行中再調(diào)入內(nèi)存袋倔。

對二級頁表再進(jìn)行拓展雕蔽,得到多級頁表。64位計算機通常將可尋址存儲空間減少為45位長度宾娜,這樣可以使用三級頁表結(jié)構(gòu)來實現(xiàn)分頁存儲管理批狐。

基本分段存儲管理方式

分頁管理方式是從計算機的角度考慮設(shè)計的,以提高內(nèi)存的利用率前塔,提升計算機的性能, 且分頁通過硬件機制實現(xiàn)嚣艇,對用戶完全透明;而分段管理方式的提出則是考慮了用戶和程序員华弓,以滿足方便編程食零、信息保護(hù)和共享、動態(tài)增長及動態(tài)鏈接等多方面的需要该抒。

1 分段

段式管理方式按照用戶進(jìn)程中的自然段劃分邏輯空間慌洪。例如,用戶進(jìn)程由主程序凑保、兩個子程序冈爹、棧和一段數(shù)據(jù)組成,于是可以把這個用戶進(jìn)程劃分為5個段欧引,每段從0 開始編址频伤,并分配一段連續(xù)的地址空間(段內(nèi)要求連續(xù),段間不要求連續(xù)芝此,因此整個作業(yè)的地址空間是二維的)憋肖。其邏輯地址由段號S與段內(nèi)偏移量W兩部分組成。

下圖中婚苹,段號是16位岸更,段內(nèi)偏移量是為16位,則一個作業(yè)最多可有216=65536個段膊升,最大段長為64KB怎炊。


在頁式系統(tǒng)中,邏輯地址的頁號和頁內(nèi)偏移量對用戶是透明的廓译,但在段式系統(tǒng)中评肆,段號和段內(nèi)偏移量必須由用戶顯示提供,在髙級程序設(shè)計語言中非区,這個工作由編譯程序完成瓜挽。

2 段表

每個進(jìn)程都有一張邏輯空間與內(nèi)存空間映射的段表,其中每一個段表項對應(yīng)進(jìn)程的一個段征绸,段表項記錄該段在內(nèi)存中的起始地址和段的長度久橙。段表的內(nèi)容如圖所示:

段表用于實現(xiàn)從邏輯段到物理內(nèi)存區(qū)的映射俄占。在配置了段表后,執(zhí)行中的進(jìn)程可通過查找段表淆衷,找到每個段所對應(yīng)的內(nèi)存區(qū)颠放。

3 地址變換機構(gòu)

為了實現(xiàn)進(jìn)程從邏輯地址到物理地址的變換功能,在系統(tǒng)中設(shè)置了段表寄存器吭敢,用于存放段表始址F和段表長度M。其從邏輯地址A到物理地址E之間的地址變換過程如下:

  • 從邏輯地址A中取出前幾位為段號S暮芭,后幾位為段內(nèi)偏移量W鹿驼。
  • 比較段號S和段表長度M,若S多M辕宏,則產(chǎn)生越界中斷畜晰,否則繼續(xù)執(zhí)行。
  • 段表中段號S對應(yīng)的段表項地址 = 段表起始地址F + 段號S * 段表項長度瑞筐,取出該段表項的前幾位得到段長C凄鼻。若段內(nèi)偏移量>=C,則產(chǎn)生越界中斷聚假,否則繼續(xù)執(zhí)行块蚌。
  • 取出段表項中該段的起始地址b,計算 E = b + W膘格,用得到的物理地址E去訪問內(nèi)存峭范。
    分段系統(tǒng)的地址變換過程如下圖所示:
4 段的共享與保護(hù)

在分段系統(tǒng)中,段的共享是通過兩個作業(yè)的段表中相應(yīng)表項指向被共享的段的同一個物理副本來實現(xiàn)的瘪贱。當(dāng)一個作業(yè)正從共享段中讀取數(shù)據(jù)時纱控,必須防止另一個作業(yè)修改此共享段中的數(shù)據(jù)。

不能修改的代碼稱為純代碼或可重入代碼(它不屬于臨界資源)菜秦。這樣的代碼和不能修改的數(shù)據(jù)是可以共享的甜害,而可修改的代碼和數(shù)據(jù)則不能共享。(需要修改數(shù)據(jù)時球昨,每個訪問進(jìn)程必須配置局部數(shù)據(jù)區(qū)尔店,并在執(zhí)行中可能改變的部分拷貝到該區(qū)域)

與分頁管理類似,分段管理的保護(hù)方法主要有兩種:一種是存取控制保護(hù)褪尝,另一種是地址越界保護(hù)闹获。地址越界保護(hù)是利用段表寄存器中的段表長度與邏輯地址中的段號比較,若段號大于段表長度則產(chǎn)生越界中斷河哑;再利用段表項中的段長和邏輯地址中的段內(nèi)位移進(jìn)行比較避诽,若段內(nèi)位移大于段長,也會產(chǎn)生越界中斷璃谨。

段頁式管理方式

頁式存儲管理能有效地提高內(nèi)存利用率沙庐,而分段存儲管理能反映程序的邏輯結(jié)構(gòu)并有利于段的共享鲤妥。如果將這兩種存儲管理方法結(jié)合起來,就形成了段頁式存儲管理方式拱雏。

在段頁式系統(tǒng)中棉安,作業(yè)的地址空間首先被分成若干個邏輯段,每段都有自己的段號铸抑,然后再將每一段分成若干個大小固定的頁贡耽。對內(nèi)存空間的管理仍然和分頁存儲管理一樣,將其分成若干個和頁面大小相同的存儲塊鹊汛,對內(nèi)存的分配以存儲塊為單位蒲赂,如圖所示:

在段頁式系統(tǒng)中,作業(yè)的邏輯地址分為三部分:段號刁憋、頁號和頁內(nèi)偏移量:

注意:在一個進(jìn)程中滥嘴,段表只有一個,而頁表可能有多個至耻。

在進(jìn)行地址變換時若皱,首先通過段表查到頁表起始地址,然后通過頁表找到頁幀號尘颓,最后形成物理地址走触。如圖所示,進(jìn)行一次訪問實際需要三次訪問主存疤苹,這里同樣可以使用快表以加快查找速度饺汹,其關(guān)鍵字由段號、頁號組成痰催,值是對應(yīng)的頁幀號和保護(hù)碼兜辞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夸溶,隨后出現(xiàn)的幾起案子逸吵,更是在濱河造成了極大的恐慌,老刑警劉巖缝裁,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扫皱,死亡現(xiàn)場離奇詭異,居然都是意外死亡捷绑,警方通過查閱死者的電腦和手機韩脑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粹污,“玉大人段多,你說我怎么就攤上這事∽撤裕” “怎么了进苍?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵加缘,是天一觀的道長。 經(jīng)常有香客問我觉啊,道長拣宏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任杠人,我火速辦了婚禮勋乾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗡善。我一直安慰自己市俊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布滤奈。 她就那樣靜靜地躺著,像睡著了一般撩满。 火紅的嫁衣襯著肌膚如雪蜒程。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天伺帘,我揣著相機與錄音昭躺,去河邊找鬼。 笑死伪嫁,一個胖子當(dāng)著我的面吹牛领炫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播张咳,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼帝洪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脚猾?” 一聲冷哼從身側(cè)響起葱峡,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎龙助,沒想到半個月后砰奕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡提鸟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年军援,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片称勋。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡胸哥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赡鲜,到底是詐尸還是另有隱情烘嘱,我是刑警寧澤昆禽,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蝇庭,受9級特大地震影響醉鳖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮内,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一盗棵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧北发,春花似錦纹因、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狱庇,卻和暖如春惊畏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背密任。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工颜启, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪讳。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓缰盏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淹遵。 傳聞我的和親對象是個殘疾皇子口猜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容