linux cache swap 以及 虛擬記憶體等

2021-09-09 03:09:30 字數 1354 閱讀 2111

提出四個問題及解答:

1)若程序在執行過程中,物理記憶體不足會發生什麼?

2)為何程序在占用物理記憶體不變的情況下,系統的物理記憶體會增加?

3)為何程式的大小大於實際占用的物理記憶體?(假如程式30m,卻只有20m物理記憶體)

4)malloc分配的記憶體,未體現在物理記憶體上?(分配了10m,物理記憶體可能還不足10m)

問題一:

與第乙個問題相關的是乙個swap的概念,簡單來說就是將根據某一演算法將部分物理記憶體頁交換到硬碟或者其他儲存裝置,空出的記憶體頁就可以為程序使用。

1)記憶體頁在此可分為兩種不同屬性,一種為不可寫的記憶體頁(cache、程式的text段,共享庫的記憶體映像以及唯讀資料檔案等),一種為可寫的記憶體頁(程序資料、棧)等。

2)對不可寫的記憶體頁,可以簡單的丟棄,因為記憶體頁中的資料在需要的時候可以重新讀入;對可寫的記憶體頁,在swap時,必須將它儲存在swap file中,後續在使用的時候可以重新讀回。

3)對於如何選擇記憶體頁進行swap,linux採用的演算法是:每個記憶體頁都有乙個年齡,訪問一次更新它的年齡屬性,在swap時選擇年老的記憶體頁進行

問題二:

與第二個問題相關的是cache的概念,一般的平台都會有硬體cache,這是彌合cpu速率和記憶體讀取速率的利器,有了它程式才能執行的夠快。與此問題相關的cache則是乙個cache buffer的概念。

1)buffer cache主要是為塊裝置驅動使用

2)塊裝置資料的讀取效率較低,在讀取是採用預讀部分資料存放在cache中,就可以減少讀取的次數,提高效率。

問題三:

與第三個問題相關的是虛擬儲存的概念,程序在32位linux系統中記憶體位址空間大小為4g,物理記憶體可以遠小於4g(如512m),實現虛擬儲存主要是由linux的記憶體管理完成的(如線性位址到實體地址的對映等)。

1)要解釋問題三,除了虛擬儲存的概念外還需要兩種技術,demand paging技術 和 問題1中的提到的swap

2)程式在開始執行時,開始只分配位址空間,並沒有實際的物理記憶體分配,在需要用到時才分配記憶體頁(demand paging技術),所以不執行的程式部分不會被匯入記憶體。

3)若記憶體不足時會進行swap操作。

問題四:

與第四個問題相關的是延遲分配技術,linux總是認為使用者需要的程序記憶體不是緊要的,在不對此記憶體進行操作的時候,並沒有實際的物理記憶體分配給它。單純的malloc介面只是程序位址空間的乙個說明。

引文:

C map 以value排序,相等以key排序

c 的sort函式只能用於順序容器,比如vector等。對於關聯容器,map set是以key為有序的,unordered map等是無序的。有些情況下我們需要用map的value值來排序,比如說按數值個數排序 c 的sort是有三個引數 void sort randomaccessiterator...

以「事」為中心VS以「人」為中心

企業管理的理念非常多,有的單位看重業績,有的單位看重人才,那麼到底應該如何理解呢?我認為,企業管理的理念主要分為兩類 一類是以做事為中心,也就是業績導向 一類是以員工為中心,也就是人才導向。嚴格來說,這兩類理念其實沒有對錯之分,甚至還彼此依存。沒有業績的人才是沒有價值體現的,沒有人才的業績是後繼乏力...

以優化之名

以優化之名 儲存優化導致表空間誤刪除案例 一人蛇先成,引酒且飲之,乃左手持卮,右手畫蛇曰 吾能為之足!為蛇足者,終亡其酒。戰國策 齊二 嘉招欲復杯中淥,麗唱仍添錦上花。宋 王安石 即事 寧錦上添花,勿畫蛇添足。在很多資料災難中,我們看到很多原本是可有可無的操作,或者是錦上添花的工作,最後卻由於處置不...