linux核心原始碼學習(5)記憶體頁面的換入換出
---flyli
關於物理頁面的換入換出,其實其主要的目的也就是當實體記憶體不夠使用的時候,將不常用到的記憶體頁面交換到硬碟上,以保證程式能夠正常運行。
在電腦理論裡面時間資源和空間資源是一對矛盾的論題,我們經常可以見到以時間換空間,或者以空間換時間的演算法,其不可單獨評價那種更好,但是在相應的環境下,總有一種更適合我們。
linux中頁面的交換就是一種典型的時間換空間的做法,當我們的記憶體不夠用的時候,我將不用的記憶體移到硬碟上,然後增加我們的記憶體可用空間確實是一種不錯的辦法,雖然由於硬碟的讀寫速度較慢(這就是為什麼同空間的記憶體別硬碟貴那麼多的原因吧),但是慢點總比程式根本打不開要好的多,呵呵
今天讀完了《linux核心原始碼情景分析》關於這個內容的一章,說實話,現在我的記憶體都是2G,運行linux的時候從來都是將虛擬記憶體關掉的,因為我的記憶體使用量量都很少超過1G。。。所以不大想對這一部分的內容進行深入分析,本想為了保證部落格的連續性到網上找篇文章參考下的,最後想想,參考別人的文章複製過來實在沒啥意思,還是自己寫吧,順便記錄下,呵呵。
如同實體記憶體的管理一樣磁碟交換區的管理也有著相應的資料結構對其進行管理,這就是swap_info_struct,該結構包含了一個交換地區的位置,大小,使用方式等資訊,在原始碼中其以數組的形式聲明,通過這個結構體,對所有交換區間進行管理,其具體管理方法還是和記憶體的管理有一定區別的,比如被多個使用者使用的時候,假如對其進行釋放,只會對其記錄使用者數目的個數進行操作,當使用者減少到0的時候才會真正空閑,而記憶體的管理中,假如一個使用者對這段記憶體進行釋放的,而另外使用者還在只用這段記憶體的話,那結果就會出現程式員們最頭疼的問題“段錯誤”,也叫“記憶體溢出”。。。
基本對記憶體交換的方法就說到這了,多的也沒啥說的了,今天到此為止,可以睡覺嘍~~~
今天在公司對一個新的可能的項目進行了評估,效果還不錯,感謝Wubq的協助,還有zouj的協助,不過做完的時候別個都下班走了。。。明天叫他們來看,可能的話要是我負責這個項目就好了,畢竟核心部分我已經做出來了嘛,呵呵,好好工作,多掙錢,早買房,不過理想還是要堅持的,呵呵