從80386開始,cpu有三種工作模式:實模式、保護模式和虛擬8086模式。80286開始的cpu引入保護模式,實際上,實模式概念是在保護模式推出之後為了區別保護模式之前的8086cpu工作模式才有的,在8086時代cpu工作模式只有一種,自然沒有實模式之說。實模式有著先天的缺陷(下文詳述),但出於向上相容的考慮,現代cpu仍然保持著對16位操縱模式的相容。
所謂工作模式,是指cpu的定址方式、暫存器大小、指令用法和記憶體布局等。
實模式的「實」體現在程式中用到的位址都是真實的實體地址,「段基址:段內偏移位址」產生的邏輯位址就是實體地址,即程式設計師可見的位址完全是真實的記憶體位址。
在實模式下,記憶體定址方式和8086相同,由16位段暫存器的內容乘以16(左移4位)作為段基址,加上16位段偏移位址形成20位的實體地址,最大定址空間1mb,最大分段64kb。可以使用32位指令,即32位的x86 cpu也可以相容實模式,此時的實模式相當於高速的8086(32位cpu的實模式可以使用32位下的資源)。在32位cpu下,系統復位或加電時都是以實模式啟動,然後再切換為保護模式。在實模式下,所有的段都是可以讀、寫和可執行的。
下圖是實模式下的記憶體訪問模型:
8086cpu的實模式開創性地提出了位址分段的概念,改變了在它之前的cpu只能「硬編碼」,程式無法重定位的缺點。然而實模式還是有很多缺陷,其中最主要的是實模式的安全隱患。在實模式下,使用者程式和作業系統擁有同等權利,因為實模式下沒有特權級。此外,程式可以隨意修改自己的段基址,加上實模式下對位址的訪問就是實實在在的實體地址,因此程式可以隨意修改任意實體地址,甚至包括作業系統所在的記憶體,這給作業系統帶來極大的安全問題。
儘管在intel 80286手冊中已經提出了保護模式,但實際上它只是乙個指引。80286雖然有了保護模式但其依然是16位的cpu,其通用暫存器還是16位寬,只不過其位址線由20位變成了24位,即定址空間擴大到了16mb(但受限於暫存器位寬,單個暫存器的定址空間仍然為64kb)。80286只是乙個「過渡」產品,很快就被淘汰。
真正的32位位址出現在intel 80386上,它的位址匯流排和暫存器都是32位的,因此其單暫存器的定址空間擴大到了4gb——在當時甚至其後的數年,僅通過段內偏移位址都足以訪問記憶體的任意角落,這也開啟了「平坦模型」的時代。
保護模式本身是80286及以後的x86系列處理器產生的一種操作模式,它具有許多特性設計為提高系統的多道任務和系統的安全性及穩定性——例如記憶體的保護,分頁機制和硬體虛擬儲存的支援。現代多數的x86處理器作業系統都執行在保護模式下,包括linux, free bsd, 和windows3.0(它也執行在實模式下,為了和windows 2.x應用程式相容)及以後的版本。
在保護模式中,記憶體的管理模式分為兩種——段模式和頁模式。其中頁模式也是基於段模式的。也就是說,保護模式的記憶體管理模式事實上是:純段模式和段頁式。進一步說,段模式是必不可少的,而頁模式則是可選的——如果使用頁模式,則是段頁式,否則這是純段模式。
為了改進實模式下記憶體訪問的不安全性,保護模式給記憶體段新增了段屬性來限制使用者程式對記憶體的操作許可權。保護模式引入了全域性描述符表(global descriptor table,gdt),gdt的表項是描述段型別屬性的資料結構——段描述符。gdt中的每乙個段描述符都描述了乙個記憶體段的基本屬性,如段基址、段界限、型別、dpl等等。
實模式和保護模式
實模式 即實位址訪問模式 它是intel公司80286及以後的x86 80386,80486和80586等 相容處理器 cpu 的一種操作模式。實模式被特殊定義為20位位址記憶體可訪問空間上,這就意味著它的容量是2的20次冪 1m 的可訪問記憶體空間 物理記憶體和bios rom 軟體可通過這些位址...
實模式和保護模式
無法支援多工 程式設計師多個程式可能指定執行的實體地址一樣 程式的安全性無法得到保證 使用者程式可以改寫系統空間或者其他使用者的程式內容 實模式將整個物理記憶體看成分段的區域,程式 和使用者程式沒有區別對待,而且每乙個指標都是指向 實在 的實體地址。這樣一來,使用者程式的乙個指標如果指向了系統程式區...
實模式與保護模式
實模式與保護模式 1.實模式,又叫實位址模式,cpu完全按照8086的實際定址方法訪問從00000h fffffh 1mb大小 的位址範圍的記憶體,在這種模式下,cpu只能做單任務執行 定址公式為 實體地址 左移4位的段位址 偏移位址,即 實體地址是由16位的段位址和16位的段內偏移位址組成的。2....