OS的幾種模式:實模式、保護模式、虛擬8086模式

 今天大家不由自主的聊起了OS的模式,順便筆記一下,有其它的內容,請看到的朋友請補充。

      從80386開始,cpu有三種工作方式:實模式,保護模式和虛擬8086模式。只有在剛剛啓動的時候是real-mode,等到linux操作系統運行 起來以後就運行在保護模式。實模式只能訪問地址在1M以下的內存稱爲常規內存,我們把地址在1M 以上的內存稱爲擴展內存。在保護模式下,全部32條地址線有效,可尋址高達4G字節的物理地址空間; 擴充的存儲器分段管理機制和可選的存儲器分頁管理機制,不僅爲存儲器共享和保護提供了硬件支持,而且爲實現虛擬存儲器提供了硬件支持; 支持多任務,能夠快速地進行任務切換和保護任務環境; 4個特權級和完善的特權檢查機制,既能實現資源共享又能保證代碼和數據的安全和保密及任務的隔離; 支持虛擬8086方式,便於執行8086程序。

      虛擬8086模式是運行在保護模式中的實模式,爲了在32位保護模式下執行純16位程序。它不是一個真正的CPU模式,還屬於保護模式。

      保護模式同實模式的根本區別是進程內存受保護與否。可尋址空間的區別只是這一原因的果。實模式將整個物理內存看成分段的區域,程序代碼和數據位於不同 區域,系統程序和用戶程序沒有區別對待,而且每一個指針都是指向"實在"的物理地址。這樣一來,用戶程序的一個指針如果指向了系統程序區域或其他用戶程序 區域,並改變了值,那麼對於這個被修改的系統程序或用戶程序,其後果就很可能是災難性的。爲了克服這種低劣的內存管理方式,處理器廠商開發出保護模式。這 樣,物理內存地址不能直接被程序訪問,程序內部的地址(虛擬地址)要由操作系統轉化爲物理地址去訪問,程序對此一無所知。

      至此,進程(這時我們可以稱程序 爲進程了)有了嚴格的邊界,任何其他進程根本沒有辦法訪問不屬於自己的物理內存區域,甚至在自己的虛擬地址範圍內也不是可以任意訪問的,因爲有一些虛擬區 域已經被放進一些公共系統運行庫。這些區域也不能隨便修改,若修改就會有: SIGSEGV(linux 段錯誤);非法內存訪問對話框(windows 對話框)。

      CPU啓動環境爲16位實模式,之後可以切換到保護模式。但從保護模式無法切換回實模式
     
     事實上,現在的64位奔騰4處理器,擁有三種基本模式和一種擴展模式,
     基本模式:
                 保護模式:純32位保護執行環境。
                 實模式:純16位無保護執行環境。
                 系統管理模式:當SMI引腳爲有效進入系統管理模式,首先保存當前的CPU上下文。它有獨立的地址空間,用來執行電源管理或系統安全方面的指令。
     擴展模式:
            IA-32e模 式: 64位操作系統運行在該模式。該模式有兩種子模式:
                                   1)兼容模式:該模式下,64位操作系統運行在32位兼容環境,能正常運行16,32位應用程序就像基本的保護模式一樣,
                                                        訪問32位地址空間,但不能 運行純16位實模式程序(就是不能運行虛擬86模式程序了)。
                                   2)64位模式:在該模式下,處理器完全執行64位指令,使用64位地址空間和64操作數,運行16,32位程序必須切換到兼容模式。
                 IA-32e子模式的切換完全基於代碼段寄存器。這樣一來,運行在IA-32e模式中(64位)的OS完全可以無縫的運行所有16,32,64爲應用程序,
                 通過設置32位後的CS。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章