日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[OS复习]程序装入技术、简单存储管理技术

發(fā)布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [OS复习]程序装入技术、简单存储管理技术 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.可執(zhí)行程序的生成步驟


如何裝入待執(zhí)行的程序及其所需的數(shù)據(jù)?
何時將程序的邏輯地址轉(zhuǎn)換為物理地址?
3種裝入方式:絕對裝入、重定位裝入和運行時動態(tài)裝入。?

1.1絕對裝入

程序運行之前,按照程序的邏輯地址,將程序和數(shù)據(jù)裝入內(nèi)存指定的地方。實現(xiàn)簡單,無須進(jìn)行邏輯地址到物理地址的變換。

缺點:
程序每次必須裝入同一內(nèi)存區(qū);
程序員必須事先了解內(nèi)存的使用情況,根據(jù)內(nèi)存情況確定程序的邏輯地址;
程序的修改(增加或刪除指令)將引起整個程序中指令地址的變動;
程序中的所有存儲引用,例如函數(shù)調(diào)用或過程調(diào)用等,在裝入之前都必須轉(zhuǎn)換為物理地址,這不利于存儲共享。

1.2重定位裝入

允許將程序裝入與邏輯地址不同的物理內(nèi)存空間。即程序可以裝入到內(nèi)存的任何位置,其邏輯地址與裝入內(nèi)存后的物理地址無直接關(guān)系。但是,必須進(jìn)行地址映射,將邏輯地址轉(zhuǎn)換為物理地址。 靜態(tài)重定位技術(shù):地址映射在程序裝入時進(jìn)行,以后不再更改程序地址。
有利于程序代碼和數(shù)據(jù)的共享。因為裝入程序時,可以將其中的某些存儲引用的邏輯地址映射為內(nèi)存中已有的共享區(qū)的物理地址。但是,靜態(tài)重定位不允許程序在內(nèi)存中移動。這不便于進(jìn)程交換和緊湊拼接操作,也很難實現(xiàn)多道程序環(huán)境下,多個程序同時裝入內(nèi)存的要求。故,重定位裝入方式只適合于單道程序環(huán)境。
運行時動態(tài)裝入:程序的地址轉(zhuǎn)換不是在裝入時進(jìn)行,而是在程序運行時動態(tài)進(jìn)行。運行時動態(tài)裝入需要硬件支持,即重定位寄存器,用于保存程序在內(nèi)存中的起始地址。程序被執(zhí)行時,通過重定位寄存器內(nèi)的起始物理地址和指令或數(shù)據(jù)的邏輯地址計算其物理地址。運行時動態(tài)裝入有利于多道程序環(huán)境下,進(jìn)程的換進(jìn)/換出及實現(xiàn)緊湊技術(shù)。?

2.可執(zhí)行程序的鏈接形成?

目標(biāo)模塊如何鏈接成裝入模塊呢?靜態(tài)鏈接,動態(tài)鏈接(裝入時動態(tài)鏈接和運行時動態(tài)鏈接?)

2.1靜態(tài)鏈接

程序被裝入內(nèi)存之前,必須完全鏈接成一個裝入模塊,將其中的存儲引用全部轉(zhuǎn)換為相對地址跳轉(zhuǎn)語句。并將多個目標(biāo)模塊鏈接成為一個模塊,使裝入模塊中的每一條指令具有相對于整個模塊的第一條語句的邏輯地址。靜態(tài)鏈接生成的裝入模塊可以采用重定位裝入或運行時動態(tài)裝入方式。靜態(tài)鏈接需要花費大量的處理機(jī)時間。而其中的很多模塊將不會運行,浪費存儲空間和處理機(jī)時間。

2.2?動態(tài)鏈接

