chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CPU怎么訪(fǎng)問(wèn)代碼和數(shù)據(jù)

科技綠洲 ? 來(lái)源:Linux開(kāi)發(fā)架構(gòu)之路 ? 作者:Linux開(kāi)發(fā)架構(gòu)之路 ? 2023-11-08 17:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

程序經(jīng)過(guò)編譯后,變成了可執(zhí)行的文件,可執(zhí)行文件主要包括代碼和數(shù)據(jù)兩部分,代碼是只讀的,數(shù)據(jù)則是可讀可寫(xiě)的。

可執(zhí)行文件由操作系統(tǒng)加載到內(nèi)存中,交由CPU去執(zhí)行,現(xiàn)在問(wèn)題來(lái)了,CPU怎么去訪(fǎng)問(wèn)代碼和數(shù)據(jù)?,訪(fǎng)問(wèn)的方式經(jīng)歷過(guò)四個(gè)階段:

1.直接訪(fǎng)問(wèn)

2.段基址+段偏移地址

3.段選擇子+段偏移地址

4.虛擬地址

現(xiàn)代操作系統(tǒng)采用的是虛擬地址,這也是本篇文章闡述的重點(diǎn),但虛擬地址是由13階段發(fā)展而來(lái)的,所以也有必要闡述13三種訪(fǎng)問(wèn)方式。

直接訪(fǎng)問(wèn)

直接訪(fǎng)問(wèn)很好理解,程序經(jīng)過(guò)編譯后,生成了可執(zhí)行文件,編譯器給每行數(shù)據(jù)和代碼分配了一個(gè)唯一的地址,如下圖

圖片

可執(zhí)行文件

如上圖可執(zhí)行文件中10001024之間的地址,加載到內(nèi)存后,內(nèi)存的地址也是10001024,在可執(zhí)行文件中分配的唯一地址就是內(nèi)存中的物理地址,這就叫直接訪(fǎng)問(wèn),直接定訪(fǎng)問(wèn)干脆直接,沒(méi)有那些彎彎繞。

當(dāng)時(shí)問(wèn)題也不少,例如同一個(gè)可執(zhí)行文件不能同時(shí)執(zhí)行,它們的物理地址一樣,沖突了,必須一個(gè)接一個(gè),還有就是可執(zhí)行文件的物理地址已經(jīng)固定了,如果想在其它物理地址運(yùn)行,必須地重新編譯,生成新的物理地址。

可見(jiàn)直接定位是計(jì)算機(jī)發(fā)展早期的產(chǎn)物,早期沒(méi)有那么多的程序要運(yùn)行,程序都是一個(gè)接一個(gè)地去執(zhí)行的,因此早期這種定位比較簡(jiǎn)單,直接高效。

段基址+段偏移地址

隨著多任務(wù)需求的來(lái)臨,現(xiàn)在內(nèi)存中要并發(fā)運(yùn)行多個(gè)程序,雖然采用直接定位把每個(gè)不同的程序放在不同的內(nèi)存段中,勉強(qiáng)可以滿(mǎn)足,但是一個(gè)可執(zhí)行文件不能同時(shí)運(yùn)行多個(gè),另外程序必須在固定的物理地址運(yùn)行,靈活性大大減弱,調(diào)度起來(lái)也是非常麻煩,因此CPU設(shè)計(jì)師和操作系統(tǒng)開(kāi)發(fā)人員發(fā)明了段基址+段偏移地址。

Inter 8086處理器就是采用這種定位方式,我們知道可執(zhí)行文件主要分為數(shù)據(jù)段和內(nèi)存段,如下圖

圖片

由上圖紅色部分可知,0,4,8就是相對(duì)于數(shù)據(jù)段的偏移地址,0,4,8,12是相對(duì)于代碼段的偏移地址。

在可執(zhí)行文件中,一個(gè)段的偏移地址是固定的,無(wú)論可執(zhí)行文件加載到內(nèi)存的什么位置,這個(gè)偏移地址是固定的。

當(dāng)可執(zhí)行文件加載到內(nèi)存時(shí),先在內(nèi)存中分配一個(gè)數(shù)據(jù)段和代碼段,這兩個(gè)段理論上可以不挨著,一般情況下,代碼段和數(shù)據(jù)段是挨著的,代碼段和數(shù)據(jù)段在內(nèi)存中都有一個(gè)起始地址,這個(gè)起始地址就叫做段基址,這個(gè)段基址是放在段寄存器里,例如代碼段基址放在CS寄存器,數(shù)據(jù)段基址放在DS寄存器,當(dāng)然還有其他的段例如棧段,棧段剛開(kāi)始大小為0,隨著程序的運(yùn)行入棧,出棧,這個(gè)棧段在不斷擴(kuò)展,當(dāng)然,咋們主要說(shuō)的是數(shù)據(jù)段和代碼段,棧段只是簡(jiǎn)單帶過(guò)。

