在看操作系統方面的書(shū)時(shí),發(fā)現平面地址空間是個(gè)非常讓人費解的名詞。
那么我就來(lái)解釋下什么是平面地址。
x86提供了分段和分頁(yè)兩種內存管理方式,嚴格的說(shuō)是在分段之上實(shí)現分頁(yè)。其實(shí)分段是沒(méi)有必要的,只是x86為了兼容而已。mips這些cpu就只有分頁(yè)。
怎么避開(kāi)分段機制呢?其實(shí)windows和linux都大致相同,讓cs,ds,ss這些段寄存器指向的描述符都指向0x0000000這個(gè)地址,段限長(cháng)都為4G.
這樣做之后,段偏移實(shí)際上就是線(xiàn)性地址。
什么是線(xiàn)性地址,大家熟悉getprocaddress這個(gè)函數吧,它獲得的地址其實(shí)就是邏輯地址中的段內偏移,不過(guò)它的段描述符指向基地址0x0000000這個(gè)地址,實(shí)際上結果就是和線(xiàn)性地址數值完全相符。
這樣做了之后,我們就不必操心段寄存器了。整個(gè)空間看起來(lái)就是4G很平整了。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。