亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 127905 | 回復(fù): 130
打印 上一主題 下一主題

Linux內(nèi)存:內(nèi)存管理的實質(zhì) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-05-19 21:04 |只看該作者 |倒序瀏覽
1. 內(nèi)核初始化:

    * 內(nèi)核建立好內(nèi)核頁目錄頁表數(shù)據(jù)庫,假設(shè)物理內(nèi)存大小為len,則建立了[3G--3G+len]::[0--len]這樣的虛地址vaddr和物理地址paddr的線性對應(yīng)關(guān)系;
    * 內(nèi)核建立一個page數(shù)組,page數(shù)組和物理頁面系列完全是線性對應(yīng),page用來管理該物理頁面狀態(tài),每個物理頁面的虛地址保存在page->virtual中;
    * 內(nèi)核建立好一個free_list,將沒有使用的物理頁面對應(yīng)的page放入其中,已經(jīng)使用的就不用放入了;

2. 內(nèi)核模塊申請內(nèi)存vaddr = get_free_pages(mask,order):

    * 內(nèi)存管理模塊從free_list找到一個page,將page->virtual作為返回值,該返回值就是對應(yīng)物理頁面的虛地址;
    * 將page從free_list中脫離;
    * 模塊使用該虛擬地址操作對應(yīng)的物理內(nèi)存;

3. 內(nèi)核模塊使用vaddr,例如執(zhí)行指令mov(eax, vaddr):

    * CPU獲得vaddr這個虛地址,利用建立好的頁目錄頁表數(shù)據(jù)庫,找到其對應(yīng)的物理內(nèi)存地址;
    * 將eax的內(nèi)容寫入vaddr對應(yīng)的物理內(nèi)存地址內(nèi);

4. 內(nèi)核模塊釋放內(nèi)存free_pages(vaddr,order):

    * 依據(jù)vaddr找到對應(yīng)的page;
    * 將該page加入到free_list中;

5. 用戶進(jìn)程申請內(nèi)存vaddr = malloc(size):

    * 內(nèi)存管理模塊從用戶進(jìn)程內(nèi)存空間(0--3G)中找到一塊還沒使用的空間vm_area_struct(start--end);
    * 隨后將其插入到task->mm->mmap鏈表中;

6. 用戶進(jìn)程寫入vaddr(0-3G),例如執(zhí)行指令mov(eax, vaddr):

    * CPU獲得vaddr這個虛地址,該虛地址應(yīng)該已經(jīng)由glibc庫設(shè)置好了,一定在3G一下的某個區(qū)域,根據(jù)CR3寄存器指向的current->pgd查當(dāng)前進(jìn)程的頁目錄頁表數(shù)據(jù)庫,發(fā)現(xiàn)該vaddr對應(yīng)的頁目錄表項為0,故產(chǎn)生異常;
    * 在異常處理中,發(fā)現(xiàn)該vaddr對應(yīng)的vm_area_struct已經(jīng)存在,為vaddr對應(yīng)的頁目錄表項分配一個頁表;
    * 隨后從free_list找到一個page,將該page對應(yīng)的物理頁面物理首地址賦給vaddr對應(yīng)的頁表表項,很明顯,此時的vaddr和paddr不是線性對應(yīng)關(guān)系了;
    * 將page從free_list中脫離;
    * 異常處理返回;
    * CPU重新執(zhí)行剛剛發(fā)生異常的指令mov(eax, vaddr);
    * CPU獲得vaddr這個虛地址,根據(jù)CR3寄存器指向的current->pgd,利用建立好的頁目錄頁表數(shù)據(jù)庫,找到其對應(yīng)的物理內(nèi)存地址;
    * 將eax的內(nèi)容寫入vaddr對應(yīng)的物理內(nèi)存地址內(nèi);  

7. 用戶進(jìn)程釋放內(nèi)存vaddr,free(vaddr):

    * 找到該vaddr所在的vm_area_struct;
    * 找到vm_area_struct:start--end對應(yīng)的所有頁目錄頁表項,清空對應(yīng)的所有頁表項;
    * 釋放這些頁表項指向物理頁面所對應(yīng)的page,并將這些page加入到free_list隊列中;
    * 有必要還會清空一些頁目錄表項,并釋放這些頁目錄表項指向的頁表;
    * 從task->mm->mmap鏈中刪除該vm_area_struct并釋放掉;

綜合說明:

    * 可用物理內(nèi)存就是free_list中各page對應(yīng)的物理內(nèi)存;
    * 頁目錄頁表數(shù)據(jù)庫的主要目的是為CPU訪問物理內(nèi)存時轉(zhuǎn)換vaddr-->paddr使用,分配以及釋放內(nèi)存時不會用到,但是需要內(nèi)核內(nèi)存管理系統(tǒng)在合適時機為CPU建立好該庫;
    * 對于用戶進(jìn)程在6中獲得的物理頁面,有兩個頁表項對應(yīng),一個就是內(nèi)核頁目錄頁表數(shù)據(jù)庫的某個pte[i ],一個就是當(dāng)前進(jìn)程內(nèi)核頁目錄頁表數(shù)據(jù)庫的某個 pte[j],但是只有一個page和其對應(yīng)。如果此時調(diào)度到其他進(jìn)程,其他進(jìn)程申請并訪問某個內(nèi)存,則不會涉及到該物理頁面,因為其分配時首先要從 free_list中找一個page,而該物理頁面對應(yīng)的page已經(jīng)從free_list中脫離出來了,因此不存在該物理頁面被其他進(jìn)程改寫操作的情況。內(nèi)核中通過get_free_pages等方式獲取內(nèi)存時,也不會涉及到該物理頁面,原理同前所述。

