徹底理解操作系統(tǒng):CPU與實(shí)模式
尋址,最重要的就是尋址
直接告訴我們一個(gè)編號(hào),我們拿到這個(gè)編號(hào)后按個(gè)去找,就像下面這張圖,我們需要找到東西在第15號(hào)儲(chǔ)物柜中,那么我們根據(jù)15這個(gè)地址就能找到第15號(hào)儲(chǔ)物柜。 
當(dāng)然我們也可以將儲(chǔ)物柜劃分區(qū)域,還是以剛才的儲(chǔ)物柜為例我們可以劃分為3個(gè)區(qū)域,當(dāng)我們需要找東西時(shí)告訴我們其在儲(chǔ)物柜的哪個(gè)區(qū)域,以及在該區(qū)域中的"偏移"是多少。
以下圖為例我們需要的東西在第二個(gè)區(qū)域,區(qū)域內(nèi)的偏移為6(該區(qū)域中的第6個(gè)儲(chǔ)物柜)。

死板 vs 靈活



絕對(duì)路徑與相對(duì)路徑
/user/xiaofeng/doc/a.c./a.c

物理地址 = 起始地址 + 相對(duì)地址
分段式內(nèi)存管理

保存機(jī)器指令的區(qū)域,這個(gè)區(qū)域就是我們所說(shuō)的代碼段(Code Segment),因此我們可以使用一個(gè)寄存器來(lái)專門指向代碼段,這就是CS寄存器的作用,CS也是Code Segment的縮寫。
同樣的道理,程序運(yùn)行起來(lái)后還有專門的區(qū)域用來(lái)保存數(shù)據(jù),因此必須要專門的寄存器指向數(shù)據(jù)段(Data Segment),這就是DS寄存器的作用,DS是Data Segment的縮寫。
程序運(yùn)行起來(lái)后還有運(yùn)行時(shí)棧(Stack Segment),因此可以使用SS寄存器來(lái)指向程序員運(yùn)行時(shí)棧,SS是Stack Segment的縮寫。
此外還有ES寄存器,Extra Segment,其用作臨時(shí)段寄存器。
沒(méi)有內(nèi)存保護(hù)會(huì)怎樣?
實(shí)模式
絕對(duì)的內(nèi)存地址不好用,這樣的地址必須將程序加載到內(nèi)存的特定位置上,為解決這個(gè)問(wèn)題使用相對(duì)地址,x86中為每個(gè)程序的區(qū)域都配備有專用的寄存器用來(lái)存放該段在內(nèi)存中的起始地址,這樣就可以根據(jù)基址加偏移計(jì)算出物理內(nèi)存地址,注意,這里計(jì)算出來(lái)的是真實(shí)的物理內(nèi)存地址。 內(nèi)存讀寫沒(méi)有任何保護(hù),程序可以讀寫內(nèi)存的任何區(qū)域。


16 ? selector + offset

尋址空間有限,只有1MB 利用 selector:offset的方式利用兩個(gè)16位寄存器來(lái)尋址1MB內(nèi)存 沒(méi)有內(nèi)存保護(hù)機(jī)制,當(dāng)然,沒(méi)有內(nèi)存保護(hù)機(jī)制的一大優(yōu)點(diǎn)就在于內(nèi)存讀寫速度要更快,原因就在于不需要經(jīng)過(guò)虛擬內(nèi)存地址到物理內(nèi)存地址的轉(zhuǎn)換,也不需要進(jìn)行任何檢查(這可能是實(shí)模式下僅有的優(yōu)點(diǎn))
實(shí)模式與操作系統(tǒng)
把物理內(nèi)存暴露給程序
沒(méi)有內(nèi)存保護(hù)機(jī)制

總結(jié)

w3cschool編程獅
專門學(xué)習(xí)編程的學(xué)習(xí)網(wǎng)站
評(píng)論
圖片
表情
