一、前言
在《操作系統(tǒng)篇-淺談實模式與保護模式》中提到了兩種模式,我們說在操作系統(tǒng)中,其實大部分時間是待在保護模式中的。因此若想理解操作系統(tǒng)程序中的啟動相關(guān)的部分,必須要理解保護模式下的編程,而分段機制是保護模式編程下的基礎。而且,由于實模式與保護模式的不同,對保護模式下的分段機制更需要注意。
二、線性地址
在保護模式下編程,訪問內(nèi)存時,需要在程序中給出段地址和偏移量,因為分段是保護模式的基本特征之一。傳統(tǒng)上,段地址和偏移地址稱為邏輯地址,偏移地址叫做有效地址,在指令中給出有效地址的方式叫做尋址方式。
段的管理是由處理器的段部件負責進行的,段部件將段地址和偏移地址相加,得到訪問內(nèi)存的地址。一般來說,段部件產(chǎn)生的地址就是物理地址。
在分段模型下,內(nèi)存的分配是不定長的,時間長了,內(nèi)存空間就會碎片化,就有可能出現(xiàn)一種情況:內(nèi)存空間是有的,但都是小塊,無法分配給某個任務。為了解決這個問題,在支持分頁功能后,分頁功能將物理內(nèi)存空間劃分成邏輯上的頁。頁的大小是固定的,一般為 4KB,通過使用頁,可以簡化內(nèi)存管理。
如下圖所示,當頁功能開啟時,段部件產(chǎn)生的地址就不再是物理地址了,而是線性地址,線性地址還要經(jīng)頁部件轉(zhuǎn)換后,才是物理地址。
線性地址的概念用來描述任務的地址空間。如上圖所示, 32位保護模式中,每個任務都擁有4GB 的虛擬內(nèi)存空間,就像一段平直的線段,因此叫線性地址空間。相應地,由段部件產(chǎn)生的地址,就對應著線性地址空間上的每一個點,這就是