簡體   English   中英

用於分配存儲器頁面和頁面表的算法

[英]Algorithm for allocating memory pages and page tables

我想設計一個分配和釋放內存頁面和頁面表的算法。 哪些數據結構可以實現最佳性能和最簡單的實現?

不出所料,最常見的算法和數據結構稱為頁表 最基本的是,它由一個數組映射虛擬地址空間塊到物理地址空間塊; 未分配的頁面設置為null。 當進程嘗試訪問未映射的內存時,系統會獲取以前未使用的物理內存塊並將其映射到頁表中。

由於大多數虛擬內存空間對於單級頁面表而言太大(具有4k頁面的32位機器將需要32位*(2 ^ 32字節/ 4千字節)=每個虛擬地址空間4兆字節,而64位數據庫將需要需要指數級更多),使用多級頁表:頂級包含指向第二級頁表的指針,指向物理內存的實際區域(可能具有更多的間接級別)。 這允許系統在大面積地址空間未使用時節省頁面表上的內存。

即使OS通常實現頁表,更簡單的解決方案可能是這樣的。

將一個大的連續內存作為數組。 分配一些內存時,請在存儲數組索引和數據部分長度的鏈表中維護該信息。

在構建鏈接列表時,請確保它在索引上排序。

如果要分配內存,請掃描鏈表,這將需要O(N)。 其中N是已經完成的分配。

刪除將掃描特定索引的數組並刪除鏈接列表中的節點。

刪除節點后,請使用包含這些空閑分配的單獨鏈接列表。

插入將如下所示。 1.如果請求的大小列表中有元素,請檢入空閑列表。 2.如果不是,請在鏈表的最后一個元素之后分配內存

刪除將像這樣工作,1。將節點移動到空閑列表。

確保空閑列表和鏈表在索引上排序。

這種方法沒有解決內存分配器中的碎片問題。一種簡單的方法是使用壓縮。 定期掃描自由節點鏈表,並為每個元素移動數組中的元素,並相應地更新鏈表中節點的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM