




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 第2章 存儲(chǔ)器尋址這一章處理處理技術(shù)。幸運(yùn)的是,一個(gè)操作系統(tǒng)不是被迫跟蹤物理內(nèi)存本身;今天的微處理器包括幾個(gè)硬件電路使內(nèi)存管理更高效和更健壯的編程錯(cuò)誤在這本書的其余部分,我們提供細(xì)節(jié)在本章關(guān)于80 x86 Intel微處理器地址內(nèi)存芯片和Linux如何利用可用的解決電路。我們希望你會(huì)發(fā)現(xiàn),當(dāng)你學(xué)習(xí)Linux的實(shí)現(xiàn)細(xì)節(jié)最受歡迎的平臺(tái)你會(huì)更好地理解分頁(yè)的一般理論和方式研究在其他平臺(tái)上實(shí)現(xiàn)。這是第一個(gè)內(nèi)存管理相關(guān)的三章:第六章,討論如何內(nèi)核分配內(nèi)存,而第七章,考慮如何線性地址分配給進(jìn)程2.1 存儲(chǔ)器尋址程序員隨意引用一個(gè)內(nèi)存地址的方式訪問(wèn)的內(nèi)容一個(gè)存儲(chǔ)單元。但在處理80年英特爾x86微處理器,我們
2、必須區(qū)分在三種地址:邏輯地址包含在機(jī)器語(yǔ)言指令指定一個(gè)操作數(shù)的地址一條指令。這種類型的處理體現(xiàn)了著名的英特爾分段架構(gòu),部隊(duì)ms - dos和Windows程序員把他們的程序成段。每個(gè)邏輯地址由一個(gè)部門和一個(gè)偏移量(或位移),表示距離的開始段的實(shí)際地址。線性地址一個(gè)32位無(wú)符號(hào)整數(shù),可以用來(lái)解決4 GB,即到4294967296記憶細(xì)胞。線性地址通常用十六進(jìn)制表示符號(hào),它們的值從0 x00000000 0 xffffffff。物理地址用于解決記憶細(xì)胞包含在內(nèi)存芯片。他們對(duì)應(yīng)電信號(hào)發(fā)送的地址別針的微處理器內(nèi)存總線。物理地址表示為32位無(wú)符號(hào)整數(shù)。CPU控制單元將邏輯地址轉(zhuǎn)換成一個(gè)線性地址的硬件電路
3、稱為細(xì)分單元;先后,第二個(gè)硬件電路稱為分頁(yè)單元將線性地址轉(zhuǎn)換成物理地址(見(jiàn)圖2 - 1)。2.2硬件分割從80386年模型開始,英特爾微處理器執(zhí)行兩個(gè)地址轉(zhuǎn)換不同的方式稱為實(shí)模式和保護(hù)模式。實(shí)模式的存在主要是為了維護(hù)與老款處理器兼容性和允許操作系統(tǒng)引導(dǎo)(見(jiàn)附錄A,一個(gè)簡(jiǎn)短的描述的模式)。我們將關(guān)注保護(hù)模式。2.2.1段寄存器一個(gè)邏輯地址由兩部分組成:一段標(biāo)識(shí)符和一個(gè)指定的偏移量段內(nèi)的相對(duì)地址。段標(biāo)識(shí)符是一個(gè)16位的領(lǐng)域稱為段選擇器,而抵消是一個(gè)32位的領(lǐng)域。使它容易快速檢索段選擇符,處理器提供細(xì)分寄存器的唯一目的是持有段選擇符;這些寄存器稱為cs,黨衛(wèi)軍,ds,es、fs和gs。雖然只有六個(gè)人
4、,一個(gè)程序可以重用相同的分割注冊(cè)不同的目的在內(nèi)存中,然后通過(guò)保存其內(nèi)容恢復(fù)它。三個(gè)六段寄存器有特定的用途:Cs代碼段寄存器,它指向包含程序指令的部分Ss堆棧段寄存器,它指向一個(gè)包含當(dāng)前程序段堆棧Ds數(shù)據(jù)段寄存器,它指向包含靜態(tài)和外部的部分?jǐn)?shù)據(jù)其余三個(gè)段寄存器是通用,可能指的是任意的段。cs寄存器還有另一個(gè)重要的功能:它包括一個(gè)2比特字段,該字段指定當(dāng)前特權(quán)級(jí)別(CPL)的CPU。值表示最高的特權(quán)級(jí)別,而3表示價(jià)值最低的一個(gè)。Linux和3只使用水平,分別稱為內(nèi)核模式和用戶模式。2.2.2段描述符每一部分都由一個(gè)8字節(jié)段描述符表示(見(jiàn)圖2)描述段特征。段描述符存儲(chǔ)在全局描述符表(GDT)或在局部
5、描述符表(LDT)。通常只有一個(gè)GDT定義,雖然每個(gè)進(jìn)程可能有自己的LDT。的地址GDT在主內(nèi)存中包含gdtr處理器寄存器的地址目前使用LDT包含ldtr處理器寄存器中。每一段描述符包含以下字段:x一個(gè)32位的基本字段包含的線性地址段的第一個(gè)字節(jié)。x G粒度國(guó)旗:如果是清除,表達(dá)的片段大小字節(jié);否則,它在4096字節(jié)的倍數(shù)表示。x 20位限制字段表示段長(zhǎng)度,以字節(jié)為單位。如果設(shè)置為0,大小1個(gè)字節(jié)之間的一個(gè)非空段可能不同和1 MB;否則,它可能會(huì)有所不同4 KB和4 GB之間。x S系統(tǒng)標(biāo)志:如果它被清除,段是一個(gè)系統(tǒng)段存儲(chǔ)內(nèi)核數(shù)據(jù)結(jié)構(gòu);否則,它是一個(gè)正常的代碼或數(shù)據(jù)段。x 4比特類型字段描述
6、段類型及其訪問(wèn)權(quán)限。的后段描述符類型廣泛應(yīng)用:代碼段描述符表明段描述符是指一個(gè)代碼段,它可能包括在內(nèi)在GDT或LDT。描述符設(shè)置年代標(biāo)志。數(shù)據(jù)段描述符表明,指的是一個(gè)數(shù)據(jù)段的段描述符,它可能包括在內(nèi)在GDT或LDT。描述符設(shè)置年代標(biāo)志。堆棧段實(shí)現(xiàn)通過(guò)通用數(shù)據(jù)段。任務(wù)狀態(tài)段描述符(TSSD)表明任務(wù)狀態(tài)段的段描述符是指(TSS),也就是說(shuō),一段用來(lái)節(jié)省處理器寄存器的內(nèi)容(參見(jiàn)3.2.2節(jié)第3章);它只會(huì)出現(xiàn)在GDT。對(duì)應(yīng)的類型字段的值11、9,這取決于相應(yīng)的進(jìn)程當(dāng)前正在執(zhí)行的CPU。S標(biāo)志的描述符設(shè)置為0。局部描述符表描述符(LDTD)表明段描述符是指一段包含LDT;它可以只有在GDT出現(xiàn)。對(duì)應(yīng)
7、的類型字段的值2。S的旗幟這樣的描述符設(shè)置為0。x DPL(描述符特權(quán)級(jí))2比特字段用來(lái)限制訪問(wèn)的部分。它代表了CPU的最小特權(quán)級(jí)別請(qǐng)求來(lái)訪問(wèn)。因此,一套段DPL的CPL時(shí)只能是0,也就是說(shuō),在內(nèi)核模式,而與其DPL段設(shè)置為CPL 3訪問(wèn)每一個(gè)值。x Segment-Present國(guó)旗將如果段目前不存儲(chǔ)在主內(nèi)存。Linux總是將這個(gè)字段設(shè)置為1,因?yàn)樗鼜膩?lái)沒(méi)有互換整個(gè)片段磁盤。x額外國(guó)旗稱為D或B取決于段包含代碼或數(shù)據(jù)。它的意義略有不同在這兩種情況下,但它基本上是如果地址用作部分抵消32位長(zhǎng),如果他們是16位長(zhǎng)(見(jiàn)英特爾手冊(cè)詳情)。x保留一點(diǎn)(53)總是設(shè)置為0。x AVL國(guó)旗由操作系統(tǒng)可以使
8、用,但Linux中被忽略。2.2.3段選擇符加快邏輯地址轉(zhuǎn)化為線性地址,英特爾處理器提供了一個(gè)額外的nonprogrammable注冊(cè)該是,不能由一個(gè)寄存器程序員的六個(gè)可編程分割寄存器。每一個(gè)nonprogrammable寄存器包含8字節(jié)的段描述符(在前面的描述部分)指定的段選擇器中包含相應(yīng)的分割登記。每次一段選擇符是裝載在分割登記,從內(nèi)存加載到相應(yīng)的段描述符匹配nonprogrammable CPU寄存器。從那時(shí)起,指的是譯文的邏輯地址這部分可以不執(zhí)行訪問(wèn)GDT或LDT存儲(chǔ)在主存;處理器可以直接提及CPU寄存器包含段描述符。訪問(wèn)GDT或LDT只有當(dāng)分割的內(nèi)容是必要的注冊(cè)改變(見(jiàn)圖2 - 3)
9、。每段選擇器包括以下字段:x可索引(進(jìn)一步在該列表后的文本描述)來(lái)標(biāo)識(shí)的相應(yīng)的段描述符中包含的條目GDT或LDTx一個(gè)TI(表指示器)標(biāo)記,用于指定是否包括段描述符GDT(TI = 0)或在LDT(TI = 1)x的RPL(請(qǐng)求者的特權(quán)級(jí))2比特字段,這正是當(dāng)前特權(quán)級(jí)別的CPU當(dāng)加載到相應(yīng)的段選擇器cs寄存器11RPL領(lǐng)域還可用于選擇性地削弱處理器特權(quán)級(jí)別的訪問(wèn)數(shù)據(jù)段時(shí),看到英特爾文檔細(xì)節(jié)。因?yàn)橐欢蚊枋龇?個(gè)字節(jié)長(zhǎng),它在GDT或LDT相對(duì)地址相乘得到的最重要的13位的段選擇子8。為實(shí)例,如果GDT是0 x00020000(值存儲(chǔ)在gdtr寄存器)和索引指定的段選擇子是2,對(duì)應(yīng)的段描述符的地址
10、是0 x00020000 +(2 x 8)或0 x00020010。第一項(xiàng)GDT總是設(shè)置為0,這可以確保邏輯地址無(wú)效段選擇子將被認(rèn)為是無(wú)效的,因此導(dǎo)致處理器例外。的最大數(shù)量的段描述符可以存儲(chǔ)在8191年GDT因此,也就是說(shuō),213 - 1。2.2.4分割單元圖2 - 4顯示了詳細(xì)邏輯地址是如何轉(zhuǎn)化為相應(yīng)的線性地址。分割單元執(zhí)行以下操作:x檢查TI的段選擇器,以確定哪些描述符表存儲(chǔ)段描述符。這個(gè)字段表示描述符在GDT(在這種情況下,分割單元的基本線性地址GDT gdtr注冊(cè))或活動(dòng)LDT(在這種情況下,分割單位得到了基本的線性地址LDT ldtr寄存器)。x計(jì)算的地址段的段描述符的索引字段選擇器
11、。索引字段是乘以8(大小的段描述符),和結(jié)果被添加到gdtr或ldtr寄存器的內(nèi)容。x增加了基地的段描述符邏輯地址的偏移量,因此得到線性地址注意,由于nonprogrammable寄存器與分割寄存器,第一個(gè)需要執(zhí)行兩個(gè)操作只有當(dāng)一個(gè)分割登記被改變了。2.3市場(chǎng)細(xì)分在Linux中分割已經(jīng)包含在英特爾微處理器鼓勵(lì)程序員分裂他們的應(yīng)用程序在邏輯上相關(guān)的實(shí)體,如子例程或全球和本地?cái)?shù)據(jù)區(qū)域。然而,Linux使用分割在一個(gè)非常有限的方式。事實(shí)上,分割和分頁(yè)都有點(diǎn)冗余自可用于單獨(dú)的物理地址空間的流程:細(xì)分可以分配一個(gè)不同的線性地址空間中每一個(gè)過(guò)程分頁(yè)可以同一個(gè)線性地址空間映射到不同的物理地址空間。Linux
12、喜歡分頁(yè)細(xì)分為以下原因:x內(nèi)存管理更簡(jiǎn)單,當(dāng)所有進(jìn)程使用相同的段寄存器值,也就是說(shuō),當(dāng)他們分享相同的一組線性地址。x的設(shè)計(jì)目標(biāo)之一Linux可移植性最流行的體系結(jié)構(gòu);然而,幾位RISC處理器支持在一個(gè)非常有限的方式分割。2.2版本的Linux使用分割只有當(dāng)所需的80 x86 Intel體系結(jié)構(gòu)。特別是,所有進(jìn)程使用相同的邏輯地址,所以的總數(shù)段定義是相當(dāng)有限的,可以存儲(chǔ)所有的段描述符全局描述符表(GDT)。此表由gdt_table數(shù)組實(shí)現(xiàn)提到的gdt變量。如果你在源代碼中指數(shù)看,你可以看到這些文件中定義的符號(hào)是arch / i386 / kernel /你們覺(jué)得。每一個(gè)宏,功能,和其他象征在這本
13、書中附錄中列出,這樣你就可以很快找到它在源代碼中。局部描述符表不使用的內(nèi)核,盡管存在一個(gè)系統(tǒng)調(diào)用,它允許流程創(chuàng)建自己的LDTs。這是有用的應(yīng)用程序,如酒執(zhí)行segment-oriented Microsoft Windows應(yīng)用程序。這里是Linux使用的部分:x內(nèi)核代碼段。中相應(yīng)的段描述符的字段GDT有以下值:o = 0 x00000000基地o = 0 xfffff限制o G(粒度國(guó)旗)= 1,部分頁(yè)面大小o S(系統(tǒng)國(guó)旗)= 1,正常的代碼或數(shù)據(jù)段o = 0 xa類型,可以讀取和執(zhí)行的代碼段o DPL(描述符特權(quán)級(jí)別)= 0,內(nèi)核模式o D / B(32位地址標(biāo)志)= 1,32位的偏移地
14、址因此,相關(guān)的線性地址段開始,到達(dá)解決232 - 1的極限。年代和類型字段指定一個(gè)代碼段段,可以讀取和執(zhí)行。其DPL值為0,從而可以訪問(wèn)它在內(nèi)核模式。相應(yīng)的段選擇符是由_KERNEL_CS定義宏觀:為了解決部分,內(nèi)核加載產(chǎn)生的值宏成cs寄存器。x內(nèi)核數(shù)據(jù)段。中相應(yīng)的段描述符的字段GDT有以下值:o = 0 x00000000基地o = 0 xfffff限制o G(粒度國(guó)旗)= 1,部分頁(yè)面大小o S(系統(tǒng)國(guó)旗)= 1,正常的代碼或數(shù)據(jù)段o型= 2,可以讀取和寫入的數(shù)據(jù)段o DPL(描述符特權(quán)級(jí)別)= 0,內(nèi)核模式o D / B(32位地址標(biāo)志)= 1,32位的偏移地址這部分是與前一個(gè)相同(事實(shí)
15、上,他們?cè)诰€性地址重疊空間)除了類型字段的值,它指定一個(gè)數(shù)據(jù)段可以讀和寫。相應(yīng)的段選擇符被定義為_KERNEL_DS宏。x用戶在用戶模式下所有進(jìn)程共享的代碼段。的字段相應(yīng)的段描述符的GDT有以下值:o = 0 x00000000基地o = 0 xfffff限制o G(粒度國(guó)旗)= 1,部分頁(yè)面大小o S(系統(tǒng)國(guó)旗)= 1,正常的代碼或數(shù)據(jù)段o = 0 xa類型,可以讀取和執(zhí)行的代碼段o DPL(描述符特權(quán)級(jí)別)= 3,用戶模式o D / B(32位地址標(biāo)志)= 1,32位的偏移地址年代和DPL字段指定的段段,它不是一個(gè)系統(tǒng)特權(quán)級(jí)別等于3,因此可以在內(nèi)核模式和用戶訪問(wèn)模式。相應(yīng)的段選擇符是_US
16、ER_CS定義的宏。x用戶數(shù)據(jù)段共享的所有進(jìn)程在用戶模式。的字段相應(yīng)的段描述符的GDT有以下值:o = 0 x00000000基地o = 0 xfffff限制o G(粒度國(guó)旗)= 1,部分頁(yè)面大小o S(系統(tǒng)國(guó)旗)= 1,正常的代碼或數(shù)據(jù)段o型= 2,可以讀取和寫入的數(shù)據(jù)段o DPL(描述符特權(quán)級(jí)別)= 3,用戶模式o D / B(32位地址標(biāo)志)= 1,32位的偏移地址這段重復(fù)前一個(gè):他們是相同的,除了的價(jià)值類型。相應(yīng)的段選擇符是_USER_DS定義的宏。x任務(wù)狀態(tài)段為每個(gè)進(jìn)程(TSS)段。的描述符部分存儲(chǔ)在GDT。TSS的基本字段描述符相關(guān)每個(gè)進(jìn)程包含tss的地址字段對(duì)應(yīng)的過(guò)程描述符。G標(biāo)
17、志被清除,而限制字段設(shè)置為0 xeb,因?yàn)門SS段是236個(gè)字節(jié)長(zhǎng)。類型字段設(shè)置為9或11(32位TSS),和DPL設(shè)置為0,因?yàn)榱鞒淘谟脩裟J较率遣辉试S訪問(wèn)TSS段。x一個(gè)默認(rèn)LDT段通常是由所有進(jìn)程共享。這段存儲(chǔ)在default_ldt變量中。默認(rèn)LDT包含一個(gè)條目組成的空段描述符。每個(gè)進(jìn)程都有自己的LDT段描述符,它通常指向共同違約LDT段?;咀侄卧O(shè)置為地址default_ldt和限制字段設(shè)置為7。如果一個(gè)進(jìn)程需要一個(gè)真實(shí)的LDT,創(chuàng)建一個(gè)新的4096字節(jié)段(它可以包含多達(dá)511段描述符),默認(rèn)LDT段描述符與這一過(guò)程相關(guān)聯(lián)在GDT新的描述符換成基礎(chǔ)和特定的值限制字段。對(duì)于每一個(gè)過(guò)程,
18、因此,GDT包含兩個(gè)不同的段描述符:一個(gè)用于TSS段和LDT一段。中允許的最大條目數(shù)GDT是12 + 2 xnr_tasks,反過(guò)來(lái),NR_TASKS表示的最大數(shù)量流程。我們?cè)谇懊娴牧斜砻枋隽肆鶄€(gè)主要的段描述符使用Linux。四個(gè)額外的段描述符覆蓋高級(jí)電源管理(APM)功能,GDT剩下未使用的和四個(gè)條目,總共14。正如我們之前提到的,GDT最多可以有213 = 8192項(xiàng),其中第一個(gè)是總是空。自14日未使用或由系統(tǒng)NR_TASKS不能大比8180/2 = 4090。每個(gè)過(guò)程的TSS和LDT描述符添加到GDT過(guò)程創(chuàng)建。3.3.2節(jié)中我們將看到在第3章,內(nèi)核本身產(chǎn)生第一流程:流程init_task
19、運(yùn)行。內(nèi)核初始化期間,trap_init()函數(shù)將第一個(gè)過(guò)程的TSS描述符插入到GDT使用聲明:set_tss_desc(0,&init_task.tss);第一個(gè)進(jìn)程創(chuàng)造了別人,所以每一個(gè)后續(xù)的過(guò)程是一些現(xiàn)有的孩子的過(guò)程。copy_thread()函數(shù),該函數(shù)調(diào)用的克隆()和fork()系統(tǒng)調(diào)用來(lái)創(chuàng)建新的流程,執(zhí)行相同的功能,以設(shè)置的TSS新流程:set_tss_desc(nr,&(任務(wù)(nr)- > tss);因?yàn)槊總€(gè)TSS描述符指的是一個(gè)不同的過(guò)程,當(dāng)然,每個(gè)領(lǐng)域有一個(gè)基地不同的值。也copy_thread()函數(shù)調(diào)用set_ldt_desc()函數(shù)為了插入一段描述
20、符GDT相對(duì)的默認(rèn)LDT新的過(guò)程。內(nèi)核數(shù)據(jù)段包含一個(gè)進(jìn)程描述符為每一個(gè)過(guò)程。每一個(gè)過(guò)程描述符包括自己的TSS LDT段段和一個(gè)指針,也是位于內(nèi)核數(shù)據(jù)段。如前所述,當(dāng)前特權(quán)級(jí)別的CPU處理器是否反映了指定的用戶或內(nèi)核模式和RPL段選擇器中存儲(chǔ)領(lǐng)域cs寄存器。每當(dāng)改變當(dāng)前特權(quán)級(jí)別時(shí),一些細(xì)分寄存器必須相應(yīng)更新。例如,當(dāng)CPL = 3(用戶模式)ds寄存器必須包含用戶數(shù)據(jù)段的段選擇子,但當(dāng)CPL等于0,ds寄存器必須包含內(nèi)核數(shù)據(jù)段的段選擇子。黨衛(wèi)軍寄存器發(fā)生類似的情況:它必須引用用戶模式堆棧中用戶數(shù)據(jù)段的測(cè)井是3,它必須引用一個(gè)內(nèi)核模式堆棧中內(nèi)核數(shù)據(jù)段的測(cè)井是0。從用戶模式到內(nèi)核模式的切換時(shí),Lin
21、ux總是確保黨衛(wèi)軍寄存器包含內(nèi)核數(shù)據(jù)的段選擇子段。2.4分頁(yè)在硬件分頁(yè)單元線性地址轉(zhuǎn)換為物理的。它檢查請(qǐng)求的訪問(wèn)類型的線性地址的訪問(wèn)權(quán)限。如果內(nèi)存訪問(wèn)無(wú)效,它將產(chǎn)生一個(gè)缺頁(yè)異常(見(jiàn)第四章和第六章)。為了效率,線性地址分組在固定長(zhǎng)度的間隔稱為頁(yè);連續(xù)的線性地址映射到一個(gè)頁(yè)面中的連續(xù)的物理地址。在通過(guò)這種方式,內(nèi)核可以指定物理地址和頁(yè)面的訪問(wèn)權(quán)限,而不是這些所有的線性地址。在通常的慣例,我們將使用“頁(yè)面”的術(shù)語(yǔ)來(lái)表示一組線性地址和數(shù)據(jù)包含在這一組的地址。所有內(nèi)存分區(qū)的分頁(yè)單元認(rèn)為(它們是固定長(zhǎng)度的頁(yè)幀有時(shí)被稱為物理頁(yè))。每個(gè)頁(yè)面都包含一個(gè)頁(yè)面,也就是說(shuō),長(zhǎng)度一個(gè)頁(yè)幀的頁(yè)面。一個(gè)頁(yè)面框架組成的主內(nèi)存
22、,因此它是一個(gè)存儲(chǔ)區(qū)域。重要的是區(qū)分一個(gè)頁(yè)面一個(gè)頁(yè)面框架:前只是一個(gè)數(shù)據(jù)塊可能存儲(chǔ)在任何頁(yè)面或磁盤上。線性地址到物理地址的映射的數(shù)據(jù)結(jié)構(gòu)被稱為頁(yè)表;存儲(chǔ)在主存,必須正確地初始化由內(nèi)核啟用之前分頁(yè)單元。在英特爾處理器,通過(guò)設(shè)置啟用分頁(yè)P(yáng)G cr0寄存器的旗幟。PG = 0時(shí),線性地址解釋為物理地址。2.4.1定期分頁(yè)從i80386開始,英特爾處理器的分頁(yè)單元處理4 KB頁(yè)。的32位一個(gè)線性地址分為三個(gè)字段:目錄最重要的10位表中間10位抵消最重要的12位線性地址的翻譯是在兩個(gè)步驟完成,每一個(gè)基于類型的轉(zhuǎn)換表。第一個(gè)翻譯表稱為頁(yè)目錄,第二個(gè)叫做頁(yè)表。頁(yè)面的物理地址目錄在使用存儲(chǔ)在cr3處理器寄存器
23、。的目錄字段內(nèi)的線性地址確定點(diǎn)的頁(yè)目錄中的條目適當(dāng)?shù)捻?yè)表。反過(guò)來(lái),地址的表字段決定了進(jìn)入該頁(yè)面表,包含頁(yè)面的物理地址包含頁(yè)面的框架。偏移量字段決定了頁(yè)面內(nèi)的相對(duì)位置(見(jiàn)圖2 - 5)。因?yàn)樗?2位長(zhǎng),每個(gè)頁(yè)面包含4096字節(jié)的數(shù)據(jù)。目錄和表字段是10位長(zhǎng),所以頁(yè)目錄和頁(yè)表可以包含多達(dá)1024個(gè)。由此可見(jiàn),一個(gè)頁(yè)面目錄可以解決1024 x 1024x 4096 = 232記憶細(xì)胞,你期望在32位地址。頁(yè)目錄和頁(yè)表的條目有相同的結(jié)構(gòu)。每個(gè)條目包括以下字段:現(xiàn)在國(guó)旗如果它被設(shè)置,稱為頁(yè)面(或頁(yè)表)包含在主內(nèi)存;如果國(guó)旗0,頁(yè)面不包含在主內(nèi)存和剩余的條目可以使用由操作系統(tǒng)的目的。(16章,我們將看到
24、如何Linux利用這一領(lǐng)域)。字段包含20個(gè)最重要的頁(yè)面框架物理地址因?yàn)槊總€(gè)頁(yè)面有一個(gè)4 KB的能力,其物理地址必須的倍數(shù)4096,所以12的最低有效位物理地址總是等于0。如果這個(gè)領(lǐng)域是指一個(gè)頁(yè)面目錄,頁(yè)面框架包含了一個(gè)頁(yè)表;如果它是指頁(yè)表,頁(yè)面框架包含一個(gè)頁(yè)面的數(shù)據(jù)。訪問(wèn)標(biāo)志每次設(shè)置分頁(yè)單元地址對(duì)應(yīng)的頁(yè)框。這個(gè)標(biāo)志可以使用的操作系統(tǒng)在選擇頁(yè)面被換出。分頁(yè)單位沒(méi)有重置這個(gè)標(biāo)志,這必須由操作系統(tǒng)完成。臟國(guó)旗僅適用于頁(yè)表?xiàng)l目。設(shè)置每一次寫操作在頁(yè)面上執(zhí)行框架。這面旗幟在前面的情況下,可以使用的操作系統(tǒng)在選擇頁(yè)面被換出。分頁(yè)單元不重置這個(gè)標(biāo)志,這必須由操作系統(tǒng)完成。讀/寫信號(hào)包含正確的訪問(wèn)(讀/寫或
25、讀)的頁(yè)面或頁(yè)面(見(jiàn)表在本章后面部分的2.4.3)。用戶/主管國(guó)旗包含的權(quán)限訪問(wèn)該頁(yè)面或頁(yè)表(見(jiàn)部分2.4.3)兩個(gè)國(guó)旗稱為PCD和佩恩表的編制者控制頁(yè)面或頁(yè)表的方式是由硬件緩存(參見(jiàn)章節(jié)2.4.6在本章后面)。頁(yè)面大小的旗幟僅適用于頁(yè)目錄條目。如果它被設(shè)置,入口是指4 MB頁(yè)長(zhǎng)框架(參見(jiàn)下一節(jié))。如果條目頁(yè)表或頁(yè)目錄需要進(jìn)行地址轉(zhuǎn)換現(xiàn)在的國(guó)旗了,分頁(yè)單元線性地址存儲(chǔ)在cr2處理器注冊(cè)并生成異常14日,也就是“頁(yè)面錯(cuò)誤”例外。2.4.2擴(kuò)展分頁(yè)與奔騰模型開始,英特爾80 x86微處理器引入擴(kuò)展分頁(yè),這允許或4 KB頁(yè)幀4 MB的大小(見(jiàn)圖2 - 6)。正如我們所看到的在前一節(jié)中,通過(guò)設(shè)置啟用分
26、頁(yè)擴(kuò)展頁(yè)面大小國(guó)旗的頁(yè)目錄條目。在這種情況下,分頁(yè)單元?jiǎng)澐忠粋€(gè)線性的32位地址為兩個(gè)字段:目錄最重要的10位抵消剩下的22位目錄條目頁(yè)擴(kuò)展分頁(yè)一樣正常的分頁(yè),除了:x必須設(shè)置頁(yè)面大小的旗幟。x只有前10的20位最重要的物理地址字段有很重要的意義。這是因?yàn)槊總€(gè)物理地址是4 MB邊界對(duì)齊,所以22日最低有效位的地址都是0。啟用擴(kuò)展分頁(yè)與常規(guī)分頁(yè)共存;它通過(guò)設(shè)置PSE cr4的旗幟處理器寄存器。擴(kuò)展使用分頁(yè)翻譯大間隔的連續(xù)線性的地址到相應(yīng)物理的;在這種情況下,內(nèi)核可以沒(méi)有中間頁(yè)表,從而節(jié)省內(nèi)存。2.4.3硬件保護(hù)計(jì)劃分頁(yè)單元分割單元使用不同的保護(hù)計(jì)劃。雖然英特爾處理器允許四種可能的特權(quán)級(jí)別的一段,只
27、有兩個(gè)特權(quán)級(jí)別相關(guān)頁(yè)面和頁(yè)表,因?yàn)闄?quán)限的控制用戶/主管國(guó)旗2.4.1節(jié)所述。這個(gè)標(biāo)志是0時(shí),頁(yè)面可以解決CPL只有當(dāng)小于3(這意味著,對(duì)于Linux,當(dāng)處理器內(nèi)核模式)。國(guó)旗是1時(shí),頁(yè)面總是可以解決的。此外,而不是三種類型的訪問(wèn)權(quán)限(讀、寫、執(zhí)行)聯(lián)系在一起段,只有兩種類型的訪問(wèn)權(quán)限(讀、寫)與頁(yè)面相關(guān)聯(lián)。如果讀/寫國(guó)旗的頁(yè)目錄或頁(yè)表?xiàng)l目= 0,相應(yīng)的頁(yè)表或頁(yè)面只能讀,否則它可以讀取和寫入。2.4.4分頁(yè)的一個(gè)例子一個(gè)簡(jiǎn)單的例子將有助于澄清分頁(yè)是如何工作的。讓我們假設(shè)內(nèi)核分配0 x20000000和之間的線性地址空間0 x2003ffff運(yùn)行的進(jìn)程。這個(gè)空間是由64頁(yè)。我們不關(guān)心的物理地址頁(yè)幀包含頁(yè);事實(shí)上,他們中的一些人甚至可能不主內(nèi)存。我們只剩下的頁(yè)面的字段表?xiàng)l目。我們從10開始最重要的線性地址分配給這個(gè)過(guò)程,解釋為目錄字段的分頁(yè)單元。地址從2開始其次是0,10位都有相同的值,即0 x080或128十進(jìn)制。因此目錄字段在所有進(jìn)程的地址指的是第
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 肇慶市實(shí)驗(yàn)中學(xué)高中歷史一:第2課屹立于世界民族之林-新中國(guó)外交(第2課時(shí))教案
- 新疆科信職業(yè)技術(shù)學(xué)院《外國(guó)文學(xué)一》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《動(dòng)物藥理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆維吾爾塔城地區(qū)2024-2025學(xué)年四下數(shù)學(xué)期末復(fù)習(xí)檢測(cè)模擬試題含解析
- 2025-2030年中國(guó)RF同軸電纜投資市場(chǎng)分析及發(fā)展戰(zhàn)略研究咨詢報(bào)告
- 2025-2030年中國(guó)B2B電子商務(wù)市場(chǎng)運(yùn)行新形勢(shì)與投資前景報(bào)告
- 邢臺(tái)學(xué)院《編程與實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025-2030年中國(guó)N甲基哌嗪行業(yè)投資價(jià)值研究報(bào)告
- 2025-2030年中國(guó)TPMS市場(chǎng)競(jìng)爭(zhēng)格局規(guī)劃分析研究報(bào)告
- 2025年廠級(jí)職工安全培訓(xùn)考試試題附參考答案【基礎(chǔ)題】
- 話劇導(dǎo)演合同協(xié)議
- 軟件設(shè)計(jì)說(shuō)明書
- 2023年中國(guó)海洋石油集團(tuán)有限公司校園招聘筆試參考題庫(kù)附帶答案詳解
- 2025年天津市南開區(qū)中考一模語(yǔ)文試題(含答案)
- 工信委選調(diào)試題及答案
- GB/T 17591-2025阻燃織物
- 2025年OTC市場(chǎng)分析現(xiàn)狀
- 人員管理方案
- 《詞根詞綴記詞法》課件
- 圍棋輔導(dǎo)班教練聘用合同書
- 滬教版英語(yǔ)七年級(jí)下冊(cè)英語(yǔ)知識(shí)點(diǎn)總結(jié)全冊(cè)含習(xí)題(學(xué)生版)
評(píng)論
0/150
提交評(píng)論