計(jì)算機(jī)實(shí)模式和保護(hù)模式

2018-10-25 14:56 更新

實(shí)模式

在實(shí)模式下,內(nèi)存被限制為僅有1M字節(jié)(220 字節(jié))。有效的地址從00000到FFFFF (十六進(jìn)制)。這些地址需要用20位的數(shù)來(lái)表示。顯然,一個(gè)20位的數(shù)不適合任何一個(gè)8086的16位寄存器。Intel通過(guò)利用兩個(gè)16位數(shù)值來(lái)決定一個(gè)地址的方法來(lái)解決這個(gè)問(wèn)題。開(kāi)始的16位值稱(chēng)為段地址(selector)。

段地址的值必須存儲(chǔ)在段寄存器中。第二個(gè)16位值稱(chēng)為偏移地址(offset)。用32位段地址:

偏移地址表示的物理地址可以由下面的公式計(jì)算:

16 * selector + offset

在十六進(jìn)制中乘以16是非常容易的,只需要在數(shù)的右邊加0。例如:表示為047C:0048的物理地址通過(guò)這樣得到:

047C:0048的物理地址

實(shí)際上,段地址的值是一節(jié)的首地址(看表1.2)。

內(nèi)存單元
真實(shí)的段地址有以下的缺點(diǎn):

1、一個(gè)段地址只能指向64K內(nèi)存(16位偏移的上限)。如果一個(gè)程序擁有大于64K的代碼那又怎么辦呢?在CS里的一個(gè)單一的值不能滿(mǎn)足整個(gè)程序執(zhí)行的需要。程序必須分成小于64K的段(segment)。當(dāng)執(zhí)行從一段移到另一段時(shí),CS里的值必須改變。同樣的問(wèn)題發(fā)生在大量的數(shù)據(jù)和DS 寄存器之間。這樣使用是非常不方便的!

2、每個(gè)字節(jié)在內(nèi)存里并不只有唯一的段地址。物理地址04808可以表示為:047C:0048,047D:0038,047E:0028 或047B:0058。這將使段地址的比較變得復(fù)雜。

16位保護(hù)模式

在80286的16位保護(hù)模式下,段地址的值與實(shí)模式相比解釋得完全不同。在實(shí)模式下,一個(gè)段地址的值是物理內(nèi)存里的一節(jié)的首地址。在保護(hù)模式下,一個(gè)段地址的值是一個(gè)指向描述符表的指針。兩種模式下,程序都是被分成段。在實(shí)模式下,這些段在物理內(nèi)存的固定位置而且段地址的值表示段開(kāi)始處所在節(jié)的首地址。在保護(hù)模式下,這些段不是在物理內(nèi)存

的固定的地址。事實(shí)上,它們根本不一定需要在內(nèi)存中。


保護(hù)模式使用了一種叫做虛擬內(nèi)存的技術(shù)。虛擬內(nèi)存的基本思想是僅僅保存程序現(xiàn)在正在使用的代碼和數(shù)據(jù)到內(nèi)存中。其它數(shù)據(jù)和代碼暫時(shí)儲(chǔ)存在硬盤(pán)中直到它們?cè)俅涡枰獣r(shí)。當(dāng)一段從硬盤(pán)重新回到內(nèi)存中,它很有可能放在不同于它移動(dòng)到硬盤(pán)之前時(shí)的位置的內(nèi)存中。所有這些都由操作系統(tǒng)透明地執(zhí)行。程序并不需要因?yàn)橐屘摂M內(nèi)存工作而使用不同的書(shū)寫(xiě)方法。


在保護(hù)模式下,每一段都分配了一條描述符表里的條目。這個(gè)條目擁有系統(tǒng)想知道的關(guān)于這段的所有信息。這些信息包括:現(xiàn)在是否在內(nèi)存中;如果在內(nèi)存中,在哪;訪問(wèn)權(quán)限(例如: 只讀)。段的條目的指針是儲(chǔ)存在段寄存器里的段地址值。


16位保護(hù)模式的一個(gè)大的一 個(gè) 非 常 著 名 的PC專(zhuān) 缺點(diǎn)是偏移地址依然是16位數(shù)。這個(gè)的后果就是段的大小依然限制為最大64K。這會(huì)導(dǎo)致使用大的數(shù)組時(shí)會(huì)有問(wèn)題。


32位保護(hù)模式

80386引入了32位保護(hù)模式。386 32位保護(hù)模式和286 16位保護(hù)模式之間
最主要的區(qū)別是:

1. 偏移地址擴(kuò)展成了32位。這就允許偏移地址范圍升至4G。因此,段的大小也升至4G。

2. 段可以分成較小的4K大小的單元,稱(chēng)為內(nèi)存頁(yè)。虛擬內(nèi)存系統(tǒng)工作在頁(yè)的方式下,代替了段方式。這就意味著一段在任何一個(gè)時(shí)刻只有部分可能在內(nèi)存中。在28616位保護(hù)模式下,要么整個(gè)段在內(nèi)存中,要么整個(gè)不在。這樣在32位模式下允許的大的段的情況下很不實(shí)用。

在Windows 3.x系統(tǒng)中,標(biāo)準(zhǔn)模式為286 16位保護(hù)模式而增強(qiáng)模式為32位保護(hù)模式。Windows 9X,Windows NT/2000/XP,OS/2和Linux都運(yùn)行在分頁(yè)管理的32位保護(hù)模式下。

中斷

有時(shí)候普通的程序流必須可以被要求快速反應(yīng)的處理事件中斷。電腦提供了一個(gè)稱(chēng)為中斷的結(jié)構(gòu)來(lái)處理這些事件。例如:當(dāng)一個(gè)鼠標(biāo)移動(dòng)了,硬件鼠標(biāo)中斷現(xiàn)在的程序來(lái)處理鼠標(biāo)移動(dòng)(移動(dòng)鼠標(biāo),等等)。中斷導(dǎo)致控制權(quán)轉(zhuǎn)移到一個(gè)中斷處理程序。中斷處理程序是處理中斷的程序。每種類(lèi)型的中斷都分配了一個(gè)中斷號(hào)。在物理內(nèi)存的開(kāi)始處,存在一張包含中斷處理
程序段地址的中斷向量表。中斷號(hào)是這張表中最基本的指針。

外部中斷由CPU的外部引起。(鼠標(biāo)就是這一類(lèi)型的例子。)許多I/O設(shè)備引起中斷(例如:鍵盤(pán),時(shí)鐘,硬盤(pán)驅(qū)動(dòng)器,CD-ROM和聲卡)。內(nèi)部中斷由CPU的內(nèi)部引起,要么是由一個(gè)錯(cuò)誤引起,要么由中斷指令引起。錯(cuò)誤中斷稱(chēng)為陷阱。由中斷指令引起的中斷稱(chēng)為軟中斷。DOS使用這些類(lèi)型的中斷來(lái)實(shí)現(xiàn)它的API(應(yīng)用程序接口)。許多現(xiàn)代的操作系統(tǒng)(如:Windows和UNIX)使用一個(gè)基于C的接口。

許多中斷處理程序當(dāng)它執(zhí)行完成時(shí),將控制權(quán)返回給被中斷的程序。它們恢復(fù)寄存器,里面的值與中斷發(fā)生之前的值相同。因此,被中斷的程序就像沒(méi)有任何事情發(fā)生一樣運(yùn)行(除了它失去了一些CPU周期)。陷阱通常不返回。通常它們中止程序。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)