[OS复习]程序装入技术、简单存储管理技术
生活随笔
收集整理的這篇文章主要介紹了
[OS复习]程序装入技术、简单存储管理技术
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.可執(zhí)行程序的生成步驟
如何裝入待執(zhí)行的程序及其所需的數(shù)據(jù)?
何時(shí)將程序的邏輯地址轉(zhuǎn)換為物理地址?
3種裝入方式:絕對(duì)裝入、重定位裝入和運(yùn)行時(shí)動(dòng)態(tài)裝入。?
1.1絕對(duì)裝入
程序運(yùn)行之前,按照程序的邏輯地址,將程序和數(shù)據(jù)裝入內(nèi)存指定的地方。實(shí)現(xiàn)簡(jiǎn)單,無(wú)須進(jìn)行邏輯地址到物理地址的變換。
缺點(diǎn):
程序每次必須裝入同一內(nèi)存區(qū);
程序員必須事先了解內(nèi)存的使用情況,根據(jù)內(nèi)存情況確定程序的邏輯地址;
程序的修改(增加或刪除指令)將引起整個(gè)程序中指令地址的變動(dòng);
程序中的所有存儲(chǔ)引用,例如函數(shù)調(diào)用或過程調(diào)用等,在裝入之前都必須轉(zhuǎn)換為物理地址,這不利于存儲(chǔ)共享。
1.2重定位裝入
允許將程序裝入與邏輯地址不同的物理內(nèi)存空間。即程序可以裝入到內(nèi)存的任何位置,其邏輯地址與裝入內(nèi)存后的物理地址無(wú)直接關(guān)系。但是,必須進(jìn)行地址映射,將邏輯地址轉(zhuǎn)換為物理地址。 靜態(tài)重定位技術(shù):地址映射在程序裝入時(shí)進(jìn)行,以后不再更改程序地址。有利于程序代碼和數(shù)據(jù)的共享。因?yàn)檠b入程序時(shí),可以將其中的某些存儲(chǔ)引用的邏輯地址映射為內(nèi)存中已有的共享區(qū)的物理地址。但是,靜態(tài)重定位不允許程序在內(nèi)存中移動(dòng)。這不便于進(jìn)程交換和緊湊拼接操作,也很難實(shí)現(xiàn)多道程序環(huán)境下,多個(gè)程序同時(shí)裝入內(nèi)存的要求。故,重定位裝入方式只適合于單道程序環(huán)境。
運(yùn)行時(shí)動(dòng)態(tài)裝入:程序的地址轉(zhuǎn)換不是在裝入時(shí)進(jìn)行,而是在程序運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行。運(yùn)行時(shí)動(dòng)態(tài)裝入需要硬件支持,即重定位寄存器,用于保存程序在內(nèi)存中的起始地址。程序被執(zhí)行時(shí),通過重定位寄存器內(nèi)的起始物理地址和指令或數(shù)據(jù)的邏輯地址計(jì)算其物理地址。運(yùn)行時(shí)動(dòng)態(tài)裝入有利于多道程序環(huán)境下,進(jìn)程的換進(jìn)/換出及實(shí)現(xiàn)緊湊技術(shù)。?
2.可執(zhí)行程序的鏈接形成?
目標(biāo)模塊如何鏈接成裝入模塊呢?靜態(tài)鏈接,動(dòng)態(tài)鏈接(裝入時(shí)動(dòng)態(tài)鏈接和運(yùn)行時(shí)動(dòng)態(tài)鏈接?)2.1靜態(tài)鏈接
程序被裝入內(nèi)存之前,必須完全鏈接成一個(gè)裝入模塊,將其中的存儲(chǔ)引用全部轉(zhuǎn)換為相對(duì)地址跳轉(zhuǎn)語(yǔ)句。并將多個(gè)目標(biāo)模塊鏈接成為一個(gè)模塊,使裝入模塊中的每一條指令具有相對(duì)于整個(gè)模塊的第一條語(yǔ)句的邏輯地址。靜態(tài)鏈接生成的裝入模塊可以采用重定位裝入或運(yùn)行時(shí)動(dòng)態(tài)裝入方式。靜態(tài)鏈接需要花費(fèi)大量的處理機(jī)時(shí)間。而其中的很多模塊將不會(huì)運(yùn)行,浪費(fèi)存儲(chǔ)空間和處理機(jī)時(shí)間。2.2?動(dòng)態(tài)鏈接
不用事先鏈接所有目標(biāo)模塊形成一個(gè)完備的裝入模塊,而是生成一個(gè)含有未被鏈接的外部模塊引用的裝入模塊,這些外部模塊可以在裝入時(shí)鏈接,或運(yùn)行時(shí)鏈接。裝入時(shí)動(dòng)態(tài)鏈接(如為真為假兩種情況都要裝入,而實(shí)際上只用到了一種情況):
當(dāng)系統(tǒng)裝入含有未鏈接的外部模塊引用的裝入模塊時(shí),每當(dāng)遇到一個(gè)外部模塊引用,則查找相應(yīng)的目標(biāo)模塊。將其裝入內(nèi)存,并將模塊內(nèi)的指令地址轉(zhuǎn)換為相對(duì)于整個(gè)裝入模塊起始地址的相對(duì)地址。
優(yōu)點(diǎn):有利于目標(biāo)模塊的更新與升級(jí);有利于代碼共享;有利于擴(kuò)充軟件的功能,可以將擴(kuò)充部分作為動(dòng)態(tài)鏈接模塊。
缺點(diǎn):可能鏈接一些不會(huì)執(zhí)行的模塊,浪費(fèi)存儲(chǔ)空間和處理機(jī)時(shí)間。
運(yùn)行時(shí)動(dòng)態(tài)鏈接:
外部模塊引用直至程序執(zhí)行時(shí)才裝入內(nèi)存,并鏈接到裝入模塊中,進(jìn)行地址轉(zhuǎn)換??梢越鉀Q靜態(tài)鏈接和裝入時(shí)動(dòng)態(tài)鏈接都面臨的存儲(chǔ)空間和處理機(jī)時(shí)間浪費(fèi)問題,不需要執(zhí)行的模塊就不會(huì)裝入內(nèi)存。該方法廣泛用于事務(wù)處理系統(tǒng),如航空售票系統(tǒng)、銀行管理系統(tǒng)等。操作系統(tǒng)自身的一些特殊處理例程,如錯(cuò)誤處理例程,也無(wú)需事先全部裝入內(nèi)存。
3.簡(jiǎn)單存儲(chǔ)管理技術(shù)
相對(duì)于虛擬存儲(chǔ)而言,指為了實(shí)現(xiàn)簡(jiǎn)單,執(zhí)行之前,操作系統(tǒng)必須將待執(zhí)行的程序全部裝入內(nèi)存。然而,現(xiàn)代操作系統(tǒng)大都支持虛擬存儲(chǔ)功能,允許進(jìn)程裝入部分程序即可開始執(zhí)行,其余部分保留在外存。當(dāng)執(zhí)行所需的部分不在內(nèi)存時(shí),中斷進(jìn)程執(zhí)行,使之阻塞等待,直到相應(yīng)部分裝入內(nèi)存。4.程序在內(nèi)存中如何組織
連續(xù)存儲(chǔ) : 需要內(nèi)存中的一塊連續(xù)的、足夠大的分區(qū)。如果內(nèi)存中沒有足夠大的連續(xù)空閑分區(qū),但存在總量足夠的獨(dú)立小分區(qū),即外零頭。系統(tǒng)要么拒絕分配空間,要么采用緊湊技術(shù)拼接外零頭。非連續(xù)存儲(chǔ):允許進(jìn)程的程序和數(shù)據(jù)分別裝在內(nèi)存的不同分區(qū)中。必須登記一個(gè)進(jìn)程分到的所有分區(qū)的位置、大小、使用情況(如是否共享等)等信息。常用的非連續(xù)存儲(chǔ)技術(shù):分頁(yè)存儲(chǔ)技術(shù)、分段存儲(chǔ)技術(shù)及其結(jié)合。
4.1?連續(xù)存儲(chǔ)管理
最簡(jiǎn)單的存儲(chǔ)管理技術(shù),要求系統(tǒng)配置專門的硬件實(shí)現(xiàn)快速地址轉(zhuǎn)換和存儲(chǔ)保護(hù)。處理機(jī)硬件 :基址寄存器(Base register)、界限寄存器(Bounds register)。基址寄存器:存放當(dāng)前執(zhí)行進(jìn)程所在分區(qū)的物理存儲(chǔ)單元的起始地址。?
界限寄存器:存放當(dāng)前執(zhí)行進(jìn)程所在分區(qū)最后一個(gè)物理存儲(chǔ)單元的地址,限定進(jìn)程的執(zhí)行范圍,保護(hù)其他進(jìn)程不被非法訪問。
基址寄存器和界限寄存器被多個(gè)進(jìn)程共享,只有當(dāng)前執(zhí)行進(jìn)程才使用它們。?
裝入時(shí),進(jìn)程分區(qū)的基地址值和分區(qū)的最后一個(gè)物理存儲(chǔ)單元的地址值,分別填入該進(jìn)程PCB的相應(yīng)字段中。當(dāng)進(jìn)程被調(diào)度執(zhí)行時(shí),將PCB中對(duì)應(yīng)的進(jìn)程基地址值寫入基址寄存器中,并將進(jìn)程獲得的內(nèi)存分區(qū)最大地址值,填入界限寄存器中。當(dāng)進(jìn)程被交換出/換入內(nèi)存時(shí),上述兩個(gè)地址值也會(huì)發(fā)生改變。
4.2?地址映射與存儲(chǔ)保護(hù)
邏輯地址轉(zhuǎn)換成物理地址:取基址寄存器中的值,加上邏輯地址值,生成一個(gè)物理地址地址越界檢查:取界限寄存器中的值,與第一步計(jì)算的結(jié)果進(jìn)行比較。如果生成的物理地址超出了界限范圍,產(chǎn)生一個(gè)中斷,報(bào)告地址越界。否則,繼續(xù)該指令的執(zhí)行。
4.3 非連續(xù)存儲(chǔ)-簡(jiǎn)單分頁(yè)存儲(chǔ)管理?
連續(xù)存儲(chǔ):存在外零頭,浪費(fèi)存儲(chǔ)空間?!熬o湊”需要系統(tǒng)額外開銷。非連續(xù)存儲(chǔ):允許將一個(gè)進(jìn)程的程序和數(shù)據(jù)離散存儲(chǔ)在多個(gè)獨(dú)立的分區(qū)中,消除了外零頭。
分頁(yè)存儲(chǔ)管理基本原理:
分頁(yè)存儲(chǔ)管理技術(shù)是一種特殊的固定分區(qū)方法。系統(tǒng)事先將物理內(nèi)存劃分成許多尺寸相等的頁(yè)框 (Page Frame),并將進(jìn)程分割成許多大小相同的頁(yè)面 (Page),頁(yè)面與頁(yè)框大小相同。
分區(qū):進(jìn)程的邏輯地址空間是連續(xù)的、一維的、線性地址,進(jìn)程的每一條指令和數(shù)據(jù)的地址相對(duì)于第一條語(yǔ)句的地址而定。分頁(yè):進(jìn)程被分割成許多頁(yè)面。每個(gè)頁(yè)面內(nèi)的指令和數(shù)據(jù)是連續(xù)的,它們的地址相對(duì)于其所屬頁(yè)的第一條語(yǔ)句的地址,稱為頁(yè)內(nèi)偏移量。邏輯地址被分為兩部分:頁(yè)號(hào)和頁(yè)內(nèi)偏移量。
當(dāng)一個(gè)進(jìn)程被裝入物理內(nèi)存時(shí),系統(tǒng)將為該進(jìn)程的每個(gè)頁(yè)面分配一個(gè)獨(dú)立的頁(yè)框。同一個(gè)進(jìn)程的多個(gè)頁(yè)面不必存放在連續(xù)的多個(gè)頁(yè)框中。
例: 假設(shè)內(nèi)存能提供16個(gè)空閑頁(yè)框,進(jìn)程P1被分割成4個(gè)頁(yè)面,裝入內(nèi)存中的0號(hào)至3號(hào)頁(yè)框。進(jìn)程P2被分割成3個(gè)頁(yè)面,裝入4號(hào)至6號(hào)頁(yè)框。進(jìn)程P3被裝入7號(hào)至12號(hào)頁(yè)框,如圖(a)所示,此時(shí),進(jìn)程P4請(qǐng)求分配5個(gè)頁(yè)框大小的存儲(chǔ)空間,但內(nèi)存只有3個(gè)空閑頁(yè)框。于是,將暫時(shí)不運(yùn)行的P2交換出內(nèi)存,如圖(b)所示:然后,再將P4裝入4、5、6、13、14號(hào)頁(yè)框,如圖(c)所示。?
數(shù)據(jù)結(jié)構(gòu)-頁(yè)表:
頁(yè)表:系統(tǒng)為每個(gè)進(jìn)程建立一張頁(yè)面映射表。用于記載進(jìn)程的各頁(yè)面到物理內(nèi)存中頁(yè)框的映射信息。進(jìn)程的每個(gè)頁(yè)面依次對(duì)應(yīng)頁(yè)表中的一個(gè)表項(xiàng),其中包含相應(yīng)頁(yè)在內(nèi)存中對(duì)應(yīng)的物理頁(yè)框號(hào)和頁(yè)面存取控制權(quán)限等字段。
4.4?地址變換
硬件機(jī)制,實(shí)現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換。分頁(yè)系統(tǒng)中的地址變換過程如下:(1)根據(jù)邏輯地址,計(jì)算出頁(yè)號(hào)和頁(yè)內(nèi)偏移量;
(2)用頁(yè)號(hào)檢索頁(yè)表,查找指定頁(yè)面對(duì)應(yīng)的頁(yè)框號(hào);
(3)根據(jù)頁(yè)框號(hào)和頁(yè)內(nèi)偏移量,計(jì)算出物理地址。 頁(yè)表寄存器:實(shí)現(xiàn)快速地址映射,存儲(chǔ)執(zhí)行進(jìn)程的頁(yè)表起始地址。頁(yè)表寄存器設(shè)置在處理機(jī)硬件中。當(dāng)進(jìn)程被創(chuàng)建時(shí),其頁(yè)表起始地址記載于進(jìn)程PCB中。當(dāng)進(jìn)程被調(diào)度執(zhí)行時(shí),頁(yè)表的起始地址將從該進(jìn)程的PCB中取出,并填入頁(yè)表寄存器中。進(jìn)行地址變換時(shí),處理機(jī)從頁(yè)表寄存器中查找頁(yè)表的地址。
4.5 大頁(yè)表
大邏輯地址空間,頁(yè)表非常大,需要占用相當(dāng)大的內(nèi)存空間。比如,32位邏輯地址空間,假設(shè)頁(yè)面大小為4KB,則4GB的邏輯地址空間將被劃分成2^20個(gè)頁(yè)面。若采用一級(jí)頁(yè)表,則其內(nèi)將包含1兆(2^20)個(gè)頁(yè)表項(xiàng)。若按字節(jié)尋址,一個(gè)頁(yè)表項(xiàng)占4B,則一級(jí)頁(yè)表需要占用4MB內(nèi)存空間。不可能將4MB的頁(yè)表保存在一個(gè)連續(xù)區(qū)中。那么,如何處理大頁(yè)表的存儲(chǔ)與檢索呢??二級(jí)頁(yè)表:
將一個(gè)大頁(yè)表全部保存在內(nèi)存中。首先,將其分割,并離散地存儲(chǔ)在內(nèi)存的多個(gè)頁(yè)框中。為之建立二級(jí)頁(yè)表,記錄被分割的各個(gè)頁(yè)面存儲(chǔ)在哪些頁(yè)框中,也稱為外層頁(yè)表(Outer Page Table)。對(duì)于4GB的進(jìn)程,若采用二級(jí)頁(yè)表,則對(duì)應(yīng)的二級(jí)頁(yè)表結(jié)構(gòu)如圖:?
多級(jí)頁(yè)表:
對(duì)于某些機(jī)器,二級(jí)頁(yè)表也可能非常大。可以采用多級(jí)頁(yè)表,對(duì)外層頁(yè)表再進(jìn)行分頁(yè),將各個(gè)頁(yè)面離散地存儲(chǔ)到不相鄰接的物理頁(yè)框中。雖然,對(duì)大頁(yè)表而言,多級(jí)頁(yè)表方法消除了對(duì)較大的連續(xù)內(nèi)存空間的需要,但并未解決 大頁(yè)表占用較大的內(nèi)存空間的問題,建立多級(jí)頁(yè)表反而會(huì)增加額外的存儲(chǔ)空間。最好的解決辦法是采用虛擬存儲(chǔ)技術(shù),內(nèi)存中僅裝入頁(yè)表的一部分。即只將當(dāng)前需要的部分頁(yè)表項(xiàng)裝入內(nèi)存,其余頁(yè)表項(xiàng)駐留在磁盤上,需要時(shí)再將它們裝入內(nèi)存。若采用多級(jí)頁(yè)表,對(duì)于正在運(yùn)行的進(jìn)程,必須將其外層頁(yè)表調(diào)入內(nèi)存,而內(nèi)層頁(yè)表只需調(diào)入幾頁(yè)就可以了。
4.6?反置頁(yè)表 (Inverted Page Table)
一般情況下,系統(tǒng)從進(jìn)程的角度為每個(gè)進(jìn)程建立一張頁(yè)表,頁(yè)表的表項(xiàng)按頁(yè)號(hào)排序。這種方法可能導(dǎo)致一個(gè)大進(jìn)程的頁(yè)表太大,占據(jù)大量的內(nèi)存空間。反置頁(yè)表:從內(nèi)存的角度建立頁(yè)表,整個(gè)系統(tǒng)只有一張頁(yè)表。頁(yè)表的表項(xiàng)基于內(nèi)存中的每一個(gè)物理頁(yè)框設(shè)置,頁(yè)表項(xiàng)按頁(yè)框號(hào)的順序排序。其中還必須包含頁(yè)框?qū)?yīng)的頁(yè)號(hào)及其隸屬進(jìn)程的標(biāo)識(shí)符等信息。?通常,反置頁(yè)表需要包含成千上萬(wàn)個(gè)表項(xiàng),利用進(jìn)程ID和頁(yè)號(hào)檢索其中某一個(gè)表項(xiàng)的速度很慢??梢愿鶕?jù)進(jìn)程ID和頁(yè)號(hào)構(gòu)建Hash表。Hash表的每一項(xiàng)指向反置頁(yè)表中的某一項(xiàng)。但是,可能會(huì)出現(xiàn)多個(gè)邏輯地址被映射到一個(gè)Hash表項(xiàng)的情況。需要通過鏈接指針將多個(gè)沖突的映射鏈接起來。一般,沖突的表項(xiàng)一般只有一項(xiàng),或兩項(xiàng)。?
地址變換問題:
首先,以進(jìn)程ID和頁(yè)號(hào)為參數(shù),代入Hash函數(shù)進(jìn)行計(jì)算。然后,根據(jù)計(jì)算結(jié)果,檢索反置頁(yè)表。若檢索完整個(gè)反置頁(yè)表都未找到與之匹配的表項(xiàng),表明此頁(yè)尚未裝入內(nèi)存。若系統(tǒng)支持虛擬存儲(chǔ)技術(shù),則產(chǎn)生請(qǐng)求調(diào)頁(yè)中斷。若系統(tǒng)不支持虛擬存儲(chǔ)技術(shù),則表示地址出錯(cuò)。當(dāng)檢索到反置頁(yè)表中的對(duì)應(yīng)表項(xiàng)時(shí),將其中的頁(yè)框號(hào)與邏輯地址中的偏移量相加,構(gòu)成物理地址。 ?
4.7 塊表
分頁(yè)系統(tǒng):處理機(jī)每次存取指令或數(shù)據(jù)至少需要訪問兩次物理內(nèi)存—第一次訪問頁(yè)表,第二次存取指令或數(shù)據(jù)為了提高地址變換速度,為進(jìn)程頁(yè)表設(shè)置一個(gè)專用的高速緩沖存儲(chǔ)器,稱為快表、TLB(Translation Lookaside Buffer),或聯(lián)想存儲(chǔ)器(Associative Memory)?
快表的工作原理:
快表的工作原理類似于系統(tǒng)中的數(shù)據(jù)高速緩存(cache),其中專門保存當(dāng)前進(jìn)程最近訪問過的一組頁(yè)表項(xiàng)。
根據(jù)局部性原理,在一個(gè)很短的時(shí)間段內(nèi),程序的執(zhí)行總是局部于某一個(gè)范圍。即進(jìn)程最近訪問過的頁(yè)面在不久的將來還可能被訪問。
5.分頁(yè)系統(tǒng)地址轉(zhuǎn)換
通過根據(jù)邏輯地址中的頁(yè)號(hào),查找快表中是否存在對(duì)應(yīng)的頁(yè)表項(xiàng)。若快表中存在該表項(xiàng),稱為命中(hit),取出其中的頁(yè)框號(hào),加上頁(yè)內(nèi)偏移量,計(jì)算出物理地址。
若快表中不存在該頁(yè)表項(xiàng),稱為命中失敗,則再查找頁(yè)表,找到邏輯地址中指定頁(yè)號(hào)對(duì)應(yīng)的頁(yè)框號(hào)。同時(shí),更新快表,將該表項(xiàng)插入快表中。并計(jì)算物理地址
頁(yè)面與頁(yè)框大小:
分頁(yè)系統(tǒng)中,頁(yè)面 = 頁(yè)框。頁(yè)框的大小由計(jì)算機(jī)的硬件邏輯定義。通常,頁(yè)框的大小是2的冪次個(gè)字節(jié),且常在512B(29)~4KB(212)之間,典型的頁(yè)框大小為1KB。
將頁(yè)框大小設(shè)置為2的冪次,可以簡(jiǎn)化處理機(jī)中地址變換硬件邏輯的設(shè)計(jì)與實(shí)現(xiàn)。
影響頁(yè)面與頁(yè)框大小的主要因素:頁(yè)內(nèi)零頭、地址轉(zhuǎn)換速度和頁(yè)面交換效率。
較小的頁(yè)面有利于減少內(nèi)零頭,從而有利于提高內(nèi)存的利用率。然而,較小的頁(yè)面也將導(dǎo)致頁(yè)表過大,從而降低處理機(jī)訪問頁(yè)表時(shí)的命中率(Hit Rate)。
塊越大,內(nèi)/外存之間的數(shù)據(jù)交換效率越高。因此,對(duì)于支持交換技術(shù)的系統(tǒng),較大的頁(yè)面有利于提高頁(yè)面換進(jìn)/換出內(nèi)存的效率。
5.1對(duì)分頁(yè)存儲(chǔ)管理的評(píng)價(jià)
徹底消除了外零頭,僅存在很少的內(nèi)零頭, 提高了內(nèi)存利用率。分頁(yè)操作由系統(tǒng)自動(dòng)進(jìn)行,一個(gè)頁(yè)面不能實(shí)現(xiàn)某種邏輯功能。用戶看到的邏輯地址是一維的,無(wú)法調(diào)試執(zhí)行其中的某個(gè)子程序或子函數(shù)。
采用分頁(yè)技術(shù)不易于實(shí)現(xiàn)存儲(chǔ)共享,也不便于程序的動(dòng)態(tài)鏈接。
5.2?簡(jiǎn)單分段存儲(chǔ)管理
基于模塊化程序設(shè)計(jì)時(shí),常常需要將一個(gè)大任務(wù)劃分成若干相對(duì)獨(dú)立的子任務(wù),對(duì)應(yīng)于子任務(wù)編寫子程序,稱為段(Segment)。每個(gè)子程序可以獨(dú)立地編輯、編譯、鏈接和執(zhí)行。
各個(gè)子程序由實(shí)現(xiàn)的功能決定,長(zhǎng)度各不相同。執(zhí)行時(shí),根據(jù)實(shí)際需要,將若干子程序鏈接成一個(gè)大程序。
基本原理:
程序由若干邏輯段組成,每個(gè)段有自己的名字和長(zhǎng)度。程序的邏輯地址是由段名(段號(hào))和段內(nèi)偏移量決定。每個(gè)段的邏輯地址從0開始編址 。
系統(tǒng)采用動(dòng)態(tài)劃分技術(shù),將物理內(nèi)存動(dòng)態(tài)地劃分成許多尺寸不相等的分區(qū)。
當(dāng)一個(gè)進(jìn)程被裝入物理內(nèi)存時(shí),系統(tǒng)將為該進(jìn)程的每一段獨(dú)立地分配一個(gè)分區(qū)。同一進(jìn)程的多個(gè)段不必存放在連續(xù)的多個(gè)分區(qū)中。
分段系統(tǒng)的基本數(shù)據(jù)結(jié)構(gòu):
段表 : 每個(gè)進(jìn)程建立一個(gè),用于描述進(jìn)程的分段情況,記載進(jìn)程的各個(gè)段到物理內(nèi)存中分區(qū)的映射情況。其中包含段號(hào)、段長(zhǎng)、段基址以及對(duì)本段的存取控制權(quán)限等信息。
空閑分區(qū)表 : 用于記載物理內(nèi)存中的空閑分區(qū)情況。
地址變換和存儲(chǔ)保護(hù):
(1)根據(jù)邏輯地址中的段號(hào)檢索進(jìn)程段表,獲得指定段對(duì)應(yīng)的段表項(xiàng);
(2)判斷是否地址越界。比較邏輯地址中的段內(nèi)偏移量與段表項(xiàng)中的段長(zhǎng),若超過段的長(zhǎng)度,則產(chǎn)生存儲(chǔ)保護(hù)中斷(該中斷將由操作系統(tǒng)進(jìn)行處理);否則,轉(zhuǎn)(3);
(3)把邏輯地址中的段內(nèi)偏移量與段表表項(xiàng)中的段基址相加,從而得到物理地址。
6.分頁(yè)與分段技術(shù)的比較
都采用非連續(xù)存儲(chǔ),由地址映射實(shí)現(xiàn)地址變換。不同主要表現(xiàn)在:
(1)頁(yè)是信息的物理單位,大小固定。段是信息的邏輯單位,各段的長(zhǎng)度不固定。每一段都具有一定邏輯含義。
(2)分頁(yè)的地址空間是一維的,邏輯地址的劃分由機(jī)器硬件實(shí)現(xiàn),對(duì)用戶透明。分段的地址空間是二維或多維的,程序員知道段名和段內(nèi)偏移量。
(3)分頁(yè)活動(dòng)源于系統(tǒng)管理物理內(nèi)存的需要,在系統(tǒng)內(nèi)部進(jìn)行,由系統(tǒng)實(shí)施,用戶看不見。分段活動(dòng)源于用戶進(jìn)行模塊化程序設(shè)計(jì)的需要,在系統(tǒng)外部進(jìn)行,由用戶實(shí)施,用戶是知道的。?
6.1?簡(jiǎn)單段頁(yè)式存儲(chǔ)管理?
基本思想:采用分段方法組織用戶程序,采用分頁(yè)方法分配和管理內(nèi)存。即,用戶程序可以用模塊化思想進(jìn)行設(shè)計(jì),一個(gè)用戶序由若干段構(gòu)成。系統(tǒng)將內(nèi)存劃分成固定大小的頁(yè)框,并將程序的每一段分割成若干頁(yè)以后裝入內(nèi)存執(zhí)行時(shí)。邏輯地址:
在段頁(yè)式系統(tǒng)中,進(jìn)程的每一段被進(jìn)一步分割成頁(yè)面,段內(nèi)代碼和數(shù)據(jù)地址不再連續(xù)。
邏輯地址由3部分組成:段號(hào)、段內(nèi)頁(yè)號(hào)、頁(yè)內(nèi)偏移量,如圖
數(shù)據(jù)結(jié)構(gòu):
用于管理的數(shù)據(jù)結(jié)構(gòu):段表、頁(yè)表,如圖:
6.2對(duì)段頁(yè)式存儲(chǔ)管理方式的評(píng)價(jià)
綜合了分段和分頁(yè)技術(shù)的優(yōu)點(diǎn),既能有效地利用存儲(chǔ)空間,又能方便用戶進(jìn)行程序設(shè)計(jì)。但是,實(shí)現(xiàn)段頁(yè)式存儲(chǔ)管理系統(tǒng)需要增加硬件成本,系統(tǒng)的復(fù)雜度和管理開銷也大大增加。
因此,段頁(yè)式存儲(chǔ)管理技術(shù)適合于大、中型計(jì)算機(jī)系統(tǒng),不太適合小型、微型計(jì)算機(jī)系統(tǒng)。
總結(jié)
以上是生活随笔為你收集整理的[OS复习]程序装入技术、简单存储管理技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《纽约时报》:互联网新一轮品牌争夺战到来
- 下一篇: 中国企业飞鸽传书市场