評分

參與人數(shù) 1可用積分 +15 收起 理由
yuhuohu + 15 我很贊同

查看全部評分

論壇徽章:
0
2 [報告]
發(fā)表于 2008-05-19 21:27 |只看該作者
總結(jié)得很好,學(xué)習(xí)了!

論壇徽章:
0
3 [報告]
發(fā)表于 2008-05-19 21:31 |只看該作者
唉,一直想看看內(nèi)核的內(nèi)存子系統(tǒng),但實在太大了,要很多時間。
還是先把一些小系統(tǒng)搞懂再說。
頂LZ,辛苦了

論壇徽章:
0
4 [報告]
發(fā)表于 2008-05-19 23:20 |只看該作者
再頂一個,希望LZ能細(xì)化一下

論壇徽章:
0
5 [報告]
發(fā)表于 2008-05-19 23:32 |只看該作者
原帖由 zx_wing 于 2008-5-19 23:20 發(fā)表
再頂一個,希望LZ能細(xì)化一下

老弟,要細(xì)化就失去該篇文檔的意義了 。
花了大概一年看Linux內(nèi)存管理,其涉及到的概念、數(shù)據(jù)結(jié)構(gòu)、算法都非常多,每一部分都可以詳細(xì)寫出一篇文檔,做的筆記好幾萬字,但總感覺應(yīng)該用簡短的幾句話描述出內(nèi)存管理的實質(zhì),試圖總結(jié)過好幾次,沒成功。在上個星期,徹底靜下心來花了幾天時間,總結(jié)出這篇文檔,來盡可能的清晰描繪出Linux內(nèi)存管理的實質(zhì),希望有所幫助。

論壇徽章:
0
6 [報告]
發(fā)表于 2008-05-20 00:33 |只看該作者
原帖由 frank_seng 于 2008-5-19 23:32 發(fā)表

老弟,要細(xì)化就失去該篇文檔的意義了
花了大概一年看Linux內(nèi)存管理,其涉及到的概念、數(shù)據(jù)結(jié)構(gòu)、算法都非常多,每一部分都可以詳細(xì)寫出一篇文檔,做的筆記好幾萬字,但總感覺應(yīng)該用簡短的幾句話描述 ...

佩服佩服,我現(xiàn)在也在艱難的學(xué)習(xí)中。
內(nèi)存一直不敢碰。我建議LZ慢慢寫,一點點的理清楚,對自己有利,對別人也有利。
還有就是可以升級到2.6內(nèi)核哈,現(xiàn)在2.4有點過時了。例如新的slab也出來了。

論壇徽章:
0
7 [報告]
發(fā)表于 2008-05-20 00:43 |只看該作者
原帖由 zx_wing 于 2008-5-20 00:33 發(fā)表

佩服佩服,我現(xiàn)在也在艱難的學(xué)習(xí)中。
內(nèi)存一直不敢碰。我建議LZ慢慢寫,一點點的理清楚,對自己有利,對別人也有利。
還有就是可以升級到2.6內(nèi)核哈,現(xiàn)在2.4有點過時了。例如新的slab也出來了。

內(nèi)存管理俺看的是2.6的,呵呵

論壇徽章:
0
8 [報告]
發(fā)表于 2008-05-20 00:48 |只看該作者
原帖由 frank_seng 于 2008-5-20 00:43 發(fā)表

內(nèi)存管理俺看的是2.6的,呵呵

那LZ可以先選一個最熟悉的部分,寫個特詳細(xì)的,寫完一個是一個。
我感覺現(xiàn)在好多同志都是基本原理知道,實現(xiàn)細(xì)節(jié)不清楚(我就是這樣的
急切需要一個詳細(xì)的文檔來梳理

PS:成都今晚又要大震,電臺報的好心慌,可憐我在外面拖跟網(wǎng)線上網(wǎng)哦~~~

論壇徽章:
0
9 [報告]
發(fā)表于 2008-05-20 00:57 |只看該作者
原帖由 zx_wing 于 2008-5-20 00:48 發(fā)表

那LZ可以先選一個最熟悉的部分,寫個特詳細(xì)的,寫完一個是一個。
我感覺現(xiàn)在好多同志都是基本原理知道,實現(xiàn)細(xì)節(jié)不清楚(我就是這樣的
急切需要一個詳細(xì)的文檔來梳理

PS:成都今晚又要大震,電 ...

。靠蓱z的孩子,早點休息!老弟的學(xué)習(xí)精神讓人敬佩!
其實我也是源碼和ULK結(jié)合看的,呵呵

[ 本帖最后由 frank_seng 于 2008-5-20 10:41 編輯 ]

論壇徽章:
0
10 [報告]
發(fā)表于 2008-05-20 12:29 |只看該作者
原帖由 frank_seng 于 2008-5-19 23:32 發(fā)表

老弟,要細(xì)化就失去該篇文檔的意義了 。
花了大概一年看Linux內(nèi)存管理,其涉及到的概念、數(shù)據(jù)結(jié)構(gòu)、算法都非常多,每一部分都可以詳細(xì)寫出一篇文檔,做的筆記好幾萬字,但總感覺應(yīng)該用簡短的幾句話描述 ...



贊一個!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP