Windows的保護模式 (轉)
孫喜明
一般來說,80x86(80386及其以後的各代)可以在三種模式下運轉:真實模式,保護模式,V86模式。真實模式就是古老的MS-DOS的執行環境。Win95只利用了兩種模式:保護模式和V86模式。
為什麼要進入保護模式
保護模式有許多優越性。其中最最直接的好處就是:你的可以利用更多的了!
不要以為這是什麼大不了的問題,我相信每一個曾在MS-DOS下寫程式的人都有一個苦惱:怎樣在程式中開個足夠大的陣列?動不動就會堆疊,許多事都不能做了。不要怨Turbo C、MS Fortran、Turbo Pascal,它們也是心有餘而力不足。這些煩惱都源自“你的程式是執行在真實模式下的”。執行在真實模式下的16位程式最多隻能存取1M的記憶體。你也許會問:我的機器上不是有64M記憶體嗎?是啊,如果說你是在MS-DOS下執行程式(或者說CPU運轉在真實模式下),那你只利用了1M記憶體,其餘的記憶體都“下崗”了,在這種情況下,你的386/486/586/PⅡ只相當於一個跑得快的8086。
但是保護模式給了我們一個驚喜。理論上,在保護模式下,CPU可以定址4096M(即4GB)記憶體。這就是說,只需把你的程式編譯成32位的可程式(當然得藉助32位),你就可以在程式中充分利用記憶體了,這樣做的直接結果是:你可以不用再為堆疊溢位或開不出5000×5000的陣列而吃不下飯了。
正是4GB記憶體存取的實現,使得操作有了更加智慧化的物質基礎,多工的實現才可以提到日程上來考慮了。
再深入一些
從結構上說,386由三個暫存器CR0、CR1、CR2控制著CPU的運轉。比如說,CR0的第0位就是用來判斷當前CPU是工作在保護模式還是真實模式下。學過8088/8086語言的人一定熟悉AX、BX、CX、DX、SI、DI、SP、BP這些16位的暫存器,在80386中,這些暫存器被擴充套件到了32位,即EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP,如果CPU是運轉在真實模式下,那你只能利用這些32位暫存器的前16位,而後面的16位就浪費了。
段的概念是我們理解保護模式的關鍵所在。在真實模式下,段暫存器中存放著16位的段地址,這時,段地址是參與定址的:把段地址左移4位,加上偏移地址,就是20位的實體地址了。在保護模式下,段暫存器中存放著16位的段選擇器(Segment or),這個值是不直接參與定址的,而只是一個指向段描述表(Segment Descriptor Table)的。段描述表(Segment Descriptor Table)中存放著段描述符(Segment Descriptor)。段描述符中有關於段的描述,比如:段在記憶體中的位置、段的大小、段的型別(是資料段還是程式碼段)等等。
當CPU執行在保護模式下時,記憶體中往往有至少三張段描述表:全域性描述表(Global Descriptor Table,簡稱GDT)、區域性描述表(Local Descriptor,簡稱LDT)、中斷描述表(Interrupt Descriptor Table,簡稱IDT)。說到這裡,我想提醒讀者注意:記住GDT、LDT、IDT這三個詞的含義,我們在後面會經常用到。
段描述表不可能超過64K(為什麼?如果回答不上來,那就再看看前面的講解),每個段描述符(也就是段描述表中的一項)都是8byte長,所以說,每個段描述表最多隻能包含8192個段描述符。
在今後的“走進VxD世界”中,我們將對段描述表、段描述符以及分頁機制作進一步的講解。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989367/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 保護模式知識(三) (轉)模式
- 保護模式模式
- DG的保護模式模式
- 80386保護模式簡介(轉)模式
- 保護模式下的特權級檢查 (轉)模式
- 真實模式和保護模式模式
- 讓應用程式禁止Windows螢幕保護 (轉)Windows
- 【DG】DG的3種保護模式模式
- 保護性暫停模式模式
- dataguard三種保護模式模式
- DataGuard切換保護模式模式
- 保護模式:段機制模式
- 圖解CPU的真實模式與保護模式圖解模式
- 0gR2最大保護模式DataGuard建立 (轉載)模式
- Windows8系統保護的作用Windows
- 保護模式篇——PAE分頁模式
- 利用Windows外殼擴充套件保護資料夾 (轉)Windows套件
- Data Guard 的3種資料保護模式模式
- 保護模式篇——總結與提升模式
- Linux從頭學08:Linux 是如何保護核心程式碼的?【從真實模式到保護模式】Linux模式
- Windows安全保護機制下對埠的操作Windows
- Data Guard的三種保護模式(摘自官方文件)模式
- 聊聊Dataguard的三種保護模式實驗(上)模式
- 聊聊Dataguard的三種保護模式實驗(下)模式
- 6 Oracle Data Guard Protection Modes 保護模式Oracle模式
- DG學習筆記(7)_保護模式筆記模式
- Win10系統怎樣關閉Windows檔案保護 win10關閉windows檔案保護的步驟Win10Windows
- 保護SQL Server的十個步驟(轉)SQLServer
- redis配置檔案中的保護模式protected-modeRedis模式
- DG中3種保護模式之間的切換模式
- Win10系統解除qq保護模式的方法Win10模式
- Oracle9iR2 Data Guard的保護模式(ZT)Oracle模式
- 呼叫系統螢幕保護 (轉)
- 智取螢幕保護密碼(轉)密碼
- x64 番外篇——保護模式相關模式
- ORACLE10G DG中資料保護模式Oracle模式
- 建立 oracle data gurd 以及三種保護模式Oracle模式
- 【DataGuard】Oracle DataGuard 資料保護模式切換Oracle模式