詳細(xì)講解Linux內(nèi)存管理中分段分頁(yè)機(jī)制
隨著Linux操作系統(tǒng)的發(fā)展,很多Linux新用戶(hù)逐漸成為L(zhǎng)inux操作系統(tǒng)的老用戶(hù)。 這里為你講解的問(wèn)題會(huì)對(duì)Linux內(nèi)存管理中分段分頁(yè)機(jī)制有所幫助。希望本文的介紹能讓你能學(xué)會(huì)Linux內(nèi)存管理中分段分頁(yè)機(jī)制。
1. 一些基本的概念:邏輯地址,線(xiàn)性地址,物理地址,實(shí)地址模式,保護(hù)模式,段寄存器,段基址寄存器,段選擇子寄存器,段描述符,全局描述表GDT,局部描述表LDT,GDTR,LDTR,CPL,RPL,DPL,權(quán)限檢查的標(biāo)準(zhǔn)(max(CPL,RPL)<=DPL)。
2. 在head.s中的有全局描述符表的聲明,其中包括內(nèi)核代碼段、內(nèi)核數(shù)據(jù)段、用戶(hù)代碼段、用戶(hù)數(shù)據(jù)段各在哪個(gè)地址,cpu_gdt_table即為表基址。
3. 激活分段機(jī)制的兩個(gè)步驟:一是設(shè)置全局描述符表GDT,也就是通過(guò)head.s中的一段程序把內(nèi)核代碼段、內(nèi)核數(shù)據(jù)段、用戶(hù)代碼段、用戶(hù)數(shù)據(jù)段的地址賦予給特定的寄存器。二是使能保護(hù)機(jī)制,即設(shè)置處理器控制寄存器cr0中的保護(hù)模式標(biāo)記位即可。
內(nèi)存管理之分頁(yè)機(jī)制:
1. 基本概念:頁(yè)框(page frame)、頁(yè)(page)、頁(yè)表(page table)、頁(yè)目錄基址寄存器CR3
2. 基于二級(jí)頁(yè)表的線(xiàn)性地址到物理地址的轉(zhuǎn)換過(guò)程?
3. 頁(yè)表項(xiàng)的結(jié)構(gòu)?
4. 為什么二級(jí)頁(yè)表比一級(jí)頁(yè)表節(jié)省空間?
解釋?zhuān)?/P>
需要知道一個(gè)知識(shí):每個(gè)進(jìn)程都對(duì)應(yīng)一個(gè)頁(yè)表。
比如對(duì)于4G的空間,4K每頁(yè)
如果是一級(jí)頁(yè)表映射,那需要2^20 =1M個(gè)頁(yè)表項(xiàng)(無(wú)論用不用都需要,系統(tǒng)不知道哪個(gè)地址是否會(huì)被訪(fǎng)問(wèn))
1M * 4 == 4M
每個(gè)進(jìn)程都需要4M的頁(yè)表
而如果是2級(jí)頁(yè)表映射就只需要一個(gè)頁(yè)目錄 + 1個(gè)頁(yè)表項(xiàng)(比如進(jìn)程只使用4M內(nèi)存的情況)就足夠了,1個(gè)頁(yè)目錄占4K,一個(gè)頁(yè)表項(xiàng)占4個(gè)字節(jié),但另起了一頁(yè),每個(gè)進(jìn)程總體占8K。
輕松完成Linux內(nèi)存管理中分段分頁(yè)機(jī)制。
【編輯推薦】