假設(shè)可執(zhí)行文件被加載到了內(nèi)存中,如下圖

圖片

如上圖所示,代碼段被布局到以0x00600000為起始地址的內(nèi)存中,數(shù)據(jù)段被布局到以0x00601000為起始地址的內(nèi)存中。

當(dāng)CPU開(kāi)始執(zhí)行代碼段的第一條指令時(shí),會(huì)將代碼段的起始地址放入到段寄存器中,此時(shí)CS代碼段寄存器中存儲(chǔ)的就是0x00600000,然后開(kāi)始從起始地址處開(kāi)始執(zhí)行第一條代碼指令,此時(shí)把代碼指令的偏移地址放入到IP寄存器中,IP寄存器存儲(chǔ)的就是0,所以CPU要定位一條代碼指令時(shí)通過(guò)CS:IP的方式定位的,如下圖所示

圖片

定位指令

當(dāng)CPU執(zhí)行到0x00600000處的代碼指令時(shí),該指令為MOV AX,[0],該指令的意思是把地址0處的數(shù)據(jù)存儲(chǔ)到AX寄存器,這個(gè)0就是數(shù)據(jù)段的偏移地址,此時(shí)CPU會(huì)將數(shù)據(jù)段的起始地址加入到DS段寄存器中,然后將數(shù)據(jù)段寄存器的值+偏移地址即0x00601000+0=0x00601000定位到了數(shù)據(jù)123,然后將123存儲(chǔ)到AX寄存器中。

圖片

定位數(shù)據(jù)

上述過(guò)程就是【段基址+段偏移地址】的定位方式,之所以把起始地址加入到寄存器中,也是為了后續(xù)再執(zhí)行指令或者獲取數(shù)據(jù)時(shí),可以直接從寄存器獲取,加快CPU執(zhí)行的速度。

段選擇子+段偏移地址

【段選擇子+段偏移地址】與【段基址+段偏移地址】有些相似之處,之所以采用【段選擇子+段偏移地址】主要是為了安全,原來(lái)的【段基址+段偏移地址】方式,程序員可以直接跳轉(zhuǎn)到其他代碼段和數(shù)據(jù)段,沒(méi)有任何限制,安全性全依賴(lài)于程序員的職業(yè)操守和水平,因此CPU設(shè)計(jì)者就發(fā)明了【段選擇子+段偏移地址】。

【段選擇子+段偏移地址】中的段選擇子可以認(rèn)為是一個(gè)索引,這個(gè)索引指向了全局段描述符表中的一項(xiàng),全局段描述表存儲(chǔ)在內(nèi)存中,它的起始地址存儲(chǔ)在全局段描述符寄存器中。

全局段描述符表有很多個(gè)段描述符,每個(gè)段描述占用8個(gè)字節(jié),這個(gè)段描述符里面就包括了段基址,另外還有一些安全性相關(guān)的描述信息例如段的可讀,可寫(xiě),可執(zhí)行,段的大小等。

段選擇子存儲(chǔ)在了段寄存器中,總共16位,其中高13位就是全局段描述表的索引。

當(dāng)CPU開(kāi)始執(zhí)行代碼段的第一條指令時(shí),會(huì)將代碼段的選擇子放入到CS段寄存器中,然后CPU從段寄存器中的獲取段選擇子,然后截取選擇子的高13位獲取索引,然后根據(jù)全局描述符表寄存器的地址找到全局描述符表的起始地址,根據(jù)起始地址+索引*8找到段描述符,然后根據(jù)段描述符獲取段的基址,段的基址加上ip寄存器中的偏移地址就是指令的物理地址,如下圖所示1~6步驟所示

圖片

定位指令

當(dāng)CPU執(zhí)行到0x00600000處的代碼指令時(shí),該指令為MOV AX,[0],該指令的意思是把地址0處的數(shù)據(jù)存儲(chǔ)到AX寄存器,這個(gè)0就是數(shù)據(jù)段的偏移地址,此時(shí)CPU會(huì)將數(shù)據(jù)段的選擇子加入到DS段寄存器中,然后CPU獲取段選擇的高13位獲取索引,然后根據(jù)全局描述符表寄存器的地址找到全局描述符表的起始地址,根據(jù)起始地址+索引*8找到段描述符,然后根據(jù)段描述符獲取段的基址,段的基址加上數(shù)據(jù)段的偏移地址就是數(shù)據(jù)的物理地址,如下圖1~6步驟所示

