操作系统原理 : 非连续的内存分配,分段,页表
非連續的內存分配通常,分段和分頁兩種方式
由于連續的內存分配方式存在碎片問題。非連續的內存分配就可以充分利用內存碎片,主要存在的問題就是開銷,如果碎片多尋址效率會比較慢。
目錄
一、分段
二、分頁機制
三、頁表
四、二級頁表和多級頁表
五、反向頁表
一、分段
?
1)分段地址空間
數據是由段存儲,根據應用執行的特點可以將段進行分類:例如文件頭,代碼段、數據段、符號表、堆、棧等。采用分段管理方式,就是將段進行分類區分管理。
?
2)分段尋址方法
分段尋址方法即根據邏輯地址空間映射到物理地址空間。將單位邏輯地址分成兩部分,第一部分是段號,第二部分是段內的偏移。 段號可在段表里找到物理內存中對應的起始地址,然后在這起始地址上加上段偏移量,得到程序的內存空間起始位置。在段表里除了物理內存對應的起始地址還包含該段的最大長度限制信息,如果訪問越界則訪問非法(段錯誤異常)
二、分頁機制
1)分頁地址空間
?分頁和分段一樣,將單位邏輯地址分成兩部分,也需要有一個頁號和頁偏移。區別在于一個頁的大小不可變,是固定的。它的大小是2的冪。例如512,1024,2048.。。。。 頁號偏移的大小和頁幀偏移的大小是一致的。
頁幀是一種物理內存的組織和布局方式,頁是邏輯地址的尋址方式。頁幀也有頁幀號和鎮內偏移,物理地址也就可以得出來。例如在一個16bit的地址空間其中9bit是頁幀偏移,剩下7bit表示頁幀號當物理地址二元組表示是(3,6)對應的地址是1542
(邏輯)頁映射到(物理)頁幀,頁是連續的虛擬內存而頁幀是非連續的虛擬內存,由助于減小內存碎片的產生,并不是所有的頁都有對應的幀,邏輯地址要步物理內存地址來的多,有些邏輯地址的頁號并不能在頁表中找到對應的幀號。通常只需要從邏輯地址的頁號在頁表上查詢到幀號,得到幀號。又因為頁號偏移的大小和頁幀偏移的大小也是一致。從而得到物理內存的空間。?
?
三、頁表
頁表數據結構,就相當于一個大數組,頁號就相當于數組的索引,這個大數組里面存放的就是幀號。通過邏輯頁號算出索引值從而得到幀號,外加上邏輯偏移地址就可以找到物理地址。其中標志位中resident表示該頁號是否存在,如果是0則表示沒有可映射的物理內存頁號。頁表的建立是由操作系統來完成的,頁表也是需要占用內存空間的。
例如:邏輯地址空間有16bit ,意味者2^16 B = 64K的邏輯地址空間,但是物理空間只有32K,頁大小1k。邏輯頁有由元式表示 (4,0),說明頁號是4,偏移量是? 0,經過PTBR運算得到在頁表中flags=100 , resident位是0,則表示該頁號沒有可對應的物理內存,得到一個內存訪問異常。
同理邏輯頁由二元式表示 (3,1023),說明頁號是3,偏移量是?1023,經過PTBR運算得到在頁表中flags=011 ,對應的幀號frameNum = 00100=4, 所以對應的物理內存是? (4,1023),由于頁幀號5bit,頁偏移量是10bit 所以對應的物理內存值是? 2^10 * 4? + 1023? ?=5199
頁表也是需要占用內存空間的。假如64位的機器,每頁1024字節,用一個頁表來完成邏輯地址到物理地址的映射,則需要 2^64 / 1024? =2^54 個映射關系,意味著如果想要盡可能映射邏輯地址,可能頁表會放的跟大。其次一臺計算機上可能會有多個應用程序在執行,每個應用程序都要求自己的一套頁表,所以一般的計算機很難完成用單個頁表的完成映射。其次要考慮的是時間開銷問題,因為頁表也是存儲在內存中,頁表訪問方式相當于至少訪問兩次物理內存?對于時間上的開銷其中一種方式就是CPU上的緩存機制,還有一種方式就是間接訪問的方式。
CPU的塊表(TLB),把經常訪問的頁號存到TLB,如果命中則直接在CPU中取,如果沒命中再到內存頁表中取,取完后更新塊表。注意這個取TLB的過程是由CPU完成,而TLB未命中后的操作由操作系統完成。
四、二級頁表和多級頁表
一般的計算機很難完成用單個頁表的完成映射,可以用多級頁表完成。即只有最后一級的頁表項存的是頁幀,而第一級開始當作頁表的索引,頁表項存的是下級頁表的起始地址。當然resident標志在索引層頁表是可以省略的。雖然頁表增多,但是到最后的偏移量是不變的。多級頁表在相同的內存空間下增加了多層級的訪問映射,層級雖多,但是頁表總大小要比單一頁表大小來的少得多,當然訪問時間的開銷就會變得大。
五、反向頁表
有沒有一種方法讓,頁表的空間大小和邏輯地址頁號沒有直接的關系,盡量和物理地址空間的頁號建立映射關系,這么做的好處就是占用地址空間相對較少。那么這種方案需要考慮的問題就是CPU獲取邏輯地址時怎么樣去取物理地址?
可以利用當前程序運行的進程號Pid 和CPU獲取到的頁表號通過一個簡單的hash函數得到一個頁幀號。組織結構沒變、當然hash函數最好通過硬件計算(PTBR頁表基址寄存器)來實現,此方法需要考慮的時鍵值沖突的問題。
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的操作系统原理 : 非连续的内存分配,分段,页表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统原理:连续的内存分配
- 下一篇: 操作系统原理:页置换算法,FIFO,LR