成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起學(xué)習(xí)實模式和保護(hù)模式

開發(fā) 前端
了解匯編的同學(xué)可能知道匯編代碼中會把代碼分成很多段,有代碼段、數(shù)據(jù)段等。這樣程序在載入內(nèi)存時也是分成不同的段載入內(nèi)存的。這樣取指令時就需要找到段的基址,然后再確定偏移,就能得出指令的地址。

今天我們就系統(tǒng)的講下實模式和保護(hù)模式。我覺得能很形象的說明保護(hù)模式存在的意義。先看下面這段代碼。

int main()
{
int* addr = (int*)0;
cli(); //關(guān)中斷
while(1)
{
*addr = 0;
addr++;
}
return 0;
}

這段代碼如果能順利執(zhí)行,其實是很可怕的。你會發(fā)現(xiàn)他直接的獲取到了內(nèi)存的 0 號位置,并且能順序的向下遍歷,然后還能直接的對內(nèi)存寫入數(shù)據(jù),對了,這段代碼還把中斷關(guān)了。想象一下,如果你和幾個用戶一起用一臺服務(wù)器,一旦有個用戶執(zhí)行完這段代碼后,那么所有人還在內(nèi)存中的數(shù)據(jù)將被刪的干干凈凈,并且在刪的過程中還沒有任何辦法去中斷這段代碼對應(yīng)的進(jìn)程。

這段代碼的工作方式就是實模式的工作方式。實模式的特點主要在于實模式的尋址方式,實模式的尋找方式進(jìn)而決定了實模式在尋址范圍以及保護(hù)性上都不如保護(hù)模式好。目前實模式的存在主要是為了兼容之前的系統(tǒng),在操作系統(tǒng)讀入bootsect.s 以及執(zhí)行 bootsect.s 進(jìn)行 setup 和 system 讀入階段是在實模式下執(zhí)行,之后都是在保護(hù)模式下執(zhí)行了。我們接下來分別看實模式和保護(hù)模式的工作方式。

Part1實模式

今天詳細(xì)講一下載入過程。正好我們來感受下實模式是如何工作的。

首先說實模式應(yīng)該如何表示指令在內(nèi)存的位置,實模式下通過 ”CS“ 和 ”IP“ 兩個寄存器來表示位置,CS 寄存器存段基指,IP 寄存器存偏移。這里簡單介紹下為什么要用段表示。了解匯編的同學(xué)可能知道匯編代碼中會把代碼分成很多段,有代碼段、數(shù)據(jù)段等。這樣程序在載入內(nèi)存時也是分成不同的段載入內(nèi)存的。這樣取指令時就需要找到段的基址,然后再確定偏移,就能得出指令的地址。具體方式是把 CS 寄存器中的值取出來向左偏移 4 位,然后加上 IP 偏移的值。比如要得到 BIOS 的地址,那么從CS寄存器得到的段基址就是 0xFFFF,IP 取出的偏移是 0x0000。CS偏移 4 位加 IP 就是 0xFFFF0(地址的表示是16進(jìn)制的,但左移四位說的是二進(jìn)制的偏移,十六進(jìn)制偏移一位和二進(jìn)制偏移四位效果是一樣的)。這樣,BIOS的位置就找到了,接下來取出指令并執(zhí)行就好了。

圖片

CS寄存器中的值取出來后先偏移 4 位就是因為 CS 寄存器和 IP 寄存器都是16位的,16位只能表示 64k 的大小。將 CS 向左移4位加上偏移,就能用20位表示地址了,尋址范圍能達(dá)到 1M。

雖然通過將從CS寄存器中取出的段基址左移四位后尋址范圍增加了,達(dá)到1M,但對于現(xiàn)代的計算機(jī)來說尋址范圍實在太小了(就算是32位的計算機(jī) CS 寄存器也是16位的),這就是實模式下的一大缺點。我們再看看保護(hù)模式是怎么做的。

Part2保護(hù)模式

對于 32 位的計算機(jī),如果內(nèi)存尋址只能尋到 1M,顯然太小了。理論上,32 位的計算機(jī)適配的地址線也有 32 位,我們應(yīng)該以 32 位的地址去表示地址。但是為了適配之前的系統(tǒng)(現(xiàn)在的操作系統(tǒng)在加載 BIOS,用 BIOS 執(zhí)行載入 bootsect.s 等一直用著上面所表述的實模式的尋址方式),CS 這個段寄存器一直就是 16位 的,只是存偏移的那個寄存器多了一個叫 EIP 的 32 位的寄存器。為了讓尋址適應(yīng)這個變化,CS 寄存器存的不再是真實的段基址了,而是段選擇子,其中段選擇子的 0-2 位用作權(quán)限控制,3-15 記錄的是 GDT 表的索引。

