【操作系统】连续内存分配策略
最為簡單的內(nèi)存分配方法之一就是將內(nèi)存分為多個固定大小的分區(qū)。每個分區(qū)只能容納一個進程。
為此,操作系統(tǒng)有一個表用于記錄哪些內(nèi)存可用和哪些內(nèi)存已用。
一開始,所有內(nèi)存都可用于用戶進程,因此能夠作為一個大塊可用內(nèi)存,稱為孔。通常,一組不同大小的孔分散在內(nèi)存中。
當(dāng)有新進程需要內(nèi)存時,為該進程查找足夠大的孔。
如果找到,可以為該進程分配所需的內(nèi)存,未分配的可以下次再用。
如果孔太大,那么就分為兩塊:一塊分配給新進程,另一塊還回到孔集合。當(dāng)進程終止時,它將釋放其內(nèi)存,該內(nèi)存將還給孔集合。
如果新孔與其它孔相鄰,那么將這些孔合并成大孔。這時,系統(tǒng)可以檢查是否有進程在等內(nèi)存空間,新合并的內(nèi)存空間是否滿足等待進程。
從一組可用孔中選擇一個空閑孔的最為常用方法有:
- 首次適應(yīng)(firsr-fit):分配第一個足夠大的孔。
- 最佳適應(yīng)(best-fit):分配最小的足夠孔。
- 最差適應(yīng)(worst-fit):分配最大的孔。
模擬結(jié)果顯示首次適應(yīng)核最好適應(yīng)在執(zhí)行時間和利用空間方面都好于最差適應(yīng)。首次適應(yīng)和最好適應(yīng)在利用空間方面難分伯仲,但是首次適應(yīng)要快些。
首次適應(yīng)算法的統(tǒng)計說明,不管是用什么優(yōu)化,都會有1/3的內(nèi)存稱為外部碎片而不能使用,這一特性稱為50%規(guī)則。
這些算法都有外部碎片。隨著進程裝入和移出內(nèi)存,自由內(nèi)存空間被分為小片段。當(dāng)所有總的內(nèi)存之和可以滿足請求,但并不連續(xù)時,就出現(xiàn)了外部碎片問題。
通常將內(nèi)存以固定大小的塊為單元來分配。采用這種方案,進程所分配的內(nèi)存可能比所需要的要大。這兩個數(shù)字之差稱為內(nèi)部碎片,這部分內(nèi)存在分區(qū)內(nèi),而又不能用。
一種解決外部碎片問題的方法是緊縮。緊縮的目的是移動內(nèi)存內(nèi)容,以便所有空閑空間合并成一整塊。緊縮是有一定條件的,要求重定位是動態(tài)的。
另一種可能解決外部碎片問題的方法是允許物理地址空間為非連續(xù),這樣只要有物理內(nèi)存就可為進程分配。
總結(jié)
以上是生活随笔為你收集整理的【操作系统】连续内存分配策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:刘强强(1992-),男,贵州大学
- 下一篇: C#连接sql server