不用事先鏈接所有目標(biāo)模塊形成一個完備的裝入模塊,而是生成一個含有未被鏈接的外部模塊引用的裝入模塊,這些外部模塊可以在裝入時鏈接,或運行時鏈接。
裝入時動態(tài)鏈接(如為真為假兩種情況都要裝入,而實際上只用到了一種情況):
當(dāng)系統(tǒng)裝入含有未鏈接的外部模塊引用的裝入模塊時,每當(dāng)遇到一個外部模塊引用,則查找相應(yīng)的目標(biāo)模塊。將其裝入內(nèi)存,并將模塊內(nèi)的指令地址轉(zhuǎn)換為相對于整個裝入模塊起始地址的相對地址。
優(yōu)點:有利于目標(biāo)模塊的更新與升級;有利于代碼共享;有利于擴(kuò)充軟件的功能,可以將擴(kuò)充部分作為動態(tài)鏈接模塊。
缺點:可能鏈接一些不會執(zhí)行的模塊,浪費存儲空間和處理機(jī)時間。
運行時動態(tài)鏈接:
外部模塊引用直至程序執(zhí)行時才裝入內(nèi)存,并鏈接到裝入模塊中,進(jìn)行地址轉(zhuǎn)換。可以解決靜態(tài)鏈接和裝入時動態(tài)鏈接都面臨的存儲空間和處理機(jī)時間浪費問題,不需要執(zhí)行的模塊就不會裝入內(nèi)存。該方法廣泛用于事務(wù)處理系統(tǒng),如航空售票系統(tǒng)、銀行管理系統(tǒng)等。操作系統(tǒng)自身的一些特殊處理例程,如錯誤處理例程,也無需事先全部裝入內(nèi)存。

3.簡單存儲管理技術(shù)

相對于虛擬存儲而言,指為了實現(xiàn)簡單,執(zhí)行之前,操作系統(tǒng)必須將待執(zhí)行的程序全部裝入內(nèi)存。然而,現(xiàn)代操作系統(tǒng)大都支持虛擬存儲功能,允許進(jìn)程裝入部分程序即可開始執(zhí)行,其余部分保留在外存。當(dāng)執(zhí)行所需的部分不在內(nèi)存時,中斷進(jìn)程執(zhí)行,使之阻塞等待,直到相應(yīng)部分裝入內(nèi)存。

4.程序在內(nèi)存中如何組織

連續(xù)存儲 : 需要內(nèi)存中的一塊連續(xù)的、足夠大的分區(qū)。如果內(nèi)存中沒有足夠大的連續(xù)空閑分區(qū),但存在總量足夠的獨立小分區(qū),即外零頭。系統(tǒng)要么拒絕分配空間,要么采用緊湊技術(shù)拼接外零頭。
非連續(xù)存儲:允許進(jìn)程的程序和數(shù)據(jù)分別裝在內(nèi)存的不同分區(qū)中。必須登記一個進(jìn)程分到的所有分區(qū)的位置、大小、使用情況(如是否共享等)等信息。常用的非連續(xù)存儲技術(shù):分頁存儲技術(shù)、分段存儲技術(shù)及其結(jié)合。

4.1?連續(xù)存儲管理

最簡單的存儲管理技術(shù),要求系統(tǒng)配置專門的硬件實現(xiàn)快速地址轉(zhuǎn)換和存儲保護(hù)。處理機(jī)硬件 :基址寄存器(Base register)、界限寄存器(Bounds register)。
基址寄存器:存放當(dāng)前執(zhí)行進(jìn)程所在分區(qū)的物理存儲單元的起始地址。?
界限寄存器:存放當(dāng)前執(zhí)行進(jìn)程所在分區(qū)最后一個物理存儲單元的地址,限定進(jìn)程的執(zhí)行范圍,保護(hù)其他進(jìn)程不被非法訪問。
基址寄存器和界限寄存器被多個進(jìn)程共享,只有當(dāng)前執(zhí)行進(jìn)程才使用它們。?
裝入時,進(jìn)程分區(qū)的基地址值和分區(qū)的最后一個物理存儲單元的地址值,分別填入該進(jìn)程PCB的相應(yīng)字段中。當(dāng)進(jìn)程被調(diào)度執(zhí)行時,將PCB中對應(yīng)的進(jìn)程基地址值寫入基址寄存器中,并將進(jìn)程獲得的內(nèi)存分區(qū)最大地址值,填入界限寄存器中。當(dāng)進(jìn)程被交換出/換入內(nèi)存時,上述兩個地址值也會發(fā)生改變