圖片

定位數(shù)據(jù)

上述過(guò)程就是【段選擇子+段偏移地址】的定位方式。

虛擬地址

現(xiàn)代的操作系統(tǒng)和CPU未打開(kāi)分頁(yè)時(shí)采用的是【段選擇子+段偏移地址】訪(fǎng)問(wèn)代碼和數(shù)據(jù),而一旦打開(kāi)分頁(yè)時(shí),經(jīng)過(guò)【段選擇子+段偏移地址】得到的地址不再是物理地址了,而是叫做虛擬地址,默認(rèn)則是打開(kāi)分頁(yè)的。

現(xiàn)代的操作系統(tǒng)和CPU采用的平坦模型,平坦模型就是整個(gè)內(nèi)存就一個(gè)段,因此段基址就是0,段偏移地址就等于虛擬地址了。

下面將從以下幾個(gè)方面來(lái)闡述虛擬地址相關(guān)的話(huà)題。

1.什么是虛擬地址,物理地址,虛擬地址空間,物理地址空間,虛擬內(nèi)存,物理內(nèi)存?

2.什么是進(jìn)程虛擬地址空間?

3.什么是虛擬頁(yè),物理頁(yè)?

4.什么是頁(yè)表?

5.虛擬地址怎么樣訪(fǎng)問(wèn)物理內(nèi)存?

什么是虛擬地址,物理地址,虛擬地址空間,物理地址空間,虛擬內(nèi)存,物理內(nèi)存?

虛擬地址空間是虛擬地址的集合,假設(shè)虛擬地址空間是N位的,它的地址范圍為{02的N次方-1}即它有2的N次方個(gè)虛擬地址,例如16位的虛擬地址空間,它的地址范圍為{065535},這意味著16位的虛擬地址空間有65536個(gè)虛擬地址。

物理地址空間是物理地址的集合,假設(shè)物理地址空間有M個(gè)字節(jié),它的地址范圍為{0M-1},M不一定是2的多少次冪,例如M=100,表示物理地址空間大小為100個(gè)字節(jié),它的地址范圍為{099},通常情況下物理地址空間是2的冪次方,例如65536,這也是為了計(jì)算機(jī)方便處理而已,并不是強(qiáng)制要求的。

物理內(nèi)存可以認(rèn)為是一個(gè)的物理字節(jié)數(shù)組,每個(gè)物理地址指向這個(gè)物理字節(jié)數(shù)組中的一項(xiàng)。

虛擬內(nèi)存也一樣,它也可以認(rèn)為是一個(gè)物理字節(jié)數(shù)組,不過(guò)這個(gè)字節(jié)數(shù)組是存儲(chǔ)在磁盤(pán)上。

物理地址空間是物理內(nèi)存的范圍,虛擬地址空間是虛擬內(nèi)存的范圍,物理地址空間中的每個(gè)物理地址都是實(shí)打?qū)嵉刂赶蛄司唧w的存儲(chǔ)單元,虛擬地址空間中每個(gè)虛擬地址指向哪里有3種情況:

a.未分配,這個(gè)虛擬地址僅僅是個(gè)數(shù)字而已,沒(méi)有任何指向。

b.未緩沖,這個(gè)虛擬地址指向了磁盤(pán)的某個(gè)字節(jié)存儲(chǔ)單元,里面存儲(chǔ)了指令或者數(shù)據(jù)。

c.已緩沖,這個(gè)虛擬地址指向了物理內(nèi)存的某個(gè)字節(jié)存儲(chǔ)單元,里面存儲(chǔ)了指令或者數(shù)據(jù)。

2.什么是進(jìn)程虛擬地址空間?

操作系統(tǒng)加載可執(zhí)行文件后,創(chuàng)建了一個(gè)進(jìn)程,這個(gè)進(jìn)程就有了自己的虛擬地址空間,每個(gè)進(jìn)程的虛擬地址空間都一樣,如下圖所示

圖片

進(jìn)程虛擬地址空間

如上圖所示,進(jìn)程的虛擬地址空間被統(tǒng)一劃分成了多個(gè)固定區(qū)域,例如代碼區(qū),數(shù)據(jù)區(qū),堆區(qū),共享區(qū),棧區(qū),內(nèi)核區(qū)。

