11 內存分區與分頁

在第10節已經說到,程序是分段載入內存的,那麼不同的段就要在內存中找不同的空閒地址,即將程序的各個段載入到相應的內存分區。直接的想法是有固定分區和可變分區兩種。固定分區就是將內存等分成K個分區,然後將段插入到空閒的等分分區中去,但每個段的大小不一樣,固定分區顯然會造成空間浪費,因此採用可變分區比較合適,即段大小是多少就去分多大的空間。固定分區與可變分區如下圖所示


一、可變分區的管理過程——核心數據結構
通過已分配分區表和空閒分區表兩張表來記錄分區使用情況。當有段請求時,空閒分區表將改變

如上圖所示,原本內存中已分配了seg1和seg2,空閒分區從地址250k開始,大小爲250K,現有一個100k大小的段請求,於是250k-350k被分配給了新請求段seg3,空閒分區還剩下150k.

同時由於進程可能被換入換出,所以內存中已分配的空間有可能被釋放,因此空閒分區可能存在多段,如下圖所示

那麼當存在多個空間分區時,再來一個段提出內存請求,該選哪個呢


首先適配快,但其他分區就浪費類,最佳分配需要遍歷內存
因此需要引入分頁:解決內存分區導致的內存效率問題

可變分區多次分配以後就會形成內存碎片,當再來一個段請求大於每個單個空間空間時,就需要將內存合併:內存緊縮,內存緊縮需要花費大量時間

因此考慮再將每個段分成多頁,內存也分成很多頁,頁是最小分配單位,這樣每次分配段空間,最多浪費不超過一頁,沒有內存碎片

針對每個段請求,系統一頁一頁的分配給這個段
那麼問題來了,像第10節一樣,每個段在計算物理地址時需要查找段的基址,那麼將段分成頁後,計算物理地址需要查找頁的基址,物理地址=頁基址+邏輯地址。PCB中存在頁表保存每個段的頁分配信息。爲了取分段的頁,我們將內存的頁叫作頁框

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章