機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
讀核日記(七) --linux的內(nèi)存管理機(jī)制(1)
讀核日記(七) --linux的內(nèi)存管理機(jī)制(1)
 更新時(shí)間:2009-8-12 16:54:30  點(diǎn)擊數(shù):0
【字體: 字體顏色

內(nèi)存管理是一個(gè)操作系統(tǒng)必不可少.并且.非常重要的一環(huán).linux的成功.和它優(yōu)秀的內(nèi)存管理聯(lián)系非常密切.因?yàn)橐粋(gè)系統(tǒng)的高效性欲穩(wěn)定性往往決定于它的內(nèi)存管理機(jī)制.我項(xiàng)很多人吃過dos640k 的苦吧.

前面我們介紹了386保護(hù)模式.從今天起我們將在此基礎(chǔ)上,分析linux的虛擬存儲(chǔ)管理,對(duì)每個(gè)程序員來說.他們都希望有無窮大的快速的內(nèi)存,然而,現(xiàn)階段是不可能的,況且,無窮大與快速本身就可能矛盾

為了解決無窮大.linux 引入了虛擬存儲(chǔ)系統(tǒng),為了解決快速,linux 引入了cache ,交換機(jī)制等等,以使的存儲(chǔ)系統(tǒng),在容量上接近硬盤,速度上接近cache.(當(dāng)然,我認(rèn)為這是存儲(chǔ)系統(tǒng)的實(shí)際目的).

Linux 的內(nèi)存管理采取的是分頁機(jī)制.它的設(shè)計(jì)目的是分時(shí)多任務(wù).linux 可同時(shí)處理256個(gè)任務(wù)(這應(yīng)該與某個(gè)變量來定義,一時(shí)想不起來).同時(shí)它采用了兩級(jí)飽和機(jī)制來分別內(nèi)核進(jìn)程與用戶進(jìn)程.

386 保護(hù)模式的0-4G 的線性虛擬地址中,3-4G 是留給內(nèi)核進(jìn)程的.0-3G分給用戶進(jìn)程.內(nèi)核在內(nèi)核空間的尋址不同于用戶進(jìn)程在用戶空間的尋址.因?yàn)閮?nèi)核是在啟動(dòng)時(shí)裝入內(nèi)存的.說以它可以直接吧地址映射到3G 以上.用戶若想訪問內(nèi)核就不許通過swapper_pg_div 中的指針來得到頁表.

相反,用戶進(jìn)程,在用戶空間的尋址是通過所用戶頁目錄中的指針得到用戶的頁表.并通過頁表的指針直接指向相應(yīng)的物理內(nèi)存.

Linux虛擬內(nèi)存的實(shí)現(xiàn),需要幾種不同的機(jī)制來實(shí)現(xiàn):

地址映射機(jī)制

內(nèi)存的分配與回收

請(qǐng)頁機(jī)制

交換機(jī)制

內(nèi)存共享機(jī)制

在具體的讀源碼之前.我們先根據(jù)我們以前學(xué)過的操作系統(tǒng)知識(shí).C語言等知識(shí).來考慮一下,這幾個(gè)機(jī)制如何實(shí)現(xiàn).現(xiàn)自己設(shè)計(jì)一下.在看別人是怎樣實(shí)現(xiàn)的.找到自己想不到.或者對(duì)效率空間有損的地方.這樣才有進(jìn)步.我不止一次的說.操作系統(tǒng)的某一部分,就起實(shí)現(xiàn)來說,非常簡(jiǎn)單.它的難點(diǎn)是如何將大量的功能集成出一個(gè)kernerl.

地址映射機(jī)制,說白了,就是在虛擬內(nèi)存與物理內(nèi)存上的一個(gè)橋梁.它要做的事情可能就是通過幾個(gè)不同的表.把虛擬地址轉(zhuǎn)換成物理地址,把物理地址轉(zhuǎn)化虛擬地址.

我們以前說過.因?yàn)橛邢到y(tǒng)與用戶之分,它必須也要有不同的數(shù)據(jù)結(jié)構(gòu).為了解決速度等問題.它會(huì)有一個(gè)硬件的緩沖區(qū)

對(duì)于它的數(shù)據(jù)結(jié)構(gòu).我們可以先想一下.如虛擬地址的信息,虛擬地址在那個(gè)區(qū)域等等

至于請(qǐng)頁機(jī)制,更好理解.因?yàn)?/font>linux是頁式存儲(chǔ)的.因此必然會(huì)存在空白頁和使用頁.既然是頁.就必然會(huì)存在頁溢出.頁無效(是不是在win98 下經(jīng)常出現(xiàn)類似錯(cuò)誤,當(dāng)然linux的內(nèi)存管理不可能和windows一樣,可基本道理相同).因此.在每一個(gè)頁出錯(cuò).或者該頁存不下多余的數(shù)據(jù)時(shí).就要要求內(nèi)核分配新的頁面

同時(shí).當(dāng)時(shí)用fork() 產(chǎn)生一個(gè)新的進(jìn)程時(shí).也需要分配新的葉面.這一部分大概講的就是進(jìn)程如何向內(nèi)和描述自己需要怎么樣的和多少頁

在我們學(xué)習(xí)<<數(shù)據(jù)結(jié)構(gòu)>>是我們學(xué)了,很多內(nèi)存分配方式,如首次擬和.最佳擬和,最差擬和等等.但是我們可以想象.linux 大概不會(huì)用他們.那就一定是伙伴系統(tǒng)了.因此我們可以對(duì)于伙伴系統(tǒng)的分配,回收的基本算法.回想一下.這樣在讀者一部分源碼時(shí),回有意象不到的收獲.

至于交換機(jī)制.我們也可以現(xiàn)想一想.內(nèi)存中總與很多使用者的頁.如果這些也已經(jīng)把所有的頁都用完了.再分配時(shí)必須把其中的某些頁釋放.釋放那些頁,需要考慮.如最近不用頁.近期少用頁,等等都可以在考慮之中.

這個(gè)算法,大概就是計(jì)算內(nèi)存中使用的頁,什么時(shí)候可以換處.說白了就是為所有的使用頁計(jì)算一個(gè)權(quán)”,而這個(gè)權(quán)就決定了他什么時(shí)候被釋放以換如它的內(nèi)容.需要想的是對(duì)于經(jīng)常使用的頁.可以把它放入cahe.(盡管這一部分對(duì)程序員是透明的,但我們應(yīng)該理解他的原理).

最后的一部分共享內(nèi)存,我想和我門初學(xué)linux編程時(shí),進(jìn)程通訊里面的共享內(nèi)存沒有區(qū)別.大概也就是在它的數(shù)據(jù)結(jié)構(gòu)中加入可以允許不同進(jìn)程訪問的tag 就行了.

以上,只是我們對(duì)linux的內(nèi)存管理機(jī)制的猜測(cè),需要我們做的工作就是具體的讀源碼.更正不正確的猜想.同時(shí)學(xué)習(xí)別人的實(shí)際思路.

從下篇日記開始.我們將分別講解這幾部分的實(shí)現(xiàn)


  • 上一篇: 讀核日記(八) --linux的內(nèi)存管理機(jī)制(2)
  • 下一篇: 讀核日記(六)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1