1、邏輯地址
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、五家渠網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為五家渠等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。包含在機(jī)器語(yǔ)言指令中用來(lái)指定一個(gè)操作數(shù)或一條指令的地址
2、線性地址(虛擬地址)
32位無(wú)符號(hào)整數(shù),可以用來(lái)表示高達(dá)4GB的地址,常用十六進(jìn)制表示0x00000000——0xffffffff
3、物理地址
用于內(nèi)存芯片級(jí)內(nèi)存單元尋址。它們與從微處理器的地址引腳發(fā)送到內(nèi)存總線上的電信號(hào)相對(duì)應(yīng)。物理地址由32位或36位無(wú)符號(hào)整數(shù)表示
內(nèi)存控制單元(MMU)通過(guò)分段單元的硬件電路把一個(gè)邏輯地址轉(zhuǎn)換為線性地址;分頁(yè)單元的硬件電路把線性地址轉(zhuǎn)換為物理地址
硬件中的分段
邏輯地址->段選擇符+偏移量
段選擇符 大小、字段
段描述符 大小、字段、類型、格式
快速訪問(wèn)段描述符
當(dāng)一個(gè)段選擇符被裝入段寄存器時(shí),相應(yīng)的段描述符就裝入到對(duì)應(yīng)的非編程cpu寄存器。根據(jù)段選擇符查找段描述內(nèi)容時(shí),就可以直接在上述非編程寄存器中找到對(duì)應(yīng)段描述符,并不需要查找內(nèi)存中的GDT或LDT,僅當(dāng)段寄存器的內(nèi)容有更改時(shí),才有必要直接訪問(wèn)GDT或LDT。
GDT的大可包含2`13-1即8191個(gè)段描述符,因?yàn)镚DT的第一項(xiàng)總設(shè)為0,為了確??盏亩芜x擇符即值為0的段選擇符是無(wú)效的,所以少了一項(xiàng)。
分段單元
分段單元將一個(gè)邏輯地址轉(zhuǎn)換為線性地址。
1、檢查段選擇符中的TI字段,確定段描述符是在GDT還是LDT中,并從相應(yīng)寄存器中獲取其線性基地址
2、從段選擇符中的index字段計(jì)算段描述符的地址,基地址+index*8,即為段描述符的地址
3、找到對(duì)應(yīng)的段描述符后,取出該描述符首字節(jié)的線性地址即base字段對(duì)應(yīng)值與邏輯地址偏移量(低16位)相加,結(jié)果就是最終的線性地址。
ps:有了存放段描述符的非編程cpu寄存器,則可以省略1、2步驟,直接根據(jù)邏輯地址在上述寄存器中找到對(duì)應(yīng)的段描述符進(jìn)行第三步即可獲得線性地址。
linux中的分段
分段和分頁(yè)都可以劃分進(jìn)程的物理地址空間:分段可以給每一個(gè)進(jìn)程分配不同的線性地址空間;分頁(yè)可以把同一線性地址空間映射到不同的物理空間。linux更喜歡使用分頁(yè)方式因?yàn)?
1、當(dāng)所有進(jìn)程使用相同的段寄存器值時(shí),內(nèi)存管理變得更簡(jiǎn)單,也就是說(shuō)他們能共享同樣的一組線性地址。
2、Linux設(shè)計(jì)目標(biāo)之一是可以把它移植到大多數(shù)流行的處理器平臺(tái)上。然而,RISC體系結(jié)構(gòu)對(duì)分段的支持有限。
2.6版的Linux只有在80x86結(jié)構(gòu)下才需要使用分段。
用戶代碼段、用戶數(shù)據(jù)段、內(nèi)核代碼段、內(nèi)核數(shù)據(jù)段
用戶態(tài)或內(nèi)核態(tài)下的所有進(jìn)程可以使用相同的邏輯地址。linux下邏輯地址與線性地址是一致的,即邏輯地址的偏移量字段值與相應(yīng)的線性地址的值總是一致。
CPU的當(dāng)前特權(quán)級(jí)別(CPL)反應(yīng)了進(jìn)程是在用戶態(tài)還是在內(nèi)核態(tài),并由存放在cs寄存器中的段選擇符的RPL字段指定。只要當(dāng)前特權(quán)級(jí)別被改變,一些段寄存器必須相應(yīng)的更新。
當(dāng)對(duì)指向指令或者數(shù)據(jù)結(jié)構(gòu)的指針進(jìn)行保存時(shí),內(nèi)核根本不需要為其設(shè)置邏輯地址的段選擇符,因?yàn)閏s寄存器就含有當(dāng)前的段選擇符。
Linux GDT
多處理器中每個(gè)cpu對(duì)應(yīng)一個(gè)GDT。
每個(gè)GDT包含18個(gè)段描述符和14個(gè)空的、未使用的或保留的項(xiàng)。插入未使用的項(xiàng)的目的是為了使疆場(chǎng)一起訪問(wèn)的描述符能夠處于同一個(gè)32字節(jié)的硬件告訴緩存行中。
除少數(shù)幾種情況外,所有GDT副本都存放相同的表項(xiàng):每個(gè)處理器都由自己的TSS段;GDT有少數(shù)項(xiàng)可能依賴于CPU正在執(zhí)行的進(jìn)程;處理器可能臨時(shí)修改GDT副本里的某個(gè)項(xiàng)。
Linux LDT
大多數(shù)用戶態(tài)下的Linux程序不使用局部描述符表,這樣內(nèi)核就定義了一個(gè)缺省的LDT供大多數(shù)進(jìn)程共享。
用戶態(tài)下的程序同樣也利用modify_ldt()來(lái)分配新的段,但內(nèi)核卻從不使用這些段,也不需要了解相應(yīng)的段描述符,因?yàn)檫@些段描述符被包含在進(jìn)程自定義的局部描述符中了。
新聞標(biāo)題:二、內(nèi)存尋址(分段)-創(chuàng)新互聯(lián)
URL分享:http://jinyejixie.com/article10/ccsjgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、做網(wǎng)站、軟件開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容