Linux下的实模式和保护模式
實模式:(即實地址訪問模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容處理器(CPU)的一種操作模式。實模式被特殊定義為20位地址內存可訪問空間上,這就意味著它的容量是2的20次冪(1M)的可訪問內存空間(物理內存和BIOS-ROM),軟件可通過這些地址直接訪問BIOS程序和外圍硬件。實模式下處理器沒有硬件級的內存保護概念和多道任務的工作模式。但是為了向下兼容,所以80286及以后的x86系列兼容處理器仍然是開機啟動時工作在實模式下。80186和早期的處理器僅有一種操作模式,就是后來我們所定義的實模式。實模式雖然能訪問到1M的地址空間,但是由于BIOS的映射作用(即BIOS占用了部分空間地址資源),所以真正能使用的物理內存空間(內存條),也就是在640k到924k之間。1M地址空間組成是由16位的段地址和16位的段內偏移地址組成的。用公式表示為:物理地址=左移4位的段地址+偏移地址。
286處理器體系結構引入了地址保護模式的概念,處理器能夠對內存及一些其他外圍設備做硬件級的保護設置(保護設置實質上就是屏蔽一些地址的訪問)。使用這些新的特性,然而必不可少一些額外的在80186及以前處理器沒有的操作規程。自從最初的x86微處理器規格以后,它對程序開發完全向下兼容,80286芯片被制作成啟動時繼承了以前版本芯片的特性,工作在實模式下,在這種模式下實際上是關閉了新的保護功能特性,因此能使以往的軟件繼續工作在新的芯片下。直到今天,甚至最新的x86處理器都是在計算機加電啟動時都是工作在實模式下,它能運行為以前處理器芯片寫的程序.
DOS操作系統(例如MS-DOS,DR-DOS)工作在實模式下,微軟Windows早期的版本(它本質上是運行在DOS上的圖形用戶界面應用程序,實際上本身并不是一個操作系統)也是運行在實模式下,直到Windows3.0,它運行期間既有實模式又有保護模式,所以說它是一種混合模式工作。它的保護模式運行有兩種不同意義(因為80286并沒有完全地實現80386及以后的保護模式功能):
1〉“標準保護模式”:這就是程序運行在保護模式下;
2〉“虛擬保護模式(實質上還是實模式,是實模式上模擬的保護模式)”:它也使用32位地址尋址方式。Windows3.1徹底刪除了對實模式的支持。在80286處理器芯片以后,Windows3.1成為主流操作系統(Windows/80286不是主流產品)。目前差不多所有的X86系列處理器操作系統(Linux,Windows95 and later,OS/2等)都是在啟動時進行處理器設置而進入保護模式的。
保護模式:經常縮寫為p-mode,在Intel iAPX 286程序員參考手冊中(iAPX 286是Intel 80286的另一種叫法)它又被稱作為虛擬地址保護模式。經管在Intel 80286手冊中已經提出了虛地址保護模式,但實際上它只是一個指引,真正的32位地址出現在Intel 80386上。保護模式本身是80286及以后兼容處理器序列之后產成的一種操作模式,它具有許多特性設計為提高系統的多道任務和系統的穩定性。例如內存的保護,分頁機制和硬件虛擬存儲的支持。現代多數的x86處理器操作系統都運行在保護模式下,包括Linux, Free BSD, 和Windows 3.0(它也運行在實模式下,為了和Windows 2.x應用程序兼容)及以后的版本。
80286及以后的處理器另一種工作模式是實模式(僅當系統啟動的一瞬間),本著向下兼容的原則屏蔽保護模式特性,從而容許老的軟件能夠運行在新的芯片上。作為一個設計規范,所有的x86系列處理器,除嵌入式Intel80387之外,都是系統啟動工作在實模式下,確保遺留下的操作系統向下兼容。它們都必須被啟動程序(操作系統程序最初運行代碼)重新設置而相應進入保護模式的,在這之前任何的保護模式特性都是無效的。在現代計算機中,這種匹配進入保護模式是操作系統啟動時最前沿的動作之一。
在被調停的多道任務程序中,它可以從新工作在實模式下是相當可能的。保護模式的特性是阻止被其他任務或系統內核破壞已經不健全的程序的運行,保護模式也有對硬件的支持,例如中斷運行程序,移動運行進程文檔到另一個進程和置空多任務的保護功能。
386及以后系列處理器不僅具有保護模式又具有32位寄存器,結果導致了處理功能的混亂,因為80286雖然支持保護模式,但是它的寄存器都是16位的,它是通過自身程序設定而模擬出的32位,并非32位寄存器處理。歸咎于這種混亂現象,它促使Windows/386及以后的版本徹底拋棄80286的虛擬保護模式,以后保護模式的操作系統都是運行在80386以上,不再運行在80286(盡管80286模式支持保護模式),所以說80286是一個過渡芯片,它是一個過渡產品。
如果要訪問更多的內存,則必須進入保護模式。
實模式和保護模式的區別:從表面上看,保護模式和實模式并沒有太大的區別,二者都使用了內存段、中斷和設備驅動來處理硬件,但二者有很多不同之處。我們知道,在實模式中內存被劃分成段,每個段的大小為64KB,而這樣的段地址可以用16位來表示。內存段的處理是通過和段寄存器相關聯的內部機制來處理的,這些段寄存器(CS、DS、 SS和ES)的內容形成了物理地址的一部分。具體來說,最終的物理地址是由16位的段地址和16位的段內偏移地址組成的。用公式表示為:物理地址=左移4位的段地址+偏移地址。
在保護模式下,段是通過一系列被稱之為“描述符表”的表所定義的。段寄存器存儲的是指向這些表的指針。用于定義內存段的表有兩種:全局描述符表(GDT) 和局部描述符表(LDT)。GDT是一個段描述符數組,其中包含所有應用程序都可以使用的基本描述符。在實模式中,段長是固定的(為64KB),而在保護模式中,段長是可變的,其最大可達4GB。LDT也是段描述符的一個數組。與GDT不同,LDT是一個段,其中存放的是局部的、不需要全局共享的段描述符。每一個操作系統都必須定義一個GDT,而每一個正在運行的任務都會有一個相應的LDT。每一個描述符的長度是8個字節,格式如圖3所示。當段寄存器被加載的時候,段基地址就會從相應的表入口獲得。描述符的內容會被存儲在一個程序員不可見的影像寄存器(shadow register)之中,以便下一次同一個段可以使用該信息而不用每次都到表中提取。物理地址由16位或者32位的偏移加上影像寄存器中的基址組成。
轉載于:https://www.cnblogs.com/boyangx/p/4153725.html
總結
以上是生活随笔為你收集整理的Linux下的实模式和保护模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rcnn spp_net hcp
- 下一篇: ASP.NET MVC3 学习心得---