4.2?地址映射與存儲保護(hù)

邏輯地址轉(zhuǎn)換成物理地址:取基址寄存器中的值,加上邏輯地址值,生成一個物理地址
地址越界檢查:取界限寄存器中的值,與第一步計算的結(jié)果進(jìn)行比較。如果生成的物理地址超出了界限范圍,產(chǎn)生一個中斷,報告地址越界。否則,繼續(xù)該指令的執(zhí)行。

4.3 非連續(xù)存儲-簡單分頁存儲管理?

連續(xù)存儲:存在外零頭,浪費存儲空間。“緊湊”需要系統(tǒng)額外開銷。
非連續(xù)存儲:允許將一個進(jìn)程的程序和數(shù)據(jù)離散存儲在多個獨立的分區(qū)中,消除了外零頭。
分頁存儲管理基本原理:
分頁存儲管理技術(shù)是一種特殊的固定分區(qū)方法。系統(tǒng)事先將物理內(nèi)存劃分成許多尺寸相等的頁框 (Page Frame),并將進(jìn)程分割成許多大小相同的頁面 (Page),頁面與頁框大小相同
分區(qū):進(jìn)程的邏輯地址空間是連續(xù)的、一維的、線性地址,進(jìn)程的每一條指令和數(shù)據(jù)的地址相對于第一條語句的地址而定。分頁:進(jìn)程被分割成許多頁面。每個頁面內(nèi)的指令和數(shù)據(jù)是連續(xù)的,它們的地址相對于其所屬頁的第一條語句的地址,稱為頁內(nèi)偏移量。邏輯地址被分為兩部分:頁號和頁內(nèi)偏移量
當(dāng)一個進(jìn)程被裝入物理內(nèi)存時,系統(tǒng)將為該進(jìn)程的每個頁面分配一個獨立的頁框。同一個進(jìn)程的多個頁面不必存放在連續(xù)的多個頁框中。
假設(shè)內(nèi)存能提供16個空閑頁框,進(jìn)程P1被分割成4個頁面,裝入內(nèi)存中的0號至3號頁框。進(jìn)程P2被分割成3個頁面,裝入4號至6號頁框。進(jìn)程P3被裝入7號至12號頁框,如圖(a)所示,此時,進(jìn)程P4請求分配5個頁框大小的存儲空間,但內(nèi)存只有3個空閑頁框。于是,將暫時不運行的P2交換出內(nèi)存,如圖(b)所示:然后,再將P4裝入4、5、6、13、14號頁框,如圖(c)所示。?

數(shù)據(jù)結(jié)構(gòu)-頁表:
頁表:系統(tǒng)為每個進(jìn)程建立一張頁面映射表。用于記載進(jìn)程的各頁面到物理內(nèi)存中頁框的映射信息。進(jìn)程的每個頁面依次對應(yīng)頁表中的一個表項,其中包含相應(yīng)頁在內(nèi)存中對應(yīng)的物理頁框號和頁面存取控制權(quán)限等字段。

4.4?地址變換

硬件機(jī)制,實現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換。分頁系統(tǒng)中的地址變換過程如下:
(1)根據(jù)邏輯地址,計算出頁號和頁內(nèi)偏移量;
(2)用頁號檢索頁表,查找指定頁面對應(yīng)的頁框號;
(3)根據(jù)頁框號和頁內(nèi)偏移量,計算出物理地址。
頁表寄存器:實現(xiàn)快速地址映射,存儲執(zhí)行進(jìn)程的頁表起始地址。頁表寄存器設(shè)置在處理機(jī)硬件中。當(dāng)進(jìn)程被創(chuàng)建時,其頁表起始地址記載于進(jìn)程PCB中。當(dāng)進(jìn)程被調(diào)度執(zhí)行時,頁表的起始地址將從該進(jìn)程的PCB中取出,并填入頁表寄存器中。進(jìn)行地址變換時,處理機(jī)從頁表寄存器中查找頁表的地址。

