日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制

發(fā)布時(shí)間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇文章學(xué)習(xí)了段描述符與段描述符各個(gè)標(biāo)志位的含義:段描述符

本篇文章學(xué)習(xí)如何進(jìn)入保護(hù)模式,并學(xué)習(xí)如何在保護(hù)模式下進(jìn)行內(nèi)存訪問。

1、如何進(jìn)入保護(hù)模式

假設(shè)我們已經(jīng)用匯編語言將段描述符安裝到GDT中(具體的匯編代碼在后面的文章中會(huì)給出),并且也已經(jīng)將GDTR的線性地址與界限值加載到了GDTR中。現(xiàn)在前期的準(zhǔn)備已經(jīng)準(zhǔn)備好了,可以直接進(jìn)入到保護(hù)模式了。那么如何進(jìn)入到保護(hù)模式呢?

控制實(shí)模式與保護(hù)模式切換的一個(gè)控制器是CR0寄存器。CR0是處理器內(nèi)部的一個(gè)控制寄存器。

CR0是32位寄存器。如下圖:

它的第一位(位0)是保護(hù)模式允許位(PE位)。如果把該位置1,則處理器進(jìn)入保護(hù)模式的規(guī)則下運(yùn)行。其他位暫時(shí)不用,所以顯示的空白。以后學(xué)習(xí)過程中會(huì)繼續(xù)學(xué)習(xí)。

好了,只要我們?cè)賲R編代碼中將CR0寄存器的PE位置1,則進(jìn)入保護(hù)模式的規(guī)則。現(xiàn)在假設(shè)我們已經(jīng)進(jìn)入了保護(hù)模式。

2、進(jìn)入保護(hù)模式后如何訪問內(nèi)存

2.1、32位處理器的段寄存器

我們很清楚16位的8086處理器的是如何通過段寄存器來訪問內(nèi)存的。

在保護(hù)模式下,32位的處理器中。段寄存器有所變化。如下圖是32位處理器的段寄存器:

每個(gè)段寄存器的前16位于8086的寄存器一樣,在實(shí)模式下,他們用傳統(tǒng)的方式訪問1M內(nèi)存,使用方法沒有變化。

同時(shí)每個(gè)段寄存器還包括一個(gè)不可見的部分,如上述圖的紅色部分,稱為描述符高速緩存器,用來存放所要訪問的段的線性地址、段界限和屬性。

說它不可見是因?yàn)橹挥刑幚砥骺梢栽L問,只能是處理器來使用。

那么保護(hù)模式下,是如何聽過上述的段寄存器訪問內(nèi)存的呢?

在保護(hù)模式中,前16位的段寄存器稱為段選擇器。 將段描述符在GDT中的索引號(hào)傳送給段選擇器。

如下圖所示,是段選擇器里的內(nèi)容。

在保護(hù)模式下訪問一個(gè)段時(shí),傳送到段選擇器的是段選擇子。它由上述三部分組成。

  • 描述符索引: 用來在描述符表(GDT)中找到一個(gè)段描述符。
  • TI :描述符表指示器。TI=0時(shí),表示描述符在GDT中。TI=1時(shí)表示描述符在LDT中。LDT是局部描述符表,在后面會(huì)有所介紹。
  • RPL :請(qǐng)求特權(quán)級(jí),表示給出當(dāng)前選擇字的能程序的特權(quán)級(jí),正式該程序要訪問這個(gè)內(nèi)存段。

2.2、開始訪問內(nèi)存

到了這里,我們知道了段選擇器的作用,就是用來索引段描述符的。現(xiàn)在還不知道描述符高速緩存器的作用呢??? 不著急,馬上就來。

假設(shè)現(xiàn)在我們要訪問的是數(shù)據(jù)段。

DS寄存器的段選擇器中存放的是數(shù)據(jù)段描述符在GDT中的索引號(hào),而GDTR寄存器又保存的是GDT的基地址。GDT中每一個(gè)描述符的大小是8字節(jié)。那么訪問數(shù)據(jù)段的內(nèi)容,就如下圖所示了:

在第一次訪問數(shù)據(jù)段的時(shí)候, 首先將之前傳送到段選擇器的段選擇子部分的描述符的索引號(hào)乘以8,得到描述符在GDT中的偏移地址。再用這個(gè)偏移地址加上GDT的基地址GDTR指向的內(nèi)容,就可以訪問到內(nèi)存中的段。

如果沒有發(fā)現(xiàn)什么問題,就自動(dòng)的找到數(shù)據(jù)段描述符,將它加載到段寄存器的描述符高速緩存部分。加載的部分包括數(shù)據(jù)段的線性地址、段界限、與訪問屬性。

此后,如果再有訪問數(shù)據(jù)段的內(nèi)存操作,處理器直接訪問段寄存器的描述符高速緩存部分的內(nèi)容,而不用像開始那樣還用段選擇子部分的描述符索引號(hào)乘以8加上GDTR指向的GDT基地址。不用那么麻煩了,以后如果還訪問數(shù)據(jù)段,直接在數(shù)據(jù)段的描述符高速緩存中查找段的地址以及訪問屬性即可。

比如接下來如果有一條指令mov byte [0x00],'P' 假設(shè)現(xiàn)在的DS中的描述符高速緩存存的數(shù)據(jù)段的線性地址是 0x000B8000,那么上述指令的訪問就如下圖所示:

不只是訪問數(shù)據(jù)段。訪問代碼段也是與上述過程類似。只不過指令的偏移地址一般是由EIP寄存器指定。那么訪問一個(gè)內(nèi)存中的指令大概就是下面的過程:

到了這里,我們已經(jīng)很明白段寄存器中的描述符高速緩存的作用。它其實(shí)就是一個(gè)cache的作用。

3、總結(jié)

本篇文章有點(diǎn)繞。但是只要很用心的看,多看幾遍,肯定會(huì)看明白保護(hù)模式下的內(nèi)存訪問機(jī)制。

筆記記得不是很全,如果有不懂的可以加我聯(lián)系方式一起交流。

學(xué)習(xí)探討加個(gè)人:
qq:1126137994
微信:liu1126137994

總結(jié)

以上是生活随笔為你收集整理的【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。