代碼區(qū)和數(shù)據(jù)區(qū)域:來(lái)自于可執(zhí)行文件,代碼區(qū)和數(shù)據(jù)區(qū)挨著,代碼區(qū)總是在0x0040000地址以上,0x0040000地址以下另有它用。

運(yùn)行時(shí)堆區(qū)域:它初始化大小為0,隨著動(dòng)態(tài)分配內(nèi)存(malloc),運(yùn)行時(shí)堆不斷往高地址方向擴(kuò)展,有個(gè)指針brk指向了堆的最高地址。

共享庫(kù)的內(nèi)存映射區(qū)域:這個(gè)區(qū)域是一些標(biāo)準(zhǔn)的系統(tǒng)庫(kù),這個(gè)共享庫(kù)在物理內(nèi)存中只存儲(chǔ)一份,每個(gè)進(jìn)程將這個(gè)區(qū)域的虛擬地址映射到同一份共享庫(kù)物理內(nèi)存上。

用戶(hù)棧區(qū)域:這個(gè)區(qū)域緊挨著內(nèi)核區(qū)域,處于高地址處,隨著用戶(hù)棧的出棧,入棧,動(dòng)態(tài)擴(kuò)展,入棧向低地址方向擴(kuò)展,出棧則向高地址方向收縮,棧頂指針存儲(chǔ)在棧寄存器(ESP)中。

內(nèi)核區(qū)域:這個(gè)區(qū)域是操作系統(tǒng)自己代碼,數(shù)據(jù),??臻g,內(nèi)核在物理內(nèi)存中只存儲(chǔ)一份,每個(gè)進(jìn)程將這個(gè)區(qū)域的虛擬地址映射到同一份內(nèi)核物理內(nèi)存上。

圖片

內(nèi)核和共享庫(kù)的映射

3.什么是虛擬頁(yè),物理頁(yè)?

現(xiàn)代操作操作和CPU將物理內(nèi)存按照固定的頁(yè)大小分成很多份,每一份叫做物理頁(yè)(PP),每一份有一個(gè)編號(hào)叫做物理頁(yè)號(hào)(PPN),這個(gè)物理頁(yè)大小通常是4KB,例如一個(gè)物理內(nèi)存大小為20KB,這個(gè)物理內(nèi)存可以分成5個(gè)物理頁(yè),那么物理頁(yè)號(hào)(PPN)就是0,1,2,3,4。

虛擬內(nèi)存也一樣,它的頁(yè)大小與物理內(nèi)存的頁(yè)大小相同,虛擬內(nèi)存也被分成了很多份,每一份叫做虛擬頁(yè)(VP),每一份的編號(hào)叫做虛擬頁(yè)號(hào)(VPN),例如假設(shè)虛擬頁(yè)大小為4KB,一個(gè)虛擬內(nèi)存大小為10KB,這個(gè)虛擬內(nèi)存可以分成2個(gè)虛擬頁(yè)(VP),虛擬頁(yè)號(hào)(VPN)就是0,1

每個(gè)物理頁(yè)存儲(chǔ)在物理內(nèi)存上,每個(gè)虛擬頁(yè)存儲(chǔ)在磁盤(pán)上,如下圖所示

圖片

虛擬內(nèi)存和物理內(nèi)存

上圖的虛擬內(nèi)存有8個(gè)虛擬頁(yè),物理內(nèi)存有6個(gè)物理內(nèi)存頁(yè),虛擬頁(yè)存儲(chǔ)在磁盤(pán)上,物理頁(yè)則存儲(chǔ)在DRARM上。

每個(gè)虛擬頁(yè)可以有三種狀態(tài),未分配,已緩沖,未緩沖

未分配:虛擬頁(yè)還沒(méi)有分配磁盤(pán)空間

已緩沖:虛擬頁(yè)緩沖或者映射在了物理頁(yè)上。

未緩沖:虛擬頁(yè)分配了磁盤(pán)空間,但沒(méi)有在物理頁(yè)上緩沖。

通常操作系統(tǒng)加載可執(zhí)行文件后,創(chuàng)建了一個(gè)進(jìn)程,這個(gè)進(jìn)程就有了虛擬地址空間,這并不意味著可執(zhí)行文件已經(jīng)從磁盤(pán)加載到內(nèi)存中了,操作系統(tǒng)只是為了進(jìn)程虛擬地址空間的每個(gè)區(qū)域分配了虛擬頁(yè)。