4.5 大頁表

大邏輯地址空間,頁表非常大,需要占用相當(dāng)大的內(nèi)存空間。比如,32位邏輯地址空間,假設(shè)頁面大小為4KB,則4GB的邏輯地址空間將被劃分成2^20個頁面。若采用一級頁表,則其內(nèi)將包含1兆(2^20)個頁表項。若按字節(jié)尋址,一個頁表項占4B,則一級頁表需要占用4MB內(nèi)存空間。不可能將4MB的頁表保存在一個連續(xù)區(qū)中。那么,如何處理大頁表的存儲與檢索呢??
二級頁表:
將一個大頁表全部保存在內(nèi)存中。首先,將其分割,并離散地存儲在內(nèi)存的多個頁框中。為之建立二級頁表,記錄被分割的各個頁面存儲在哪些頁框中,也稱為外層頁表(Outer Page Table)。對于4GB的進(jìn)程,若采用二級頁表,則對應(yīng)的二級頁表結(jié)構(gòu)如圖:?

多級頁表:
對于某些機(jī)器,二級頁表也可能非常大。可以采用多級頁表,對外層頁表再進(jìn)行分頁,將各個頁面離散地存儲到不相鄰接的物理頁框中。雖然,對大頁表而言,多級頁表方法消除了對較大的連續(xù)內(nèi)存空間的需要,但并未解決 大頁表占用較大的內(nèi)存空間的問題,建立多級頁表反而會增加額外的存儲空間。最好的解決辦法是采用虛擬存儲技術(shù),內(nèi)存中僅裝入頁表的一部分。即只將當(dāng)前需要的部分頁表項裝入內(nèi)存,其余頁表項駐留在磁盤上,需要時再將它們裝入內(nèi)存。若采用多級頁表,對于正在運行的進(jìn)程,必須將其外層頁表調(diào)入內(nèi)存,而內(nèi)層頁表只需調(diào)入幾頁就可以了。

4.6?反置頁表 (Inverted Page Table)

一般情況下,系統(tǒng)從進(jìn)程的角度為每個進(jìn)程建立一張頁表,頁表的表項按頁號排序。這種方法可能導(dǎo)致一個大進(jìn)程的頁表太大,占據(jù)大量的內(nèi)存空間。反置頁表:從內(nèi)存的角度建立頁表,整個系統(tǒng)只有一張頁表。頁表的表項基于內(nèi)存中的每一個物理頁框設(shè)置,頁表項按頁框號的順序排序。其中還必須包含頁框?qū)?yīng)的頁號及其隸屬進(jìn)程的標(biāo)識符等信息。?
通常,反置頁表需要包含成千上萬個表項,利用進(jìn)程ID和頁號檢索其中某一個表項的速度很慢。可以根據(jù)進(jìn)程ID和頁號構(gòu)建Hash表。Hash表的每一項指向反置頁表中的某一項。但是,可能會出現(xiàn)多個邏輯地址被映射到一個Hash表項的情況。需要通過鏈接指針將多個沖突的映射鏈接起來。一般,沖突的表項一般只有一項,或兩項。?
地址變換問題
首先,以進(jìn)程ID和頁號為參數(shù),代入Hash函數(shù)進(jìn)行計算。然后,根據(jù)計算結(jié)果,檢索反置頁表。若檢索完整個反置頁表都未找到與之匹配的表項,表明此頁尚未裝入內(nèi)存。若系統(tǒng)支持虛擬存儲技術(shù),則產(chǎn)生請求調(diào)頁中斷。若系統(tǒng)不支持虛擬存儲技術(shù),則表示地址出錯。當(dāng)檢索到反置頁表中的對應(yīng)表項時,將其中的頁框號與邏輯地址中的偏移量相加,構(gòu)成物理地址。 ?

