資源描述:
《內(nèi)存管理數(shù)據(jù)結(jié)構(gòu)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、內(nèi)存管理數(shù)據(jù)結(jié)構(gòu)2015.3.31星期二(單周)2015.4.7星期二(雙周)掌握內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)程序的頁表MMU的APRU區(qū)的u.u_uisa[16],u.u_uisd[16]內(nèi)存的空白區(qū)域structmap一、程序的內(nèi)存組織方法Staticchar*class=host;//標(biāo)題頁上的類名Staticcharformat=‘f’;//打印文件用的格式字符Staticcharhdr=1;//是否打印標(biāo)題①已經(jīng)初始化的數(shù)據(jù)Staticchar*dfname;//數(shù)據(jù)文件Staticchar*fonts[4
2、];//troff字體名Staticchariflag;//需要的縮進(jìn)②未初始化的數(shù)據(jù)bss程序Staticchar*lmktemp(char*id,intnum,intlen){char*s;if((s=malloc(len)==NULL)fatal2(“outofmemory”);(void)snfrintf(s,len,”%s%A%03d%S”,SD,id,num,host);}程序參數(shù)③棧區(qū)域局部變量③棧區(qū)域④堆代碼Linux虛擬存儲(chǔ)器管理與進(jìn)程相關(guān)的數(shù)據(jù)結(jié)構(gòu)(頁表,task,mm結(jié)構(gòu),內(nèi)核棧)物理
3、存儲(chǔ)器內(nèi)核代碼和數(shù)據(jù)每個(gè)進(jìn)程不同每個(gè)進(jìn)程相同用戶棧共享庫的存儲(chǔ)器映射區(qū)域運(yùn)行時(shí)堆(malloc分配)未初始化數(shù)據(jù).bss已初始化數(shù)據(jù).data程序文件(.text)0x08048000(32)0x0040000(64)brk%esp內(nèi)核虛擬存儲(chǔ)器進(jìn)程虛擬存儲(chǔ)器二、UNIXV6內(nèi)存管理(1)頁表內(nèi)存的分頁管理(paging):把每個(gè)程序的地址空間分成大小相等的片,稱之為頁面或者頁(page);內(nèi)存的存儲(chǔ)空間分成與頁大小相同的片,稱為頁框(pageframe),為進(jìn)程分配存儲(chǔ)空間時(shí),以頁為單位。MMU為進(jìn)程的每
4、一個(gè)頁面分配一個(gè)寄存器,這些寄存器組成一個(gè)表,稱為頁表頁表的硬件實(shí)現(xiàn)有多種方法,用一組專用寄存器存放頁表。PDP-11/40使用APR,高速邏輯電路構(gòu)造,有效進(jìn)行分頁地址的轉(zhuǎn)換。由于對(duì)內(nèi)存的每次訪問都要經(jīng)過頁表,因此效率很重要。Unixv6的頁表用APR實(shí)現(xiàn)。程序裝入問題CPU調(diào)度程序swtch()在裝入保存在U區(qū)的R0~R7數(shù)據(jù)時(shí),也裝入APR的數(shù)據(jù)。APR數(shù)據(jù)保存在u.u_uisa[16]和u.u_uisd[16]中。APR頁表PDP-11/40的CPU字長(zhǎng)是16位,地址是16位,頁面大小8kB,因此A
5、PR頁表有8個(gè)條目,每個(gè)程序最多有8個(gè)page。APR有8個(gè)快速reg組。216=64k頁面8k,所以頁表有8個(gè)條目。現(xiàn)代OS的頁表(一百萬個(gè)條目)放在內(nèi)存,將頁表基地址存放在PTBR寄存器。使用快表,提高效率。PDP-11/40的CPU地址和總線物理地址總線18位,所以內(nèi)存物理地址218=4*64k=256k。P5所以內(nèi)存最多可存放4個(gè)完整的進(jìn)程地址空間。P23實(shí)際上,一般情況是,執(zhí)行進(jìn)程的整個(gè)地址空間在內(nèi)存中,而不在CPU上執(zhí)行的進(jìn)程,將它的數(shù)據(jù)段調(diào)出到交換區(qū)(交換文件),只有一部分進(jìn)程映像在內(nèi)存,可提
6、高內(nèi)存的利用率。UNIXV6進(jìn)程頁表的硬件實(shí)現(xiàn)PDP-11/40的APR頁表是頁面與塊兩級(jí)結(jié)構(gòu)。頁面長(zhǎng)度8k,這是CPU字長(zhǎng)決定的。每個(gè)頁面分成128塊,塊的長(zhǎng)度64B.塊是存儲(chǔ)分配的基本單位PDP-11/46的頁表包括8個(gè)頁面,maxmem表示頁表中最多塊數(shù)。APR(activepageregister)寄存器一共有8組,每組APR由1個(gè)PAR(pageaddressregister)和1個(gè)PDR(pagedescriptionregister)寄存器構(gòu)成,PAR[0]~[7],PDR[0]~[7]。UN
7、IXV6進(jìn)程頁表的硬件實(shí)現(xiàn)PAR保存各頁面在塊的起始地址,PDR保存各頁當(dāng)前的塊數(shù)。每頁最多128塊,每塊64字節(jié)。128*64B=8k.APR0APR1APR2APR3APR4APR5APR6APR7PAR[0]PAR[1]PAR[2]PAR[3]PAR[4]PAR[5]PAR[6]PAR[7]PDR[0]PDR[1]PDR[2]PDR[3]PDR[4]PDR[5]PDR[6]PDR[7]地址轉(zhuǎn)換邏輯地址151312650頁號(hào)APR塊號(hào)塊內(nèi)偏移量1512110PAR[i]塊號(hào)起始地址+塊號(hào)塊內(nèi)偏移量P25
8、執(zhí)行進(jìn)程uP26執(zhí)行進(jìn)程U區(qū),全局變量u(0140000)在內(nèi)核PAR[6]的起始地址Proc.p_addr=PAR[6]內(nèi)核APR0123456u71-100-000-000-000-0006:110U區(qū)內(nèi)核棧Proc.p_addr執(zhí)行進(jìn)程的數(shù)據(jù)段物理地址八進(jìn)制數(shù),16位CPU字長(zhǎng)。最高位1位,后面15位,所以有5個(gè)數(shù)字。APR6(3)用戶APR在進(jìn)程調(diào)度時(shí),savu()保存在U區(qū)進(jìn)程切換swtch()PAR0