代碼和數(shù)據(jù)區(qū)域的虛擬頁(yè)被分配到了可執(zhí)行文件的適當(dāng)位置,此時(shí)虛擬頁(yè)狀態(tài)為未緩沖,虛擬頁(yè)指向了磁盤(pán)地址。

操作系統(tǒng)和共享庫(kù)的虛擬頁(yè)被映射到了物理內(nèi)存,因?yàn)椴僮飨到y(tǒng)和共享庫(kù)已經(jīng)在物理內(nèi)存了,這些虛擬頁(yè)的狀態(tài)為已緩沖。

用戶(hù)棧,運(yùn)行時(shí)堆的虛擬頁(yè)沒(méi)有任何分配,不占用任何空間,這些虛擬頁(yè)的狀態(tài)為未分配。

那么進(jìn)程虛擬地址空間的代碼和數(shù)據(jù),用戶(hù)棧,運(yùn)行時(shí)堆的物理內(nèi)存什么時(shí)候分配呢,答案就是處理器用虛擬地址執(zhí)行代碼,讀取數(shù)據(jù)時(shí),這個(gè)下一章闡述。

虛擬地址訪(fǎng)問(wèn)物理內(nèi)存

先普及幾個(gè)概念:

VPO即虛擬頁(yè)偏移量:

虛擬地址由虛擬頁(yè)號(hào)+虛擬頁(yè)偏移量組成,虛擬頁(yè)偏移量是相對(duì)某個(gè)虛擬頁(yè)的偏移量。

PPO即物理頁(yè)偏移量:

物理地址由物理頁(yè)號(hào)+物理頁(yè)偏移量組成,物理頁(yè)偏移量是相對(duì)某個(gè)物理頁(yè)的偏移量,

VPO等于PPO

頁(yè)表(Page Table)PT:

頁(yè)表是建立虛擬頁(yè)號(hào)和物理頁(yè)號(hào)映射關(guān)系的表結(jié)構(gòu),每個(gè)頁(yè)表項(xiàng)(PTE)包括了有效位,物理頁(yè)號(hào),磁盤(pán)地址等信息,如下圖:

圖片

頁(yè)表與物理內(nèi)存,虛擬內(nèi)存的關(guān)系

由上圖可以得知,操作系統(tǒng)可以根據(jù)頁(yè)表項(xiàng)的有效位和地址信息判斷出虛擬頁(yè)目前所處的狀態(tài)即未分配,已緩沖,未緩沖

如上圖所示,頁(yè)表有8個(gè)頁(yè)表項(xiàng),每個(gè)頁(yè)表項(xiàng)里包含一個(gè)有效位和地址信息。

當(dāng)頁(yè)表項(xiàng) PTE n的頁(yè)表項(xiàng)有效位為0時(shí),表示虛擬頁(yè) n沒(méi)有緩沖在物理內(nèi)存,可能在磁盤(pán)或者未分配,例如PTE 0頁(yè)表項(xiàng)里存儲(chǔ)的是null,表明虛擬頁(yè)0即VP0是未分配狀態(tài),PTE 3里存儲(chǔ)的是磁盤(pán)地址,表明虛擬頁(yè) 3即VP3在磁盤(pán)里,但沒(méi)有緩沖,VP3狀態(tài)為未緩沖。

當(dāng)頁(yè)表項(xiàng)PTE n的頁(yè)表項(xiàng)的有效位為1時(shí),表示虛擬頁(yè)n緩沖在物理內(nèi)存,PTE n存儲(chǔ)了物理頁(yè)號(hào),虛擬頁(yè) n的狀態(tài)為已緩沖,例如PTE 1的頁(yè)表項(xiàng),有效位為1,則虛擬頁(yè)VP1緩沖在了物理頁(yè)中。

頁(yè)表基址寄存器(PTBR):

每個(gè)進(jìn)程都有自己的頁(yè)表,CPU執(zhí)行某個(gè)進(jìn)程時(shí),會(huì)先把該進(jìn)程的一級(jí)頁(yè)表起始地址存儲(chǔ)到頁(yè)表基址寄存器,這樣CPU查找一級(jí)頁(yè)表起始地址可以直接從寄存器查找,加快了查找效率。

好了,概念介紹到這里,先來(lái)看看虛擬地址翻譯物理地址的過(guò)程,按照一級(jí)頁(yè)表來(lái)演示,如下圖所示:

圖片

虛擬地址翻譯物理地址

上圖為虛擬地址翻譯物理地址的示意圖,可以看出VPO等于PPO。

下面看看計(jì)算機(jī)各個(gè)部件是怎么通過(guò)虛擬地址訪(fǎng)問(wèn)物理內(nèi)存的。