4.7 塊表

分頁系統(tǒng):處理機(jī)每次存取指令或數(shù)據(jù)至少需要訪問兩次物理內(nèi)存—第一次訪問頁表,第二次存取指令或數(shù)據(jù)
為了提高地址變換速度,為進(jìn)程頁表設(shè)置一個專用的高速緩沖存儲器,稱為快表、TLB(Translation Lookaside Buffer),或聯(lián)想存儲器(Associative Memory)?
快表的工作原理
快表的工作原理類似于系統(tǒng)中的數(shù)據(jù)高速緩存(cache),其中專門保存當(dāng)前進(jìn)程最近訪問過的一組頁表項。
根據(jù)局部性原理,在一個很短的時間段內(nèi),程序的執(zhí)行總是局部于某一個范圍。即進(jìn)程最近訪問過的頁面在不久的將來還可能被訪問。

5.分頁系統(tǒng)地址轉(zhuǎn)換

通過根據(jù)邏輯地址中的頁號,查找快表中是否存在對應(yīng)的頁表項。
若快表中存在該表項,稱為命中(hit),取出其中的頁框號,加上頁內(nèi)偏移量,計算出物理地址。
若快表中不存在該頁表項,稱為命中失敗,則再查找頁表,找到邏輯地址中指定頁號對應(yīng)的頁框號。同時,更新快表,將該表項插入快表中。并計算物理地址


頁面與頁框大小
分頁系統(tǒng)中,頁面 = 頁框。頁框的大小由計算機(jī)的硬件邏輯定義。通常,頁框的大小是2的冪次個字節(jié),且常在512B(29)~4KB(212)之間,典型的頁框大小為1KB。
將頁框大小設(shè)置為2的冪次,可以簡化處理機(jī)中地址變換硬件邏輯的設(shè)計與實現(xiàn)。
影響頁面與頁框大小的主要因素:頁內(nèi)零頭、地址轉(zhuǎn)換速度和頁面交換效率。
較小的頁面有利于減少內(nèi)零頭,從而有利于提高內(nèi)存的利用率。然而,較小的頁面也將導(dǎo)致頁表過大,從而降低處理機(jī)訪問頁表時的命中率(Hit Rate)。
塊越大,內(nèi)/外存之間的數(shù)據(jù)交換效率越高。因此,對于支持交換技術(shù)的系統(tǒng),較大的頁面有利于提高頁面換進(jìn)/換出內(nèi)存的效率。

5.1對分頁存儲管理的評價

徹底消除了外零頭,僅存在很少的內(nèi)零頭, 提高了內(nèi)存利用率。
分頁操作由系統(tǒng)自動進(jìn)行,一個頁面不能實現(xiàn)某種邏輯功能。用戶看到的邏輯地址是一維的,無法調(diào)試執(zhí)行其中的某個子程序或子函數(shù)。
采用分頁技術(shù)不易于實現(xiàn)存儲共享,也不便于程序的動態(tài)鏈接。

5.2?簡單分段存儲管理

基于模塊化程序設(shè)計時,常常需要將一個大任務(wù)劃分成若干相對獨立的子任務(wù),對應(yīng)于子任務(wù)編寫子程序,稱為段(Segment)。
每個子程序可以獨立地編輯、編譯、鏈接和執(zhí)行。
各個子程序由實現(xiàn)的功能決定,長度各不相同。執(zhí)行時,根據(jù)實際需要,將若干子程序鏈接成一個大程序。
基本原理
程序由若干邏輯段組成,每個段有自己的名字和長度。程序的邏輯地址是由段名(段號)和段內(nèi)偏移量決定。每個段的邏輯地址從0開始編址 。

