1)物理地址:就是內存的地址,是以字節為單位,對內存單元的編址。
2)邏輯地址:用戶源程序經過編譯或匯編后形成的目標指令代碼的編址。
3)地址空間:地址的編址范圍。
4)物理地址空間:內存地址的編址范圍。也就是計算內存的編址范圍,它是由實際的物理內存的大小決定的。
5)邏輯的地址空間:用戶程序指令的編址范圍,是由程序的大小決定的。
一、重定位
(1)重定位:
是把程序的邏輯地址 變成 內存中的實際物理地址空間的過程。靠的是地址變換機構。
(2)靜態重定位
即在程序裝入內存的過程中完成,是指在程序開始運行前,程序中的各個地址有關的項均已完成重定位,地址變換通常是在裝入時一次完成的,以后不再改變,故成為靜態重定位。
(3)動態重定位
它不是在程序裝入內存時完成的,而是CPU每次訪問內存時 由動態地址變換機構(硬件)自動進行把相對地址轉換為絕對地址。動態重定位需要軟件和硬件相互配合完成。
動態重定位技術依賴于地址變換機構。
二、分區管理
單一連續區分配
把內存化成若干個連續的區域,每個連續區叫做一個分區,這種分配方案叫做分區式分配方案。
1.固定式分區
分區大小均等(管理簡單,程序太大運行不了,太小浪費) 、分區大小不等
(1)分區表:
記錄分區號、起始地址、分區大小、占用大小等。
2.可變式分區
分區分配表:記錄已分配分區信息。
空閑分區表:記錄空閑分區信息。
3.分區分配算法
(1)首次適應算法
(2)循環首次適應算法
(3)最佳適應算法
(4)最壞適應算法
4.分區回收
當用戶程序執行結束后,系統要回收已使用完畢的分區,將其記錄在空閑區表中。在收回空間是,應首先檢查是否有與回收區相鄰的空閑區,若有則應合并成一個空閑區,并于空閑表中登記。有四種情況,上相鄰、下相鄰、上下相鄰、上下不相鄰。
①上相鄰:起始地址不變,分區大小相加。
②下相鄰:終止地址不變,分區大小相加。
③上下相鄰:上,起始地址不變;下,終止地址不變。分區大小相加。(空閑區-1)
④上下不相鄰:直接記錄。(空閑區+1)
5.緊縮(拼接、搬家、緊湊)
三、分頁管理(最主要的)
分頁管理1.png
進程的每個頁面離散地分配到了內存中的任意物理塊(頁面對應的物理塊可以是不連續的,靈活性高。)中,使每個頁面對應的物理塊。
核心:頁表。
分頁管理也并未徹底解決:零頭問題(可能存在業內零頭)。
1.頁表
在頁式存儲管理系統中,允許將進程的每一項離散地存儲在內存的任意物理塊中,但系統應能保證進程的正確進行,即能在內存中找到每個頁面所對應的物理塊。為此,系統又為每個進程建立一張頁面映射表,簡稱頁表,在進程地址空間的所有頁,都在頁表中有一個表項,其中記錄了相應頁在內存中所對應的物理塊號。在配置了頁表后,進行執行時,通過查找頁表,即可找到每頁在內存中的物理塊號。可見,頁表的作用是實現從頁號到物理塊號的地址映射。
即使在簡單的頁式存儲管理系統中,也常在頁表的表項中設置一存取控制字段,用于對該存儲塊的內容進行保護,當存取控制字段僅有一位時,可用來規定該存儲塊中的內容是允許讀/寫、還是只讀;若存儲控制字段威二位,則可規定為讀/寫、只讀和只執行等存取方式。如果有一個進程試圖去寫一個只允許讀的存儲塊時,則將引起操作系統的一次中斷。如果要利用頁式存儲管理系統區實現虛擬存儲器,則還需要增加一數據項。
頁表.png
2.頁 碼 與 偏 移 量(重點)
頁碼與偏移量:A:邏輯地址。L:頁面大小。
P(頁號)=INT[A/L] ,
d(偏移量)=[A] MOD L
3.地址變換(重點)
頁號p 小于 總頁數時,頁表f = 頁號p。
4.快表
快表是一種特殊的高速緩沖存儲器(Cache),內容是頁表中的一部分或全部內容。
在操作系統中引入快表是為了加快地址映射速度。
在虛擬頁式存儲管理中設置了快表,作為當前進程頁表的Cache。通常快表處于MMU(內存管理單元https://baike.baidu.com/item/MMU/4542218?fr=aladdin
)中。
5.快表與頁表的區別和聯系
頁表指出邏輯地址中的頁號與所占主存物理塊號的對應關系。頁式存儲管理在用動態重定位方式裝入作業時,要利用頁表做地址轉換工作。
快表就是存放在高速緩沖存儲器的部分頁表。作為頁表的Cache,它的作用與頁表相似,但是提高了訪問速率。由于采用頁表做地址轉換,讀寫內存數據時CPU要訪問兩次主存。有了快表,有時只要訪問一次高速緩沖存儲器,一次主存,這樣可加速查找并提高指令執行速度。
缺點:
分頁系統存在的一個無法容忍,同時也是分頁系統無法解決的一個缺點就是:一個進程只能占有一個虛擬地址空間。在此種限制下,一個程序的大小至多只能和虛擬空間一樣大,其所有內容都必須從這個共同的虛擬空間內分配。
四、分段管理
1.概念
為每一個段分配一個連續的內存分區,段與段之間可以不連續,段在內存中的位置通過段表來描述。
分段管理就是將一個程序按照邏輯單元分成多個程序段,每一個段使用自己單獨的虛擬地址空間。例如,對于編譯器來說,我們可以給其5個段,占用5個虛擬地址空間,并分配一段連續的地址空間(段內要求連續,段間不要求連續,因此整個作業的地址空間是二維的)。
如此,一個段占用一個虛擬地址空間,不會發生空間增長時碰撞到另一個段的問題,從而避免因空間不夠而造成編譯失敗的情況。如果某個數據結構對空間的需求超過整個虛擬之地所能夠提供的空間,則編譯仍將失敗。不過出現這種可能的概率恐怕不會比太陽從西邊出來的概率高出多少。
在頁式系統中,邏輯地址的頁號和頁內偏移量對用戶是透明的,但在段式系統中,段號和段內偏移量必須由用戶顯示提供,在髙級程序設計語言中,這個工作由編譯程序完成。
2.段表
每個進程都有一張邏輯空間與內存空間映射的段表,其中每一個段表項對應進程的一個段,段表項記錄該段在內存中的起始地址和段的長度。
在配置了段表后,執行中的進程可通過查找段表,找到每個段所對應的內存區。可見,段表用于實現從邏輯段到物理內存區的映射,
3.地址變換
4.信息共享
分段系統的一個突出優點,是易于實現段的共享,對段的保護也十分簡單。
段式管理信息共享.png
5.分段內存管理的優缺點
【優點】:
每個邏輯單元可單獨占用一個虛擬地址空間,這樣使得編寫程序的空間大為增長。
由于段式按邏輯關系劃分,因此信息共享起來十分方便。
對于空間稀疏的程序來說,分段管理將節省大量的空間。
【缺點】:
- 存在外部碎片,一個段必須全部加載到內存。
五、分頁與分段的主要區別
頁式系統中,邏輯地址的頁號和頁內偏移量對用戶是透明的,但在段式系統中,段號和段內偏移量必須由用戶顯示提供。
分頁是一維地址空間,分段是二維的(段內和段間)。
頁的大小不可變,段的大小可以動態改變。
頁和段都有存儲保護機制。但存取權限不同:段有讀、寫和執行三種權限;而頁只有讀和寫兩種權限。
六、段頁式管理
在段頁式系統中,為了便于實現地址變換,須配置一個段表寄存器,其中存放段表始址和段表長TL。進行地址變換時,首先利用段號S,將它與段表長TL進行比較。若S<TL,表示未越界,于是利用段表始址
和段號來求出該段所對應的段表項在段表中的位置,從中得到該段的頁表始址,并利用邏輯地址中的段內頁號P來獲得對應頁的頁表項位置,從中讀出該頁所在的物理塊號b,再利用塊號b和頁內地址來構成物理地址。右圖示出了段頁式系統中的地址變換機構。
在段頁式系統中,為了獲得一條指令或數據,須三次訪問內存。第一次訪問是訪問內存中的段表,從中取得頁表始址;第二次訪問是訪問內存中的頁表,從中取出該頁所在的物理塊號,并將該塊號與頁內地址一起形成指令或數據的物理地址;第三次訪問才是真正從第二次訪問所得的地址中,取出指令或數據。
顯然,這使訪問內存的次數增加了近兩倍。為了提高執行速度,在地址變換機構中增設一個高速緩沖寄存器。每次訪問它時,都須同時利用段號和頁號去檢索高速緩存,若找到匹配的表項,便可從中得到相應頁的物理塊號,用來與頁內地址一起形成物理地址;若未找到匹配表項,則仍須再三次訪問內存。