操作系统:基本分段存储管理方式
虛擬內(nèi)存采用的是分頁技術,也就是將地址空間劃分成固定大小的頁,每一頁再與內(nèi)存進行映射。
下圖為一個編譯器在編譯過程中建立的多個表,有 4 個表是動態(tài)增長的,如果使用分頁系統(tǒng)的一維地址空間,動態(tài)增長的特點會導致覆蓋問題的出現(xiàn)。
?
分段的做法是把每個表分成段,一個段構成一個獨立的地址空間。每個段的長度可以不同,并且可以動態(tài)增長。
?
分頁和分段的主要區(qū)別
a)、頁是信息的物理單位,
分頁是為實現(xiàn)離散分配方式,以消減內(nèi)存的碎片,提高內(nèi)存的利用率;
段則是信息的邏輯單位,它含有一組其意義相對完整的信息,分段的目的是為了能更好地滿足用戶的需要。
b)、頁的大小固定且由系統(tǒng)決定,由系統(tǒng)把邏輯地址劃分為頁號和頁內(nèi)地址兩部分(偏移量),是由機器硬件實現(xiàn)的,因而在系統(tǒng)中只能有一種大小的頁面;而段的長度卻不固定,決定于用戶所編寫的程序,通常由編譯程序在對源程序進行編譯時,根據(jù)信息的性質來劃分。
c)、分頁的作業(yè)地址空間是一維的,即單一的線性地址空間,程序員只需利用一個記憶符,即可表示一個地址;
而分段的作業(yè)地址空間則是二維的,程序員在標識一個地址是,即需給出段名,又需給出段內(nèi)地址。
引入分段存儲管理方式的目的:滿足程序員在編程和使用上多方面的要求。這種存儲管理方式已經(jīng)成為當今所有存儲管理方式的基礎。
1、分段存儲管理方式的引入
主要滿足用戶和程序員以下需求:
1)、方便編程
用戶把自己的作業(yè)按照邏輯管理劃分為若干段,每個段都是從0開始編址,并有自己的名字和長度。因此,希望要訪問的邏輯地址是由段名(段號)和段內(nèi)偏移量(段內(nèi)地址)決定的。
??LOAD1,[A]?|?<D>;//將分段A中D單元內(nèi)的值讀入寄存器1
??STORE1,[B]?|?<C>;//將寄存器1的內(nèi)容存入B分段的C單元中
2)、信息共享
在實現(xiàn)對程序和數(shù)據(jù)的共享時,是以信息的邏輯單位為基礎的。。比如共享某個例程和函數(shù)。分頁系統(tǒng)中的頁只是存放信息的物理單位(塊),并無完整的意義,不便于實現(xiàn)共享;然而段卻是信息的邏輯單位。由此可知,為了實現(xiàn)段的共享,希望存儲管理能與用戶程序分段的組織方式相適應。
3)、信息保護
一般來說一個段中不會既包含一個過程又包含一個堆棧,而是只會包含其中一個。正是因為每個段一種數(shù)據(jù)類型的對象,所以這個段就可以針對當前的數(shù)據(jù)類型進行特定的合適的保護。
4)、動態(tài)增長
有些段,會隨著程序的使用不斷增長。而事先又無法確切地知道數(shù)據(jù)段會增長到多大。
5)、動態(tài)鏈接
動態(tài)鏈接是指在作業(yè)運行前,并不把幾個目標程序段鏈接起來。要運行時,先將主程序所對應的目標程序裝入內(nèi)存并啟動運行,當運行過程中有需要調(diào)用某段時,才將該段調(diào)入內(nèi)存并進行鏈接。可見動態(tài)鏈接也要求以段作為管理的單位。
2、分段系統(tǒng)的基本原理
2.1、分段
在分段存儲管理方式中,作業(yè)的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。例如,有主程序段MAIN、子程序段X、數(shù)據(jù)段D及棧段S等。
在該地址結構中,允許一個作業(yè)最長有64K個段,每個段的最大長度為64KB。
分段方式已得到許多編譯程序的支持,編譯程序能自動地根據(jù)源程序的情況而產(chǎn)生若各個段。
2.1、段表
在動態(tài)分配方式中,系統(tǒng)為整個進程分配一個連續(xù)的內(nèi)存空間。而在分段式存儲管理系統(tǒng)中,則是為每個分段分配一個連續(xù)的分區(qū),而進程中的各個段可以離散地移入內(nèi)存不同的分區(qū)中。為了使程序能正常運行,也能從物理內(nèi)存中找出每個邏輯段所對應的位置,應像分頁那樣,在系統(tǒng)中為每個進程建立一段映射表,簡稱“段表”。每個段在表中占有一個表項。其中記錄了該段在內(nèi)存中的起始地址(基址)和段的長度。段表可以存放在一組寄存器中,以提高訪問速度,但更常見的是將段表放在內(nèi)存中。
在配置了段表后,執(zhí)行中的進程可通過查找段表找到每個段所對應的內(nèi)存區(qū)。可見段表是用于實現(xiàn)從邏輯段到物理內(nèi)存區(qū)的映射:
2.3、地址變換機構
為了實現(xiàn)進程邏輯地址到物理地址的變換功能,在系統(tǒng)中設置了段表寄存器,用于存放段表起始地址和段表長度TL。在進行地址變換時,系統(tǒng)將邏輯地址中的段號S與段表長度TL進行比較。若S>TL,表示段號太大。訪問越界,于是產(chǎn)生越界中斷信號;若未越界,則根據(jù)段表的起始地址和該段的段號+段內(nèi)地址從而到的要訪問的內(nèi)存物理地址。
與分頁系統(tǒng)類似,當段表存放在內(nèi)存中,每要訪問一個數(shù)據(jù),都需要訪問兩次內(nèi)存,類似的,再增設一個聯(lián)想寄存器,用于保存最近常用的段表項。
?
3、信息共享
在分段系統(tǒng)的允許若干個進程共享一個或多個分段,容易實現(xiàn)對段的保存和共享。
可重入代碼又稱為“純代碼”,是一種允許多個進程同時訪問的代碼。為使各個進程所執(zhí)行的代碼完全相同,絕對不允許可重入代碼在執(zhí)行中有任何的改變。在每個進程中,都必須配以局部數(shù)據(jù)區(qū),把在執(zhí)行中可能改變的部分拷貝到該數(shù)據(jù)區(qū),這樣程序在執(zhí)行時,只需對數(shù)據(jù)區(qū)中的內(nèi)容進行修改,并不去改變共享的代碼,這時的可共享代碼級成為可重入碼。
4、段頁式存儲管理方式
結合分頁和分段的優(yōu)點,分頁系統(tǒng)很好解決內(nèi)存的外碎片問題,分段系統(tǒng)有便于實現(xiàn)、分段可共享、易于保護、可動態(tài)鏈接等優(yōu)點。結合這兩種方式形成新系統(tǒng)稱為“段頁式系統(tǒng)”。
4.1、基本原理
先分段,在段內(nèi)進行分頁,為每一個段賦予一個段名。以下展示出了一個作業(yè)地址空間的結構。該作業(yè)有三個段,頁面大小4KB。在段頁式系統(tǒng)中,其地址結構由段號、段內(nèi)頁號及頁內(nèi)地址三部分所組成。
4.2、地址變換過程
為了方便段頁式系統(tǒng)中地址變換的實現(xiàn),需配置一個段表寄存器,其中存放段表起始地址和段表長TL。比較段號與TL是否越界,從段表寄存器中獲取段表始址找到段表,根據(jù)段表內(nèi)的頁表始址找到對應的頁表,在根據(jù)頁表的存儲塊找到內(nèi)存中的物理塊,從而獲取物理地址。
段頁式系統(tǒng)中,為了獲得一條指令或數(shù)據(jù),須三次訪問內(nèi)存:
段表--->頁表--->物理內(nèi)存
① 訪問內(nèi)存中的段表,從中取得頁表始址
② 訪問內(nèi)存中的頁表,從中取出該頁所在的物理塊號,并與頁內(nèi)地址形成物理地址
③ 訪問真正從第二次訪問所得的地址中,取出指令或者數(shù)據(jù)
多次訪問內(nèi)存,執(zhí)行速度降低,因此在地址變換機構中增設一個高速緩沖寄存器。每次訪問它時,都須同時利用段號和頁號去檢索高速緩存,若找到匹配的表項,便可以從中得到相應頁的物理塊號,用來與頁內(nèi)地址一起形成物理地址;若未找到匹配表項,則仍需要再三次訪問內(nèi)存(和頁面管理的TLB的本質是一樣的,在分頁式頁面管理方式中,需要進行兩次內(nèi)存訪問。如果TLB則只需一次)
?
總結
以上是生活随笔為你收集整理的操作系统:基本分段存储管理方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统:基本分页存储管理方式
- 下一篇: 操作系统:连续分配、分页和分段三种存储分