系統(tǒng)采用動態(tài)劃分技術(shù),將物理內(nèi)存動態(tài)地劃分成許多尺寸不相等的分區(qū)。
當(dāng)一個進(jìn)程被裝入物理內(nèi)存時,系統(tǒng)將為該進(jìn)程的每一段獨立地分配一個分區(qū)。同一進(jìn)程的多個段不必存放在連續(xù)的多個分區(qū)中。
分段系統(tǒng)的基本數(shù)據(jù)結(jié)構(gòu)
段表 : 每個進(jìn)程建立一個,用于描述進(jìn)程的分段情況,記載進(jìn)程的各個段到物理內(nèi)存中分區(qū)的映射情況。其中包含段號、段長、段基址以及對本段的存取控制權(quán)限等信息。
空閑分區(qū)表 : 用于記載物理內(nèi)存中的空閑分區(qū)情況。

地址變換和存儲保護(hù)
(1)根據(jù)邏輯地址中的段號檢索進(jìn)程段表,獲得指定段對應(yīng)的段表項;
(2)判斷是否地址越界。比較邏輯地址中的段內(nèi)偏移量與段表項中的段長,若超過段的長度,則產(chǎn)生存儲保護(hù)中斷(該中斷將由操作系統(tǒng)進(jìn)行處理);否則,轉(zhuǎn)(3);
(3)把邏輯地址中的段內(nèi)偏移量與段表表項中的段基址相加,從而得到物理地址。

6.分頁與分段技術(shù)的比較

都采用非連續(xù)存儲,由地址映射實現(xiàn)地址變換。
不同主要表現(xiàn)在:
(1)頁是信息的物理單位,大小固定。段是信息的邏輯單位,各段的長度不固定。每一段都具有一定邏輯含義。
(2)分頁的地址空間是一維的,邏輯地址的劃分由機(jī)器硬件實現(xiàn),對用戶透明。分段的地址空間是二維或多維的,程序員知道段名和段內(nèi)偏移量。
(3)分頁活動源于系統(tǒng)管理物理內(nèi)存的需要,在系統(tǒng)內(nèi)部進(jìn)行,由系統(tǒng)實施,用戶看不見。分段活動源于用戶進(jìn)行模塊化程序設(shè)計的需要,在系統(tǒng)外部進(jìn)行,由用戶實施,用戶是知道的。
?

6.1?簡單段頁式存儲管理?

基本思想:采用分段方法組織用戶程序,采用分頁方法分配和管理內(nèi)存。即,用戶程序可以用模塊化思想進(jìn)行設(shè)計,一個用戶序由若干段構(gòu)成。系統(tǒng)將內(nèi)存劃分成固定大小的頁框,并將程序的每一段分割成若干頁以后裝入內(nèi)存執(zhí)行時。
邏輯地址
在段頁式系統(tǒng)中,進(jìn)程的每一段被進(jìn)一步分割成頁面,段內(nèi)代碼和數(shù)據(jù)地址不再連續(xù)。
邏輯地址由3部分組成:段號、段內(nèi)頁號、頁內(nèi)偏移量,如圖

數(shù)據(jù)結(jié)構(gòu)
用于管理的數(shù)據(jù)結(jié)構(gòu):段表、頁表,如圖:

6.2對段頁式存儲管理方式的評價

綜合了分段和分頁技術(shù)的優(yōu)點,既能有效地利用存儲空間,又能方便用戶進(jìn)行程序設(shè)計。
但是,實現(xiàn)段頁式存儲管理系統(tǒng)需要增加硬件成本,系統(tǒng)的復(fù)雜度和管理開銷也大大增加。
因此,段頁式存儲管理技術(shù)適合于大、中型計算機(jī)系統(tǒng),不太適合小型、微型計算機(jī)系統(tǒng)。

總結(jié)

以上是生活随笔為你收集整理的[OS复习]程序装入技术、简单存储管理技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。