《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得

《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得

ID:30376022

大?。?4.30 KB

頁(yè)數(shù):14頁(yè)

時(shí)間:2018-12-29

《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得_第1頁(yè)
《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得_第2頁(yè)
《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得_第3頁(yè)
《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得_第4頁(yè)
《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得_第5頁(yè)
資源描述:

《《深入理解linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、《深入理解Linux內(nèi)核》內(nèi)存尋址學(xué)習(xí)心得1.三種地址:邏輯地址,線性地址,物理地址。三者的詳細(xì)解釋:邏輯地址(logicaladdress):由段(segment)(16位)和偏移量(offset或displacement)(32位)組成。線性地址(linearaddress)(也稱虛擬地址virtualaddress):是一個(gè)32位無(wú)符號(hào)整數(shù),用來(lái)表示高達(dá)4GB的地址。物理地址(physicaladdress):實(shí)際地址。分段目的:把邏輯地址轉(zhuǎn)換為線性地址,如下圖所示:2.1段標(biāo)識(shí)符和段寄存器段標(biāo)識(shí)符(段選擇符)(存放在段寄存器中)字段

2、如下:index用來(lái)得到段描述符在GDT或LDT中的偏移(位置)TI指明段描述符是在GDT中(TI=0)或在LDT中(TI=1)RPL請(qǐng)求特權(quán)級(jí),由于一個(gè)段描述符是8字節(jié),因此它的地址=GDT或LDT內(nèi)的首地址+(index*8)。能夠保存在GDT中的段描述符的最大數(shù)目是8191(213-1),其中13是index的位數(shù)。不同段的段描述符構(gòu)成段描述符表,段描述符(8字節(jié))存放在全局描述符表(GDT)或局部描述符表(LDT)中。GDT在主存中的地址和大小存放在gdtr控制寄存器中,當(dāng)前正被使用的LDT地址和大小存放在ldtr控制寄存器中。2.

3、2段描述符CPL(CurrentPrivilegeLevel)當(dāng)前特權(quán)級(jí)DPL(DescriptorPrivilegeLevel)描述符特權(quán)級(jí)RPL(RequirePrivilegeLevel)請(qǐng)求特權(quán)級(jí),Liunx中廣泛采用的段描述符類型:代碼段描述符、數(shù)據(jù)段描述符、任務(wù)狀態(tài)段描述符、局部描述符表描述符(代表一個(gè)包含LDT的段)。2.3快速訪問(wèn)段描述符:(是由邏輯地址得到段的一個(gè)流程)1.4Linux中的分段用戶代碼段__USER_CS用戶數(shù)據(jù)段__USER_DS內(nèi)核代碼段__KERNEL_CS內(nèi)核數(shù)據(jù)段__KERNEL_DS1.5Lin

4、uxGDT每個(gè)處理器中只有一個(gè)GDT,所以在多處理器系統(tǒng)中有多個(gè)GDT。一般的,每個(gè)處理器中的都是GDT的一個(gè)副本。除了以下的三種情況:1.每個(gè)處理器都有自己的TSS段,因此其對(duì)應(yīng)的GDT項(xiàng)不同。2.GDT中只有少數(shù)項(xiàng)可能依賴于CPU正在執(zhí)行的進(jìn)程。3.在某些情況下,處理器可能臨時(shí)修改GDT副本中的某個(gè)項(xiàng)。所有的GDT存放在cpu_gdt_table數(shù)組中,而所有的GDT的地址和它們的大小(初始化gdtr時(shí)用)存放在cpu_gdt_descr數(shù)組中。這些都在arch/i386/kernel/head.s中定義。如下圖所示,一個(gè)GDT中包含1

5、8個(gè)描述符和14個(gè)空的、未使用的、或保留的項(xiàng)。1.6LinuxLDT大多數(shù)用戶態(tài)程序不使用LDT,這樣內(nèi)核就在GDT中定義了一個(gè)缺省的LDT來(lái)供大多數(shù)進(jìn)程共享。缺省的LDT存放在default_ldt數(shù)組中。它含有5個(gè)項(xiàng),內(nèi)核只使用了兩個(gè)項(xiàng):用于iBCS執(zhí)行文件的調(diào)用門(mén)和Solaris/x86可執(zhí)行文件的調(diào)用門(mén)。調(diào)用門(mén)是一種機(jī)制:用于在調(diào)用預(yù)定義函數(shù)時(shí)改變CPU的特權(quán)級(jí)。如果進(jìn)程需要?jiǎng)?chuàng)建自己的LDT,則使用modify_ldt()系統(tǒng)調(diào)用。用戶創(chuàng)建的LDT需要自己的段,此時(shí)GDT中的LDT表項(xiàng)相應(yīng)的就要被修改。2.分頁(yè)目的:把線性地址轉(zhuǎn)換為

6、物理地址。其中的一個(gè)關(guān)鍵任務(wù):比較所請(qǐng)求的訪問(wèn)類型與線性地址的訪問(wèn)權(quán)限。如果內(nèi)存訪問(wèn)無(wú)效,則產(chǎn)生一個(gè)缺頁(yè)異常。頁(yè):以固定長(zhǎng)度為單位的線性地址。頁(yè)內(nèi)部的線性地址被映射到連續(xù)的物理地址中。(即代表一組數(shù)據(jù))頁(yè)框:RAM被分成固定長(zhǎng)度的頁(yè)框,每一個(gè)頁(yè)框包含一個(gè)頁(yè)。(即主存中的物理地址)頁(yè)表:把線性地址映射到物理地址的數(shù)據(jù)結(jié)構(gòu),它存放在主存中,并在啟用分頁(yè)單元之前由內(nèi)核進(jìn)行初始化。所有的80x86都支持分頁(yè),它通過(guò)設(shè)置cr0寄存器的PG標(biāo)志啟用(PG=0)。3.1常規(guī)分頁(yè)32位的線性地址被分為3個(gè)域(4KB的頁(yè)):重要的概率組成頁(yè)目錄頁(yè)目錄項(xiàng)頁(yè)表頁(yè)

7、表項(xiàng)線性地址到物理地址的轉(zhuǎn)換如下圖所示:3.2擴(kuò)展分頁(yè)3.3物理地址擴(kuò)展(PAE)分頁(yè)看書(shū)p56-573.4硬件保護(hù)方案段有三種存取權(quán)限(讀、寫(xiě)、執(zhí)行),頁(yè)只有兩種存取權(quán)限(讀、寫(xiě))。PAE(PhysicalAddressExtension)物理地址擴(kuò)展PSE(PageSizeExtension)頁(yè)大小擴(kuò)展PGE(PageGlobalEnable)頁(yè)全局啟用3.5硬件高速緩存原因:CPU和RAM之間速度不匹配。原理:基于局部性原理,用小而快的內(nèi)存來(lái)存放最近最常使用的代碼。以脈沖突發(fā)模式(burstmode)在慢速DRAM和快速片上SRAM之

8、間傳送行(一種新單位)。映射關(guān)系:直接映射、全相關(guān)、N-路相關(guān)。硬件高速緩存單元的組成:一個(gè)硬件高速緩存內(nèi)存、一個(gè)高速緩存控制器。Cachehit、cachemiss。通寫(xiě)(wr

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。