Linux知識(shí)點(diǎn) – 進(jìn)程概念(補(bǔ)充)
一、進(jìn)程地址空間的堆區(qū)
在用戶每次使用malloc等函數(shù)在進(jìn)程的堆區(qū)申請(qǐng)地址時(shí),用戶只需要指定空間的大小,并且會(huì)得到一個(gè)起始地址,而不會(huì)得到結(jié)束地址;
-
因?yàn)?strong>堆區(qū)的結(jié)構(gòu)都是由vm_area_struct管理的,每次malloc都會(huì)申請(qǐng)一個(gè)該結(jié)構(gòu)體;
-
malloc在堆上申請(qǐng)空間時(shí),只需要知道起始地址,不需要知道結(jié)束地址,就是因?yàn)関m_area_struct中保存了start和end;
-
堆區(qū)申請(qǐng)的空間都是連續(xù)的;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-649606.html
二、虛擬地址到物理地址之間的轉(zhuǎn)化
- 磁盤上的空間都是以4KB為單位的,我們的可執(zhí)行程序存儲(chǔ)在磁盤上,其實(shí)它本來(lái)就是按照地址空間的方式進(jìn)行編譯的,可執(zhí)行程序也被劃分成了以4KB為單位的區(qū)域,存儲(chǔ)在磁盤上;
- 物理內(nèi)存也是按照4KB劃分的,OS是通過(guò)struct page結(jié)構(gòu)體對(duì)物理內(nèi)存的各個(gè)單元進(jìn)行管理的;
- 磁盤上的一個(gè)4KB單位叫做頁(yè)幀,物理內(nèi)存上的一個(gè)4KB單位叫做頁(yè)框;
- IO的時(shí)候,基本單位就是4KB,就是將頁(yè)幀裝進(jìn)頁(yè)框;
- 當(dāng)OS通過(guò)頁(yè)表進(jìn)行尋址時(shí),發(fā)現(xiàn)對(duì)應(yīng)地址的文件不在內(nèi)存中,就需要引發(fā)缺頁(yè)中斷:
(1)申請(qǐng)對(duì)應(yīng)的內(nèi)存;
(2)在磁盤中查找對(duì)應(yīng)的文件;
(3)加載到內(nèi)存中指定的位置;
(4)重新填充頁(yè)表;
(5)返回到用戶;
三、虛擬地址到物理地址之間的映射
頁(yè)表中一個(gè)地址的映射叫做一個(gè)條目,假設(shè)一個(gè)條目大小為9byte(虛擬地址 + 物理地址 + 屬性),32位地址下一共2^32個(gè)條目,就是4GB個(gè)條目,一共就是36GB的頁(yè)表空間,內(nèi)存中無(wú)法保存這么大的頁(yè)表;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-649606.html
-
實(shí)際上,OS在虛擬地址到物理地址的映射上,是將虛擬地址劃分的:
虛擬地址的前十個(gè)bit位在一級(jí)頁(yè)表進(jìn)行索引,一級(jí)頁(yè)表的映射關(guān)系一共2^10,就是1024個(gè);
一級(jí)頁(yè)表映射到二級(jí)頁(yè)表,再在對(duì)應(yīng)的二級(jí)頁(yè)表中檢索中間的10bit地址;
二級(jí)頁(yè)表映射到物理內(nèi)存的某個(gè)頁(yè)的起始地址;
后12位地址代表這個(gè)地址的頁(yè)內(nèi)偏移(因?yàn)?^12 = 4KB);
這樣就能夠減小頁(yè)表的空間消耗;
到了這里,關(guān)于Linux知識(shí)點(diǎn) -- 進(jìn)程概念(補(bǔ)充)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!