拿到段選擇子后就可以通過選擇子找到段描述符,然后再通過段描述符(GDT表)找到相應(yīng)的段基址,然后再把段基址和偏移相加就是真實的地址了。

這個 GDT 表可是有大用,不光解決尋址的問題,對于內(nèi)存的保護(hù)也可以靠他。

圖片

這個段描述符中段長和段基址都是斷開的,這是由于歷史原因構(gòu)成的,咱們還是主要看段描述符中的內(nèi)容以及對應(yīng)的功能。段長度可以限定段內(nèi)偏移地址,也就是說你拿到一個段基址后只能在這個界限內(nèi)偏移,如果偏移超過限定值訪問就不合法了。段基址就和實模式下的段基址一樣,只是現(xiàn)在有了32位的段基址。描述方面主要是對段的可讀可執(zhí)行,代碼段還是數(shù)據(jù)段進(jìn)行描述,另外描述中有一個相當(dāng)重要的就是 DPL,這個 DPL 限定了權(quán)限級別,只有段選擇子中記錄的發(fā)起訪問者的訪問權(quán)限滿足 DPL 的限定,才能訪問。

不難看出,GDT 表對相應(yīng)的段的可讀可寫以及段是代碼段還是數(shù)據(jù)段等情況都做了詳細(xì)的描述,每次通過段選擇子找到段描述符時,都會判斷能不能訪問成功。

下面通過流程圖看下保護(hù)模式的完整取指過程。

圖片

責(zé)任編輯:武曉燕 來源: CS指南
相關(guān)推薦

2024-01-01 08:19:32

模式History前端

2021-05-31 09:23:04

管道模式責(zé)任鏈

2023-08-07 08:04:05

動態(tài)抽象工廠模式

2023-07-31 12:27:30

單例設(shè)計模式

2023-06-20 07:27:07

架構(gòu)組件插件

2021-05-19 10:37:16

WebFlux 前置工具

2022-02-14 10:16:22

Axios接口HTTP

2023-07-06 00:45:05

Linux保護(hù)模式

2025-04-08 00:16:07

2023-12-28 09:55:08

隊列數(shù)據(jù)結(jié)構(gòu)存儲

2021-11-26 09:44:42

鏈表節(jié)點定位

2021-05-20 07:15:34

RSA-PSS算法簽名

2022-12-01 09:59:57

內(nèi)核觀測性方法

2023-03-28 07:32:37

2023-03-26 12:45:52

Linux內(nèi)核頭文件

2022-04-07 11:43:24

UPnPDLNA協(xié)議

2023-05-31 08:42:02

管理產(chǎn)品技術(shù)項目

2021-10-11 10:25:33

排列nums數(shù)組

2021-03-18 00:04:13

C# 類型數(shù)據(jù)

2022-03-31 18:59:43

數(shù)據(jù)庫InnoDBMySQL
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品中文字幕av | 亚洲国产一区二区在线 | 免费在线观看一区二区三区 | 国产玖玖| 久久精品国产99国产 | 中文字幕在线观 | 欧美国产精品一区二区 | 最新国产精品视频 | 亚洲男人天堂 | 97精品超碰一区二区三区 | 欧美一区二区另类 | 国产精品揄拍一区二区 | 久久尤物免费一区二区三区 | 国产乱肥老妇国产一区二 | 久久久久www | 丁香婷婷综合激情五月色 | 国产高清久久久 | 久久久www成人免费精品 | 国产电影一区二区在线观看 | 国产精品成人久久久久 | 欧美精品久久 | 在线日韩欧美 | 黄a在线播放 | 久久里面有精品 | 国产免费播放视频 | 91视频入口| wwwxx在线观看| 久久精品国产99国产精品 | 欧美伊人久久久久久久久影院 | 极品在线 | 亚洲成人三级 | av国产精品 | 亚洲福利网 | 91玖玖| 国产精品久久一区二区三区 | 在线色| 国产精品99视频 | 国产精品夜夜夜一区二区三区尤 | 国产美女精品视频 | 久在线观看 | 色婷婷av一区二区三区软件 |