內(nèi)存管理是操作系統(tǒng)的核心技術(shù)之一含懊,主要完成:由虛擬地址映射為物理地址,保證程序運行的隔離衅胀,及內(nèi)存資源的高效分配等岔乔。
大致的演化為:物理地址-分段-分頁-段頁;
分段管理
這里的段是指程序運行過程中需要的內(nèi)存段滚躯,并沒有固定的大小限制雏门,段的大小與程序本身有關(guān)。
映射方式為: 起始地址+偏移地址
Intel微處理器支持兩種不同的分段模式:實模式分段管理與保護模式分段管理
- 實模式分段管理
Intel微處理器在實模式使用20條地址線尋址1MB物理存儲器掸掏。
8086/8088僅有20條地址線A19-A0;(x86-16)
80286使用24條地址線中的20條茁影;(x86-16)
80386、80486和Pentium也僅使用32條地址線中的20條丧凤。(x86-32/IA-32)
物理地址=段地址(段寄存器16bits)*0x10 + 偏移地址(16bits)
-
保護模式分段管理
為解決實模式下的內(nèi)存訪問權(quán)限管理和可能產(chǎn)生內(nèi)存訪問越界的問題引入募闲,將內(nèi)存段通過段描述符進行保護。
保護模式下愿待,段的起始地址不再由段寄存器指示浩螺,而是保存在一個8字節(jié)的段描述符里,IA-32的段描述符結(jié)構(gòu)如下:
IA-32段描述符
其中包含:
- 32位段基址(段起始地址)仍侥;
- 20位段界限要出;
- G位:界限粒度(G=1,段界限*4k,可訪問4G空間农渊,G=0患蹂,段界限本身)
- D位:D=1,32位指令模式;D=0砸紊,16位指令模式传于。
映射方式: 物理地址=段地址(段描述符表基址寄存器+段寄存器索引)+偏移地址
解決了對于內(nèi)存訪問權(quán)限控制的問題
分頁管理
由于程序的局部性原理,加之段管理批糟,內(nèi)存粒度較大,每次換入換出都是整個程序看铆,效率較低徽鼎,引入粒度較小的分頁管理機制。
頁表:虛擬頁到物理頁的映射,存有4字節(jié)的頁描述符否淤;
頁目錄:到頁表的影視悄但,存有4字節(jié)的頁表描述符。
以32位計算機系統(tǒng)中石抡,頁的大小設(shè)置為4k為例:
D31-D22: 頁目錄索引
D21-D12: 頁表索引
D11-D0: 頁偏移地址
映射方式:頁目錄基址(專有寄存器)+頁目錄索引¢芟-- 頁表描述符
頁表基址+頁表索引〈旖!-- 頁描述符
頁基址+頁內(nèi)偏移≠炻怠-- 物理地址
段頁式管理
分段與分頁管理的結(jié)合柒啤,物理內(nèi)存等分成頁漾唉,程序訪問內(nèi)存時朋其,先經(jīng)過分段管理部件轉(zhuǎn)換為線性地址饿悬,然后再經(jīng)過分頁管理部件轉(zhuǎn)換為物理地址久又。
兼有分段管理的內(nèi)存訪問權(quán)限控制與分頁管理的粒度較小的優(yōu)點舷暮,但需要多次查表煞茫。
更多內(nèi)容可關(guān)注本人博客:老香椿(https://laoxiangchun.cn/)