宋強 8263 字 2個月前

存儲管理

(6 / 8)
⚡ 登入後報錯可獲 3天VIP 免廣告——立即登入

三個途徑來減少係統中使用的物理頁麵的個數:

減少緩衝與頁麵cache的大小,

將係統V類型的內存頁麵交換出去,

換出或者丟棄頁麵。

如果係統中空閒頁麵數低於free_pages_low,核心交換後台進程將在下次運行之前釋放6個頁麵。否則它隻釋放3個。以上三種方法將依次使用直到係統釋放出足夠的空閒頁麵。當核心交換後台進程試圖釋放物理頁麵時它將記錄使用的最後一種方法。下一次它會首先運行上次最後成功的算法。

當釋放出足夠頁麵後,核心交換後台進程將再次睡眠到下次定時器到時。如果導致核心交換後台進程釋放頁麵的原因是係統中的空閒頁麵數小於free_pages_low,則它隻睡眠平時的一半時間。一旦空閒頁麵數大於free_pages_low則核心交換進程的睡眠時間又會延長。

減少PageCache和BufferCache的大小

PageCache和Buffercache中的頁麵將被優先考慮釋放到free_area數組中。PageCache中包含的是內存映射文件的頁麵,其中有些可能是不必要的,它們浪費了係統的內存。而BufferCache中包含的是從物理設備中讀寫的緩衝數據,有些可能也是不必要的。當係統中物理頁麵開始耗儘時,從這些cache中丟棄頁麵比較簡單(它不需要象從內存中交換一樣,無須對物理設備進行寫操作)。除了會使對物理設備及內存映射文件的訪問速度降低外,頁麵丟棄策略沒有太多的副作用。如果策略得當,則所有進程的損失相同。

每次核心交換後台進程都會嘗試去壓縮這些cache。

它首先檢查mem_map頁麵數組中的頁麵塊看是否有可以從物理內存中丟棄出去的。當係統中的空閒頁麵數降低到一個危險水平時,核心後台交換進程頻繁進行交換,則檢查的頁麵塊一般比較大。檢查的方式為輪轉,每次試圖壓縮內存映象時,核心後台交換進程總是檢查不同的頁麵塊。這是眾所周知的clock算法,每次在整個mem_map頁麵數組中對頁麵進行檢查。

核心後台交換進程將檢查每個頁麵看是否已經被pagecache或者buffercache緩衝。讀者可能已經注意到共享頁麵不在被考慮丟棄的頁麵之列,這種頁麵不會同時出現在這兩種cache中。如果頁麵不在這兩者中任何一種之中時,它將檢查mem_map頁麵數組中的下一個頁麵。

緩存在buffercache(或者頁麵中的緩衝被緩存)中的頁麵可以使緩衝分配和回收更加有效。內存壓縮代碼將力圖釋放在受檢頁麵中包含的緩衝區。

如果頁麵中包含的所有緩衝區都被釋放,這個頁麵也將被釋放。如果受檢頁麵在Linux的pagecache中,則它會從pagecache中刪除並釋放。

如果釋放出來了足夠的頁麵,核心交換後台進程將等待到下一次被喚醒。這些被釋放的頁麵都不是任何進程虛擬內存的一部分,這樣無須更新頁表。如果沒有足夠的緩衝頁麵丟棄則交換進程將試圖將一些共享頁麵交換出去。

換出係統V內存頁麵

係統V共享內存是一種用來在進程之間通過共享虛擬內存來實現進程通訊的機製。進程是如何共享內存將在IPC一章中詳細討論。現在隻需要說明係統V共享內存的任何區域都可以用一個shmid_ds數據結構來表示就足夠了。此結構包含一個指向vm_area的鏈表指針,vm_area是為每個共享此虛擬內存區域設計的結構。它們之間通過vm_next_shared和vm_prev_shared指針來連接。每個shmid_ds數據結構包含一個頁表入口,每個入口描敘物理頁麵與共享虛擬頁麵之間的映射關係。

核心交換後台進程同樣使用clock算法來將係統V共享內存頁麵交換出去。

每次運行時,它要記得哪個共享虛擬內存區域的哪個頁麵是最後一個被交換出去的。兩個索引可以協助它完成這項工作,其一是一組shmid_ds數據結構的索引,另一個是係統V共享內存區域的頁表入口鏈表的索引。這能夠保證對係統V共享內存區域作出公平的選擇。

節章整完看查𝐰𝐭.𝐩𝐨𝐨到請

。引索口入表頁的域區存內享共V統係對個一及以引索的構結據數sd_dimhs組一於應對個一含包中式格的口入表頁享共V統係出換。一減將數戶用的麵頁享共和口入表頁出換樣這,效無成變轉其將以可它,的效有是口入表頁程進的麵頁的存內享共V統係此應對果如。)構結據數tcurts_aera_mv過通(們它到找中口入表頁的中表頁的程進享共個每在以可程進台後換交心核,麵頁享共的去出換交要個每於對。中件文換交在而存內在再不麵頁示表以表頁的有所改修時同須必程進台後換交心核,中表頁的程進域區存內擬虛此享共有所在存保被號框麵頁理物的存內擬虛享共V統係的定給於對於由

。用有分十息信些這,時存內理物入帶被新重麵頁當。移偏的中件文在麵頁出換到找能還時同,引索的件文換交的開打組一含包它是但效無然雖口入表頁出換。替代口入表頁出換被也口入表頁的中表鏈構結據數sd_dimhs的域區存內享共V統係此向指樣同。中件文換交到寫被以可麵頁享共則0為數記的麵頁此後改修被都表頁的程進享共有所果如

麵頁棄丟和出換

。去出換交合適最誰認確以程進個每的中統係查檢次依程進台後換交

。去中件文換交統係到換交中存內理物從會才麵頁的索檢法無據數的含包些那有隻。程進的中存內在麵頁個幾者或個一有隻且並)的去出換交被可不是些有(去出換交被以可些那是者選候的好較比

。可即存內入讀中件文象映行執可從要需隻,時們它用引次再程進當。以可就棄丟接直麵頁些這。去中件文換交到寫會不決以所,改修身本象映被能不令指行執可的中象映,如例。來出讀重易容很以可且並出讀中件文象映從以可都容內多許的象映行執可

出換交被要將了定確旦一


✅ 付款功能已修復,現在可以正常購買了 — 支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
😤 廣告總在最入戲的時候跳出來?
月付 $5 USD,升級 VIP 後全站所有頁面廣告立即全關——
不是只有這本書,是整個 oop.tw 每一頁、每一章,從此一路讀到底不被打斷。 $5 USD ≈ 一杯珍奶的錢,換一整個月零廣告清爽閱讀 · 隨時可取消
✅ 全站廣告全關 ✅ 工口專區全本解鎖 ✅ 月卡 $5 USD · 季卡 $13 USD · 年卡 $45 USD
⭐ 登入 / 免費註冊後升級
加我 LINE 好友,分享好書不錯過
第一時間獲得新書推薦、書單更新通知
立即加入
上一頁 書頁/目錄
/ 8 頁
下一頁
為本書評分(每位讀者可評一次,提交後無法修改)
發表評論
以 匿名讀者 身份發表
讀者評論