存储管理之页式、段式、段页式存储
首先看一下“基本的存儲(chǔ)分配方式”種類:
??????
1.??離散分配方式的出現(xiàn)
由于連續(xù)分配方式會(huì)形成許多內(nèi)存碎片,雖可通過“緊湊”功能將碎片合并,但會(huì)付出很大開銷。于是出現(xiàn)離散分配方式:將一個(gè)進(jìn)程直接分散地裝入到許多不相鄰的內(nèi)存分區(qū)中。
?????? 下面主要介紹“離散分配”三種方式的基本原理以及步驟:
2.??基本分頁存儲(chǔ)
2.1.???????步驟
3?邏輯空間等分為頁;并從0開始編號(hào)
3?內(nèi)存空間等分為塊,與頁面大小相同;從0開始編號(hào)
分配內(nèi)存時(shí),以塊為單位將進(jìn)程中的若干個(gè)頁分別裝入到多個(gè)可以不相鄰接的物理塊中。
2.2.???????地址結(jié)構(gòu)
?????? 分兩部分:頁號(hào)、位移量(業(yè)內(nèi)地址)
?????? 業(yè)內(nèi)地址的位數(shù)可以決定頁的大小(如上圖每頁大小為4K)。
邏輯地址=頁號(hào)&位移量(&號(hào)是連接符號(hào),是將頁號(hào)作為邏輯地址的最高位)
2.3.???????地址映射(邏輯地址--->物理地址)
如下圖所示:(物理地址=塊號(hào)&塊內(nèi)地址)
?
因?yàn)閴K的大小=頁的大小,所以塊內(nèi)位移量=頁內(nèi)位移量,所以只需求出塊號(hào)即可:
如何求塊號(hào)呢?頁表來幫你
頁表:
給定一個(gè)邏輯地址和頁面大小,如何計(jì)算物理地址?
1)???????根據(jù)頁面大小可計(jì)算出頁內(nèi)地址的位數(shù)
2)???????頁內(nèi)地址位數(shù)結(jié)合邏輯地址計(jì)算出頁內(nèi)地址(即,塊內(nèi)地址)和頁號(hào)
3)???????頁號(hào)結(jié)合頁表,即可得出塊號(hào)
4)???????塊號(hào)&塊內(nèi)地址即可得出物理地址
?
2.4.???????地址變換原理及步驟
?
請看上圖,給出邏輯地址的頁號(hào)和頁內(nèi)地址,開始進(jìn)行地址變換:
1)???????在被調(diào)進(jìn)程的PCB中取出頁表始址和頁表大小,裝入頁表寄存器
2)???????頁號(hào)與頁表寄存器的頁表長度比較,若頁號(hào)大于等于頁表長度,發(fā)生地址越界中斷,停止調(diào)用,否則繼續(xù)
3)???????由頁號(hào)結(jié)合頁表始址求出塊號(hào)
4)???????塊號(hào)&頁內(nèi)地址,即得物理地址
?
?
以上即為頁式存儲(chǔ)的原理及整個(gè)過程……
?
3.?? 基本分段存儲(chǔ)
3.1.???????步驟
3?邏輯空間分為若干個(gè)段,每個(gè)段定義了一組有完整邏輯意義的信息(如主程序Main()),如:
內(nèi)存空間為每個(gè)段分配一個(gè)連續(xù)的分區(qū)
?
段的長度由相應(yīng)的邏輯信息組的長度決定,因而各段長度不等,引入分段存儲(chǔ)管理方式的目的主要是為了滿足用戶(程序員)在編程和使用上多方面的要求。
要注重理解,完整的邏輯意義信息,就是說將程序分頁時(shí),頁的大小是固定的,只根據(jù)頁面大小大小死生生的將程序切割開;而分段時(shí)比較靈活,只有一段程序有了完整的意義才將這一段切割開。(例如將一個(gè)人每隔50厘米切割一段,即為分頁;而將一個(gè)人分割為頭部、身體、腿部(有完整邏輯意義)三段,即為分段)
?
3.2.???????地址結(jié)構(gòu)
?????? 分兩部分:段號(hào)、位移量(段內(nèi)地址)
3? 段內(nèi)地址的位數(shù)可以決定段的大小
3? 邏輯地址=段號(hào)&段內(nèi)地址(&號(hào)是連接符號(hào),是將段號(hào)作為邏輯地址的最高位)
3.3.???????地址映射(邏輯地址--->物理地址)
如下圖所示:(物理地址=基址+段內(nèi)地址)(注意為+號(hào),而不是&號(hào))
由上圖可知若想求物理地址,只需求出基址即可:
?
如何求基址呢?段表來幫你
段表:
?
求基址的過程與頁式存儲(chǔ)中求塊號(hào)的過程原理相同,這里需要注意的是,物理地址是基址+段內(nèi)地址,而不是基址&段內(nèi)地址,由邏輯地址得到段號(hào)、段內(nèi)地址,再根據(jù)段號(hào)和段表求出基址,再由基址+段內(nèi)地址即可得物理地址。
?
3.4.???????地址變換原理及步驟
請看上圖,給出邏輯地址的段號(hào)和段內(nèi)地址,開始進(jìn)行地址變換:
1)???????在被調(diào)進(jìn)程的PCB中取出段表始址和段表長度,裝入控制寄存器
2)???????段號(hào)與控制寄存器的頁表長度比較,若頁號(hào)大于等于段表長度,發(fā)生地址越界中斷,停止調(diào)用,否則繼續(xù)
3)???????由段號(hào)結(jié)合段表始址求出基址
4)???????基址+段內(nèi)地址,即得物理地址
?
以上即為段式存儲(chǔ)的原理及整個(gè)過程……
?
分頁和分段的主要區(qū)別:
4.??基本段頁式存儲(chǔ)
4.1.???????步驟
3 用戶程序先分段,每個(gè)段內(nèi)部再分頁(內(nèi)部原理同基本的分頁、分段相同)
4.2.???????地址結(jié)構(gòu)
?????? 分三部分:段號(hào)、段內(nèi)頁號(hào)、頁內(nèi)地址
4.3.???????地址映射(邏輯地址--->物理地址)
3?邏輯地址----- >段號(hào)、段內(nèi)頁號(hào)、業(yè)內(nèi)地址
3 段表寄存器--- >段表始址
3 段號(hào)+段表始址---- >頁表始址
3 頁表始址+段內(nèi)頁號(hào)----->存儲(chǔ)塊號(hào)
3 塊號(hào)+頁內(nèi)地址------>物理地址
?
4.4.???????地址變換原理及步驟
請看上圖,給出邏輯地址的段號(hào)、頁號(hào)、頁內(nèi)地址,開始進(jìn)行地址變換:
1)???????在被調(diào)進(jìn)程的PCB中取出段表始址和段表長度,裝入段表寄存器
2)???????段號(hào)與控制寄存器的頁表長度比較,若頁號(hào)大于等于段表長度,發(fā)生地址越界中斷,停止調(diào)用,否則繼續(xù)
3)???????由段號(hào)結(jié)合段表始址求出頁表始址和頁表大小
4)???????頁號(hào)與段表的頁表大小比較,若頁號(hào)大于等于頁表大小,發(fā)生地址越界中斷,停止調(diào)用,否則繼續(xù)
5)???????由頁表始址結(jié)合段內(nèi)頁號(hào)求出存儲(chǔ)塊號(hào)
6)???????存儲(chǔ)塊號(hào)&頁內(nèi)地址,即得物理地址
?
以上即為段頁式存儲(chǔ)的原理及整個(gè)過程……
?
5.??總結(jié)
在頁式、段式存儲(chǔ)管理中,為獲得一條指令或數(shù)據(jù),須兩次訪問內(nèi)存;而段頁式則須三次訪問內(nèi)存
轉(zhuǎn)載于:https://www.cnblogs.com/muyangshaonian/p/9650514.html
總結(jié)
以上是生活随笔為你收集整理的存储管理之页式、段式、段页式存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css设置技巧
- 下一篇: Oracle GoldenGate Lo