處理器根據(jù)虛擬地址訪(fǎng)問(wèn)物理內(nèi)存的分為頁(yè)表項(xiàng)命中和頁(yè)表項(xiàng)未命中兩種情況,頁(yè)表項(xiàng)命中意味著頁(yè)表項(xiàng)的有效位為1,頁(yè)表項(xiàng)存儲(chǔ)的是物理頁(yè)號(hào),虛擬頁(yè)緩沖在物理頁(yè)中,未命中意味著頁(yè)表項(xiàng)有效位為0,此時(shí)需要發(fā)送缺頁(yè)中斷。

頁(yè)表項(xiàng)命中的步驟如下圖:

圖片

頁(yè)表項(xiàng)命中翻譯步驟

1.CPU將虛擬地址(VA)送入MMU,MMU根據(jù)頁(yè)表基址寄存器中頁(yè)表的起始地址加上虛擬頁(yè)號(hào),找到了頁(yè)表項(xiàng)的物理地址PTEA。

2.MMU將PTEA送入到高速緩沖或者內(nèi)存。

3.從高速緩沖或者內(nèi)存中找到頁(yè)表項(xiàng)(PTE),返回頁(yè)表項(xiàng)(PTE)給MMU。

4.MMU根據(jù)PTE找出物理頁(yè)號(hào),然后加上虛擬頁(yè)偏移量形成物理地址(PA),送入到高速緩沖或者內(nèi)存。

5.高速緩沖或者內(nèi)存獲取數(shù)據(jù),返回?cái)?shù)據(jù)給處理器。

頁(yè)表項(xiàng)未命中的步驟如下圖:

圖片

頁(yè)表項(xiàng)未命中翻譯步驟

1.CPU將虛擬地址(VA)送入MMU,MMU根據(jù)頁(yè)表基址寄存器中頁(yè)表的起始地址加上虛擬頁(yè)號(hào),找到了頁(yè)表項(xiàng)的物理地址PTEA。

2.MMU將PTEA送入到高速緩沖或者內(nèi)存。

3.從高速緩沖或者內(nèi)存中找到頁(yè)表項(xiàng)(PTE),返回頁(yè)表項(xiàng)(PTE)給MMU。

4.MMU根據(jù)PTE,發(fā)現(xiàn)頁(yè)不在內(nèi)存中,未命中,因此MMU發(fā)送一個(gè)缺頁(yè)中斷,交由缺頁(yè)異常處理程序處理。

5.缺頁(yè)異常處理程序根據(jù)頁(yè)置換算法,選擇出一個(gè)犧牲頁(yè),如果這個(gè)頁(yè)面已經(jīng)被修改了,則寫(xiě)出到磁盤(pán)上,最后將這個(gè)犧牲頁(yè)的頁(yè)表項(xiàng)有效位設(shè)置為0,存入磁盤(pán)地址。

6.缺頁(yè)異常程序處理程序調(diào)入新的頁(yè)面,如果該虛擬頁(yè)尚未分配磁盤(pán)空間,則分配磁盤(pán)空間,然后磁盤(pán)空間的頁(yè)數(shù)據(jù)拷貝到空閑的物理頁(yè)上,并更新PTE的有效位為1,更新物理頁(yè)號(hào),缺頁(yè)異常處理程序返回后,再回到發(fā)生缺頁(yè)中斷的指令處,重新按照頁(yè)表項(xiàng)命中的步驟執(zhí)行。

虛擬地址翻譯物理地址的過(guò)程介紹完了,另外要說(shuō)的是現(xiàn)代的CPU和操作系統(tǒng)為了加快虛擬地址翻譯物理地址的過(guò)程,做了以下兩點(diǎn)優(yōu)化:

1.建立了虛擬號(hào)(VPN)和頁(yè)表項(xiàng)(PTE)的映射關(guān)系,存儲(chǔ)在TLB中,當(dāng)MMU根據(jù)虛擬地址獲取頁(yè)表項(xiàng)時(shí),先查詢(xún)TLB,在TLB找到了頁(yè)表項(xiàng)后,就不需要從高速緩沖或者內(nèi)存中獲取了,找不到了才會(huì)計(jì)算頁(yè)表項(xiàng)地址PTEA,然后再?gòu)母咚倬彌_或者內(nèi)存中獲取頁(yè)表項(xiàng)(PTE)。

2.某些熱點(diǎn)物理地址對(duì)應(yīng)的數(shù)據(jù),存儲(chǔ)在L1緩沖中,MMU根據(jù)物理地址獲取頁(yè)表項(xiàng)或者代碼數(shù)據(jù)時(shí),先從L1緩沖中獲取,找不到再?gòu)膬?nèi)存中獲取。

