linux內(nèi)核的映射機(jī)制設(shè)計(jì)成三層:PGD,PMD,PT。相應(yīng)的在邏輯上把線性地址從高位到地位劃分為4個位段,各占若干位,分別用作在目錄PGD中的下標(biāo)、PMD下標(biāo)和PT下標(biāo)以及物理頁面PTE中的偏移。
理論上每個進(jìn)程可以使用的用戶空間都是3G字節(jié)(實(shí)際的空間大小受到物理存儲器包括內(nèi)存以及磁盤交換區(qū)或交換文件大小的限制)。雖然各個進(jìn)程擁有其自己的3G字節(jié)用戶空間,系統(tǒng)空間卻由所有的進(jìn)程共享。每當(dāng)一個進(jìn)程通過系統(tǒng)調(diào)用進(jìn)入了內(nèi)核,該進(jìn)程就在共享的系統(tǒng)空間中運(yùn)行,不再有其自己的獨(dú)立空間。從具體的進(jìn)程的角度看,每個進(jìn)程都擁有4G的虛存空間,較低的3G為自己的用戶空間,高的1G則為與所有進(jìn)程以及內(nèi)核共享的系統(tǒng)空間。
系統(tǒng)空間占據(jù)了每個虛存空間中高的1G,在物理的內(nèi)存中卻是從最低的地址0開始。所以,對于內(nèi)核來說,其地址的映射是很簡單的線性映射,0xC0000000就是二者的偏移。
#define __PAGE_OFFSET (0xC0000000)
#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
#define TASK_SIZE (PAGE_OFFSET)
每個進(jìn)程的局部描述符表LDT都作為一個獨(dú)立的段而存在,在全局描述符表GDT中要有一個表項(xiàng)指向這個段的起始地址,并說明該段的長度和其他一些參數(shù)。除此之外,每個進(jìn)程還有一個TSS結(jié)構(gòu)(任務(wù)狀態(tài)段)。所以每個進(jìn)程都要在全局段描述符表GDT中占據(jù)兩個表項(xiàng)。段寄存器中用作GDT表下標(biāo)的位段寬度是13位,所以GDT中可以有8192個描述項(xiàng)。除一些系統(tǒng)的開銷以外,上有8180個表項(xiàng)可用,所以理論上系統(tǒng)中大的進(jìn)程數(shù)量是4090.
名稱欄目:2.1linux內(nèi)存管理的基本框架-創(chuàng)新互聯(lián)
文章鏈接:http://www.chinadenli.net/article26/dhejcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、域名注冊、App設(shè)計(jì)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)