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