上述的翻譯過(guò)程是通過(guò)一級(jí)頁(yè)表來(lái)翻譯,現(xiàn)在操作系統(tǒng)支持多級(jí)頁(yè)表,多級(jí)頁(yè)表與一級(jí)頁(yè)表比較類(lèi)似,如下圖所示:

圖片

K頁(yè)表

上圖為K級(jí)頁(yè)表,頁(yè)表基址寄存器存儲(chǔ)的是一級(jí)頁(yè)表的地址,1到K-1的頁(yè)表的每一項(xiàng)存儲(chǔ)的下一級(jí)頁(yè)表的起始地址,K級(jí)頁(yè)表的每一項(xiàng)存儲(chǔ)的是物理頁(yè)號(hào)或者磁盤(pán)地址。

好了,關(guān)于虛擬地址,虛擬內(nèi)存,虛擬地址空間的話(huà)題就介紹到這里了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11218

    瀏覽量

    222961
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7315

    瀏覽量

    93988
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7329

    瀏覽量

    128643
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4941

    瀏覽量

    73151
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    51單片機(jī)存儲(chǔ)程序和數(shù)據(jù)的方式概述

    51單片機(jī)是如何存儲(chǔ)程序和數(shù)據(jù)的?在學(xué)校很少用到外擴(kuò)ROM/RAM的情況,都是用C語(yǔ)言編程,不差空間,代碼太大了,買(mǎi)個(gè)大ROM的芯片就行了。現(xiàn)在工作了,單位是做SoC的,采用了51的IP核,才算
    發(fā)表于 09-05 00:08

    如何定位C程序的代碼和數(shù)據(jù)?

    C程序的代碼和數(shù)據(jù)如何定位的?
    發(fā)表于 09-11 05:55

    怎樣使用代碼來(lái)訪(fǎng)問(wèn)PLC數(shù)據(jù)

    如何配置網(wǎng)絡(luò)參數(shù)?怎樣使用代碼來(lái)訪(fǎng)問(wèn)PLC數(shù)據(jù)?如何使用gitHub開(kāi)源的組件技術(shù)來(lái)讀寫(xiě)西門(mén)子plc數(shù)據(jù)?
    發(fā)表于 09-29 07:42

    如何去計(jì)算CPU的地址線(xiàn)和數(shù)據(jù)線(xiàn)

    CPU的按字節(jié)尋址和按字尋址的范圍分別是多少?如何去計(jì)算CPU的地址線(xiàn)和數(shù)據(jù)線(xiàn)?
    發(fā)表于 10-09 08:08

    CPU對(duì)齊訪(fǎng)問(wèn)的基礎(chǔ)知識(shí)

    關(guān)于CPU對(duì)齊訪(fǎng)問(wèn)的基礎(chǔ)知識(shí):現(xiàn)代計(jì)算機(jī)是以Byte 為主要單位存儲(chǔ)數(shù)據(jù)的,CPU訪(fǎng)問(wèn)數(shù)據(jù)尋址
    發(fā)表于 02-07 07:35

    IMXRT1170 Cortex M4沒(méi)有SDRAM,是否可以增加CM4的代碼和數(shù)據(jù)空間?

    的 ITCM 和 DTCM)。我們的問(wèn)題是:1- 沒(méi)有 SDRAM,我們是否可以增加 CM4 的代碼和數(shù)據(jù)空間?如果可以的話(huà),CM7如何加載大于256KB的代碼到0x20200000呢?請(qǐng)指出
    發(fā)表于 04-19 07:17

    PLD和數(shù)據(jù)通路來(lái)釋放微控制器中CPU資源

    本文介紹了一種采用PLD和數(shù)據(jù)通路(datapath)來(lái)解放微控制器系統(tǒng)中 CPU 任務(wù)的方案。在大多數(shù)微控制器結(jié)構(gòu)中,智能的CPU身邊總會(huì)環(huán)繞著一系列不可編程的外設(shè)。外設(shè)的功能有限,通常它
    發(fā)表于 08-31 11:42 ?1860次閱讀
    PLD<b class='flag-5'>和數(shù)據(jù)</b>通路來(lái)釋放微控制器中<b class='flag-5'>CPU</b>資源

    如何寫(xiě)出讓CPU執(zhí)行更快的代碼?

    轉(zhuǎn)自:小林coding 前言 代碼都是由 CPU 跑起來(lái)的,我們代碼寫(xiě)的好與壞就決定了 CPU 的執(zhí)行效率,特別是在編寫(xiě)計(jì)算密集型的程序,更要注重
    的頭像 發(fā)表于 10-29 11:21 ?2793次閱讀
    如何寫(xiě)出讓<b class='flag-5'>CPU</b>執(zhí)行更快的<b class='flag-5'>代碼</b>?

    關(guān)于組態(tài)CPU訪(fǎng)問(wèn)保護(hù)淺析

    設(shè)置訪(fǎng)問(wèn)等級(jí)和密碼后,需輸入密碼才能訪(fǎng)問(wèn)功能和存儲(chǔ)區(qū)。將在 CPU 的對(duì)象屬性中指定各種訪(fǎng)問(wèn)級(jí)別及其關(guān)聯(lián)的密碼。
    的頭像 發(fā)表于 04-12 14:36 ?5332次閱讀
    關(guān)于組態(tài)<b class='flag-5'>CPU</b>的<b class='flag-5'>訪(fǎng)問(wèn)</b>保護(hù)淺析

    CPU是怎樣訪(fǎng)問(wèn)內(nèi)存的?資料下載

    電子發(fā)燒友網(wǎng)為你提供CPU是怎樣訪(fǎng)問(wèn)內(nèi)存的?資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶(hù)指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-23 08:40 ?11次下載
    <b class='flag-5'>CPU</b>是怎樣<b class='flag-5'>訪(fǎng)問(wèn)</b>內(nèi)存的?資料下載

    CPU訪(fǎng)問(wèn)保護(hù)與訪(fǎng)問(wèn)級(jí)別

    設(shè)置訪(fǎng)問(wèn)等級(jí)和密碼后,需輸入密碼才能訪(fǎng)問(wèn)功能和存儲(chǔ)區(qū)。將在 CPU 的對(duì)象屬性中指定各種訪(fǎng)問(wèn)級(jí)別及其關(guān)聯(lián)的密碼。
    的頭像 發(fā)表于 09-14 16:08 ?4239次閱讀

    組態(tài)西門(mén)子CPU訪(fǎng)問(wèn)保護(hù)

    CPU 提供了四個(gè)訪(fǎng)問(wèn)級(jí)別,用于限制對(duì)特定功能的訪(fǎng)問(wèn)。
    的頭像 發(fā)表于 12-28 09:09 ?3480次閱讀

    Verilog代碼封裝后門(mén)訪(fǎng)問(wèn)

    關(guān)于仿真里的后門(mén)訪(fǎng)問(wèn),之前的文章《三分鐘教會(huì)你SpinalHDL仿真中的后門(mén)讀寫(xiě)》中有做過(guò)介紹,其針對(duì)的都是針對(duì)以SpinalHDL中的代碼進(jìn)行的后門(mén)訪(fǎng)問(wèn)。今天來(lái)看看當(dāng)封裝了Verilog BlackBox時(shí),在SpinalHD
    的頭像 發(fā)表于 07-15 10:22 ?1452次閱讀
    Verilog<b class='flag-5'>代碼</b>封裝后門(mén)<b class='flag-5'>訪(fǎng)問(wèn)</b>

    MMU原理:CPU是如何訪(fǎng)問(wèn)到內(nèi)存的?

    當(dāng)CPU訪(fǎng)問(wèn)虛擬地址0的時(shí)候,MMU會(huì)去查上面頁(yè)表的第0行,發(fā)現(xiàn)第0行沒(méi)有命中,于是無(wú)論以何種形式(R讀,W寫(xiě),X執(zhí)行)訪(fǎng)問(wèn),MMU都會(huì)給CPU發(fā)出page fault,
    發(fā)表于 11-09 12:30 ?1870次閱讀
    MMU原理:<b class='flag-5'>CPU</b>是如何<b class='flag-5'>訪(fǎng)問(wèn)</b>到內(nèi)存的?

    EE-132:使用VisualDSP將C代碼和數(shù)據(jù)模塊放入SHARC存儲(chǔ)器中

    電子發(fā)燒友網(wǎng)站提供《EE-132:使用VisualDSP將C代碼和數(shù)據(jù)模塊放入SHARC存儲(chǔ)器中.pdf》資料免費(fèi)下載
    發(fā)表于 01-07 13:55 ?0次下載
    EE-132:使用VisualDSP將C<b class='flag-5'>代碼</b><b class='flag-5'>和數(shù)據(jù)</b>模塊放入SHARC存儲(chǔ)器中