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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 保護模式模式
- 保護模式:段機制模式
- 保護性暫停模式模式
- 圖解CPU的真實模式與保護模式圖解模式
- 保護模式篇——PAE分頁模式
- Linux從頭學08:Linux 是如何保護核心程式碼的?【從真實模式到保護模式】Linux模式
- 保護模式篇——總結與提升模式
- 6 Oracle Data Guard Protection Modes 保護模式Oracle模式
- Win10系統怎樣關閉Windows檔案保護 win10關閉windows檔案保護的步驟Win10Windows
- redis配置檔案中的保護模式protected-modeRedis模式
- EOCR-SE2電動機保護器失速與堵轉保護功能的使用方法
- windows10系統開啟系統保護的方法Windows
- x64 番外篇——保護模式相關模式
- windows10系統保護的關閉方法【圖文教程】Windows
- 使用Broker管理Data Guard——停用、改保護模式等模式
- win10桌面眼睛保護模式怎麼開啟_win10設定電腦眼睛保護模式步驟Win10模式
- 如何保護Windows網路免受勒索軟體攻擊Windows
- 小心設定啟動項保護Windows系統安全Windows
- 精密進近復飛轉彎保護區的繪製(三)
- 保護期限
- Windows 10 十月更新 | 有望提供勒索軟體保護Windows
- windows10系統關閉dep資料執行保護的方法Windows
- lua保護的前世今生
- 滴水中級班保護模式階段測試作業模式
- 【等級保護】等級保護共分為幾級?保護物件是指什麼?物件
- 【科普】等級保護與分級保護的區別和聯絡!
- gitlab分支保護Gitlab
- Linux中的保護機制Linux
- 流的破壞與保護
- Java併發(二十三)----同步模式之保護性暫停Java模式
- 10g DG保護模式的切換:從最大效能到最大可用模式
- win10 保護眼睛的方法 win10 保護眼睛怎麼設定Win10
- 驅動除錯——挫敗 QQ.EXE 的核心模式保護機制(part I)除錯模式
- 森林-環境保護
- 保護網站安全網站
- 資料庫保護資料庫
- 敏感資訊保護
- TypeScript 型別保護TypeScript型別
- 聊聊 TypeScript 中的型別保護TypeScript型別