存儲器分頁管理機制在保護模式下,控制寄存器CR0中的最高位PG位控制分頁管理機制是否生效。如果PG=1,分頁機制生效,把線性地址轉(zhuǎn)換為物理地址。如果" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

80386內(nèi)存分頁機制

系統(tǒng) 2641 0

    80386開始支持存儲器分頁管理機制。分頁機制是存儲器管理機制的第3二部分。段管理機制實現(xiàn)虛擬地址(由段和偏移構(gòu)成的邏輯地址)到線性地址的轉(zhuǎn)換, 分頁管理機制實現(xiàn)線性地址到物理地址的轉(zhuǎn)換。如果不啟用分頁管理機制,那么線性地址就是物理地址。本文將介紹80386的存儲器分頁管理機制和線性地址如 何轉(zhuǎn)換為物理地址。

    <一>存儲器分頁管理機制

    在保護模式下,控制寄存器 CR0 中的最高位 PG 位控制分頁管理機制是否生效。如果 PG=1 ,分頁機制生效,把線性地址轉(zhuǎn)換為物理地址。 如果PG=0,分頁機制無效,線性地址就直接作為物理地址。必須注意,只有在保護方式下分頁機制才可能生效。只有在保證使PE位為1的前提下,才能夠使 PG位為1,否則將引起通用保護故障。

    分頁機制把線性地址空間和物理地址空間分別劃分為大小相同的塊。這樣的塊稱之為頁。通過在線性地址空間的頁與物理地址空間的頁之間建立 的映射,分頁機制實現(xiàn)線性地址到物理地址的轉(zhuǎn)換。線性地址空間的頁與物理地址空間的頁之間的映射可根據(jù)需要而確定,可根據(jù)需要而改變。線性地址空間的任何 一頁,可以映射為物理地址空間中的任何一頁。

    采用分頁管理機制實現(xiàn)線性地址到物理地址轉(zhuǎn)換映射的主要目的是便于實現(xiàn)虛擬存儲器。不象段的大小可變,頁的大小是相等并固定的。根據(jù)程序的邏輯劃分段,而根據(jù)實現(xiàn)虛擬存儲器的方便劃分頁。

    80386 中,頁的大小固定為 4K 字節(jié),每一頁的邊界地址必須是 4K 的倍數(shù)。因此, 4G 大小的地址空間被劃分為 1M 個頁,頁的開始地 址具有“XXXXX000H”的形式。為此,我們把頁開始地址的高20位XXXXXH稱為頁碼。線性地址空間頁的頁碼也就是頁開始邊界線性地址的高20 位;物理地址空間頁的頁碼也就是頁開始邊界物理地址的高20位。可見,頁碼左移12位就是頁的開始地址,所以頁碼規(guī)定了頁。

    由于頁的大小固定為 4K 字節(jié),且頁的邊界是 4K 的倍數(shù),所以在把 32 位線性地址轉(zhuǎn)換成 32 位物理地址的過程中,低 12 位地址保持不變。 也就是說,線性地址的低12位就是物理地址的低12位。假設(shè)分頁機制采用的轉(zhuǎn)換映射把線性地址空間的XXXXXH頁映射到物理地址空間的YYYYYH頁, 那么線性地址XXXXXxxxH被轉(zhuǎn)換為YYYYYxxxH。因此,線性地址到物理地址的轉(zhuǎn)換要解決的是線性地址空間的頁到物理地址空間的頁的映射,也就 是線性地址高20位到物理地址高20位的轉(zhuǎn)換。

    <二>線性地址到物理地址的轉(zhuǎn)換

    1.映射表結(jié)構(gòu)

    線性地址空間的頁到物理地址空間的頁之間的映射用表來描述。由于 4G 的地址空間劃分為 1M 個頁,因此,如果用一張表來描述這種映射,那 么該映射表就要有1M個表項,若每個表項占用4個字節(jié),那么該映射表就要占用4M字節(jié)。為避免映射表占用如此巨大的存儲器資源,所以80386把頁映射表 分為兩級。

    頁映射表的第一級稱為頁目錄表,存儲在一個 4K 字節(jié)的物理頁中。頁目錄表共有 1K 個表項,其中,每個表項為 4 字節(jié)長,包含對應(yīng)第二級表 所在物理地址空間頁的頁碼。頁映射表的第二級稱為頁表,每張頁表也安排在一個4K字節(jié)的頁中。每張頁表都有1K個表項,每個表項為4字節(jié)長,包含對應(yīng)物理 地址空間頁的頁碼。由于頁目錄表和頁表均由1K個表項組成,所以使用10位的索引就能指定表項,即用10位的索引值乘以4加基地址就得到了表項的物理地 址。

    下圖顯示了由頁目錄表和頁表構(gòu)成的頁映射表結(jié)構(gòu)。從圖中可見,控制寄存器 CR3 指定頁目錄表;頁目錄表可以指定 1K 個頁表,這些頁表可 以分散存放在任意的物理頁中,而不需要連續(xù)存放;每張頁表可以指定1K個物理地址空間的頁,這些物理地址空間的頁可以任意地分散在物理地址空間中。需要注 意的是,存儲頁目錄表和頁表的基地址是對齊在4K字節(jié)邊界上的。

    2.表項格式

    頁目錄表和頁表中的表項都采用如下圖所示的格式。從圖中可見,最高 20 ( 12 —位31)包含物理地址空間頁的頁碼,也就是物理地址 的高20位。低12位包含頁的屬性。下圖所示的屬性中內(nèi)容為0的位是Intel公司為80486等處理器所保留的位,在為80386編程使用到它們時必須 設(shè)置為0。在位9至位11的AVL字段供軟件使用。表項的最低位是存在屬性位,記作P。P位表示該表項是否有效。P=1表項有效;P=0表項無效,此時表 項中的其余各位均可供軟件使用,80386不解釋P=0的表項中的任何其它的位。在通過頁目錄表和頁表進行的線性地址到物理地址的轉(zhuǎn)換過程中,無論在頁目 錄表還是在頁表中遇到無效表項,都會引起頁故障。其它屬性位的作用在下文中介紹。

    頁目錄表或頁

    表的表項格式 BIT31—BIT12 BIT11—BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 物理頁碼 AVL 0 0 D A 0 0 U/S R/W P

    3.線性地址到物理地址的轉(zhuǎn)換

    分頁管理機制通過上述頁目錄表和頁表實現(xiàn) 32 位線性地址到 32 位物理地址的轉(zhuǎn)換。控制寄存器 CR3 的高 20 位作為頁目錄表所在物理頁的 頁碼。首先把線性地址的最高10位(即位22至位31)作為頁目錄表的索引,對應(yīng)表項所包含的頁碼指定頁表;然后,再把線性地址的中間10位(即位12至 位21)作為所指定的頁目錄表中的頁表項的索引,對應(yīng)表項所包含的頁碼指定物理地址空間中的一頁;最后,把所指定的物理頁的頁碼作為高20位,把線性地址 的低12位不加改變地作為32位物理地址的低12位。

    為了避免在每次存儲器訪問時都要訪問內(nèi)存中的頁表,以便提高訪問內(nèi)存的速度, 80386 處理器的硬件把最近使用的線性—物理地址轉(zhuǎn)換函 數(shù)存儲在處理器內(nèi)部的頁轉(zhuǎn)換高速緩存中。在訪問存儲器頁表之前總是先查閱高速緩存,僅當(dāng)必須的轉(zhuǎn)換不在高速緩存中時,才訪問存儲器中的兩級頁表。頁轉(zhuǎn)換高 速緩存也稱為頁轉(zhuǎn)換查找緩存,記為TLB。

    在分頁機制轉(zhuǎn)換高速緩存中的數(shù)據(jù)與頁表中數(shù)據(jù)的相關(guān)性,不是由 80386 處理器進行維護的,而必須由操作系統(tǒng)軟件保存,也就是說,處理 器不知道軟件什么時候會修改頁表,在一個合理的系統(tǒng)中,頁表只能由操作系統(tǒng)修改,操作系統(tǒng)可以直接地在軟件修改頁表后通過刷新高速緩存來保證相關(guān)性。高速 緩存的刷新通過裝入處理器控制寄存器CR3完成,實際過程可能用如下的兩條指令實現(xiàn):

    mov eax,cr3

    mov cr3,eax

    一個重要的修改頁表項的特殊情況不需要對頁轉(zhuǎn)換高速緩存刷新,這種情況是指修改不存在表項的任一部分,即使 P 位本身從 P=0 改變?yōu)?P=1時也一樣,因為無效的表項不會存入高速緩存。因此,當(dāng)無效的表項被改變時,不需要刷新高速緩存。這表明在從磁盤上讀入一頁使其存在時,不必刷新高速 緩存。

    在一個多處理器系統(tǒng)中,必須特別注意是否在一個處理器中執(zhí)行的程序,會改變可能由另外的處理器同時訪問的頁表。在 80386 處理器中, 每當(dāng)要更新頁表項并設(shè)置D位和A位時,通過使用不可分的讀/修改/寫周期支持多處理器的配置。對于頁表項的軟件更新需要借助于使用LOCK前綴,從而保證 修改頁表的指令工作在不可分的讀/修改/寫周期中。在改變一個可能由另外的處理器使用的頁表之前,最好使用一條加鎖的AND指令在一個不可分的操作中將P 位清除為0,然后,該表項可根據(jù)要求進行修改,并隨后把P位置成1而使表項成為可用。當(dāng)修改頁表項時必須及時通知(通常使用中斷方式)系統(tǒng)中該表項已被高 速緩存的所有處理器刷新各自的頁轉(zhuǎn)換高速緩存,以撤消該表項的舊拷貝。在表項的舊拷貝被刷新之前,各處理器仍可繼續(xù)訪問舊的頁,并可以設(shè)置正被修改的表項 的D位。如果這樣做引起表項修改失敗,則分頁機制高速緩存最好在標(biāo)記為不存在之后,并在對表項進行另外的修改之前進行刷新。

    4.不存在的頁表

    采用上述頁映射表結(jié)構(gòu),存儲全部 1K 張頁表需要 4M 字節(jié),此外還需要 4K 字節(jié)用于存儲頁目錄表。這樣的兩級頁映射表似乎反而比單一的整 張頁映射表多占用4K字節(jié)。其實不然,事實上不需要在內(nèi)存中存儲完整的兩級頁映射表。兩級頁映射表結(jié)構(gòu)中對于線性地址空間中不存在的或未使用的部分不必分 配頁表。除必須給頁目錄表分配物理頁外,僅當(dāng)在需要時才給頁表分配物理頁,于是頁映射表的大小就對應(yīng)于實際使用的線性地址空間大小。因為任何一個實際運行 的程序使用的線性地址空間都遠(yuǎn)小于4G字節(jié),所以用于分配給頁表的物理頁也遠(yuǎn)小于4M字節(jié)。

    頁目錄表項中的存在位 P 表明對應(yīng)頁表是否有效。如果 P=1 ,表明對應(yīng)頁表有效,可利用它進行地址轉(zhuǎn)換;如果 P=0 ,表明對應(yīng)頁表無效。 如果試圖通過無效的頁表進行線性地址到物理地址的轉(zhuǎn)換,那么將引起頁故障。因此,頁目錄表項中的屬性位P使得操作系統(tǒng)只需給覆蓋實際使用的線性地址范圍的 頁表分配物理頁。

    頁目錄表項中的屬性位 P 頁可用于把頁表存儲在虛擬存儲器中。當(dāng)發(fā)生由于所需頁表無效而引起的頁故障時,頁故障處理程序再申請物理頁,從 磁盤上把對應(yīng)的頁表讀入,并把對應(yīng)頁目錄表項中的P位置1。換言之,可以當(dāng)需要時才為所要的頁表分配物理頁。這樣頁表占用的物理頁數(shù)量可降到最小。

    5.頁的共享

    由上述頁映射表結(jié)構(gòu)可見,分頁機制沒有全局頁和局部頁的規(guī)定。每一個任務(wù)可使用自己的頁映射表獨立地實現(xiàn)線性地址到物理地址的轉(zhuǎn)換。但是,如果使每一個任務(wù)所用的頁映射表具有部分相同的映射,那么也就可以實現(xiàn)部分頁的共享。

    常用的實現(xiàn)頁共享的方法是線性地址空間的共享,也就是不同任務(wù)的部分相同的線性地址空間的映射信息相同,具體表現(xiàn)為部分頁表相同或頁表 內(nèi)的部分表項的頁碼相同。例如,如果任務(wù)A和任務(wù)B分別使用的頁目錄表A和頁目錄表B內(nèi)的第0項中的頁碼相同,也就是頁表0相同,那么任務(wù)A和任務(wù)B的 00000000H至003FFFFFH線性地址空間就映射到相同的物理頁。再如,任務(wù)A和任務(wù)B使用的頁表0不同,但這兩張頁表內(nèi)第0至第0FFH項的 頁碼對應(yīng)相同,那么任務(wù)A和任務(wù)B的00000000H至000FFFFFH線性地址空間就映射到相同的物理頁。

    需要注意的是,共享的頁表最好由兩個頁目錄中同樣的目錄項所指定。這一點很重要,因為它保證了在兩個任務(wù)中同樣的線性地址范圍將映射到該全局區(qū)域。

    <三>頁級保護和虛擬存儲器支持

    1.頁級保護

    80386 不僅提供段級保護,也提供頁級保護。分頁機制只區(qū)分兩種特權(quán)級。特權(quán)級 0 1 2 統(tǒng)稱為系統(tǒng)特權(quán)級,特權(quán)級 3 稱為用戶特權(quán)級。在上圖所示頁目錄表和頁表的表項中的保護屬性位 R/W U/S 就是用于對頁進行保護。

    表項的位 1 是讀寫屬性位,記作 R/W R/W 位指示該表項所指定的頁是否可讀、寫或執(zhí)行。若 R/W=1 ,對表項所指定的頁可進行讀、寫 或執(zhí)行;若R/W=0,對表項所指定的頁可讀或執(zhí)行,但不能對該指定的頁寫入。但是,R/W位對頁的寫保護只在處理器處于用戶特權(quán)級時發(fā)揮作用;當(dāng)處理器 處于系統(tǒng)特權(quán)級時,R/W位被忽略,即總可以讀、寫或執(zhí)行。

    表項的位 2 是用戶 / 系統(tǒng)屬性位,記作 U/S U/S 位指示該表項所指定的頁是否是用戶級頁。若 U/S=1 ,表項所指定的頁是用戶級頁, 可由任何特權(quán)級下執(zhí)行的程序訪問;如果U/S=0,表項所指定的頁是系統(tǒng)級頁,只能由系統(tǒng)特權(quán)級下執(zhí)行的程序訪問。下表列出了上述屬性位R/W和U/S所 確定的頁級保護下,用戶級程序和系統(tǒng)級程序分別具有的對用戶級頁和系統(tǒng)級頁進行操作的權(quán)限。

    頁級

    保護

    屬性 U/S R/W 用戶級訪問權(quán)限系統(tǒng)級訪問權(quán)限 0 0 無讀/寫/執(zhí)行 0 1 無讀/寫/執(zhí)行 1 0 讀/執(zhí)行讀/寫/執(zhí)行 1 1 讀/寫/執(zhí)行讀/寫/執(zhí)行

    由上表可見,用戶級頁可以規(guī)定為只允許讀 / 執(zhí)行或規(guī)定為讀 / / 執(zhí)行。系統(tǒng)級頁對于系統(tǒng)級程序總是可讀 / / 執(zhí)行,而對用戶級程序總是 不可訪問的。于分段機制一樣,外層用戶級執(zhí)行的程序只能訪問用戶級的頁,而內(nèi)層系統(tǒng)級執(zhí)行的程序,既可訪問系統(tǒng)級頁,也可訪問用戶級頁。與分段機制不同的 是,在內(nèi)層系統(tǒng)級執(zhí)行的程序,對任何頁都有讀/寫/執(zhí)行訪問權(quán),即使規(guī)定為只允許讀/執(zhí)行的用戶頁,內(nèi)層系統(tǒng)級程序也對該頁有寫訪問權(quán)。

    頁目錄表項中的保護屬性位 R/W U/S 對由該表項指定頁表所指定的全部 1K 各頁起到保護作用。所以,對頁訪問時引用的保護屬性位 R /W U/S 的值是組合計算頁目錄表項和頁表項中的保護屬性位的值所得。下表列出了組合計算前后的保護屬性位的值,組合計算是“與”操作。

    組合頁的

    保護>屬性目錄表項U/S 頁表項U/S 組合U/S 目錄表項R/W 頁表項R/W 組合R/W 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 1 1 1 1 1 1

    正如在 80386 地址轉(zhuǎn)換機制中分頁機制在分段機制之后起作用一樣,由分頁機制支持的頁級保護也在由分段機制支持的段級保護之后起作 用。先測試有關(guān)的段級保護,如果啟用分頁機制,那么在檢查通過后,再測試頁級保護。如果段的類型為讀/寫,而頁規(guī)定為只允許讀/執(zhí)行,那么不允許寫;如果 段的類型為只讀/執(zhí)行,那么不論頁保護如何,也不允許寫。

    頁級保護的檢查是在線性地址轉(zhuǎn)換為物理地址的過程中進行的,如果違反頁保護屬性的規(guī)定,對頁進行訪問 ( / / 執(zhí)行 ) ,那么將引起頁異常。

    2.對虛擬存儲器的支持

    頁表項中的 P 位是支持采用分頁機制虛擬存儲器的關(guān)鍵。 P=1 ,表示表項指定的頁存在于物理存儲器中,并且表項的高 20 位是物理頁的頁 碼;P=0,表示該線性地址空間中的頁所對應(yīng)的物理地址空中的頁不在物理存儲器中。如果程序訪問不存在的頁,會引起頁異常,這樣操作系統(tǒng)可把該不存在的頁 從磁盤上讀入,把所在物理頁的頁碼填入對應(yīng)表項并把表項中的P位置為1,然后使引起異常的程序恢復(fù)運行。

    此外,表項中的訪問位 A 和寫標(biāo)志位 D 也用于支持有效地實現(xiàn)虛擬存儲器。

    表項的位 5 是訪問屬性位,記作 A 。在為了訪問某存儲單元而進行線性地址到物理地址的轉(zhuǎn)換過程中,處理器總是把頁目錄表內(nèi)的對應(yīng)表項和其 所指定頁表內(nèi)的對應(yīng)表項中的A位置1,除非頁表或頁不存在,或者訪問違反保護屬性規(guī)定。所以,A=1表示已訪問過對應(yīng)的物理頁。處理器永不清除A位。通過 周期性地檢測及清除A位,操作系統(tǒng)就可確定哪些頁在最近一段時間未被訪問過。當(dāng)存儲器資源緊缺時,這些最近未被訪問的頁很可能就被選擇出來,將它們從內(nèi)存 換出到磁盤上去。

    表項的位 6 是寫標(biāo)志位,記作 D 。在為了訪問某存儲單元而進行線性地址到物理地址的轉(zhuǎn)換過程中,如果是寫訪問并且可以寫訪問,處理器就把 頁表內(nèi)對應(yīng)表項中的D位置1,但并不把頁目錄表內(nèi)對應(yīng)表項中的D置1。當(dāng)某頁從磁盤上讀入內(nèi)存時,頁表中對應(yīng)對應(yīng)表項的D位被清0。所以,D=1表示已寫 過對應(yīng)的物理頁。當(dāng)某頁需要從內(nèi)存換出到磁盤上時,如果該頁的D位為1,那么必須進行寫操作(把內(nèi)存中的頁寫入磁盤時,處理器并不清除對應(yīng)頁表項的D 位)。但是,如果要寫到磁盤上的頁的D位為0,那么不需要實際的磁盤寫操作,而只要簡單地放棄內(nèi)存中該頁即可。因為內(nèi)存中的頁與磁盤中的頁具有完全相同的 內(nèi)容。

    <四>頁異常

    啟用分頁機制后,線性地址不再直接等于物理地址,線性地址要經(jīng)過分頁機制轉(zhuǎn)換才成為物理地址。在轉(zhuǎn)換過程中,如果出現(xiàn)下列情況之一就會引起頁異常:

    (1) 涉及的頁目錄表內(nèi)的表項或頁表內(nèi)的表項中的 P=0 ,即涉及到頁不在內(nèi)存;

    (2) 發(fā)現(xiàn)試圖違反頁保護屬性的規(guī)定而對頁進行訪問。

    報告頁異常的中斷向量號是 14(0EH) 。頁異常屬于故障類異常。在進入故障處理程序時,保存的指令指針 CS EIP 指向發(fā)生故障的指令。一旦引起頁故障的原因被排除后,即可從頁故障處理程序通過一條 IRET 指令,直接地重新執(zhí)行產(chǎn)生故障的指令。

    當(dāng)頁故障發(fā)生時,處理器把引起頁故障的線性地址裝入 CR2 。頁故障處理程序可以利用該線性地址確定對應(yīng)的頁目錄項和頁表項。

    頁故障還在堆棧中提供一個出錯碼,出錯碼的格式如下圖所示。其中,U位表示引起故障程序的特權(quán)級,U=1表示用戶特權(quán)級(特權(quán)級3),U=0表 示系統(tǒng)特權(quán)級(特權(quán)級0、1或2);W位表示訪問類型,W=0表示讀/執(zhí)行,W=1表示寫;P位表示異常類型,P=0表示頁不存在故障,P=1表示保護故 障。頁故障的響應(yīng)處理模式同其它故障一樣。

    出錯碼

    的格式 BIT15—BIT3 BIT2 BIT1 BIT0 未使用 U W P

    源文檔 < http://hi.baidu.com/lovetolinux/blog/item/4b572489ceae7398a4c272d6.html >

80386內(nèi)存分頁機制


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 五月婷婷综合激情 | 成人深夜福利 | 黄色资源视频 | 黄色免费毛片 | 日韩精品高清在线 | 亚洲精品久久久久久蜜臀 | 日韩专区在线播放 | 亚洲综合激情另类小说区 | 猛龙怪客| 免费性生活视频 | 偷拍自拍视频网 | 99精品欧美一区二区三区综合在线 | 中国一级大黄大黄大色毛片 | 国产精品俺来也在线观看 | 日本黄色性视频 | av中文字幕在线 | 久久香蕉国产线熟妇人妻 | 91成人免费网站 | 亚洲午夜成激人情在线影院 | 久热中文字幕在线 | 久久亚洲国产精品日日av夜夜 | 99热这里只有精品久久免费 | 久久精品国产一区二区电影 | 中文字幕在线观看电影 | 国产香港一级毛片在线看 | 偷拍自拍网站 | 日韩一区二区三区在线播放 | 亚洲国产区| 欧美精品片 | 国产精品单位女同事在线 | 成人欧美一级毛片免费观看 | 99黄色网| 免费在线一区二区 | 亚洲 精品 综合 精品 自拍 | 27xxoo无遮挡动态视频 | 国精品日韩欧美一区二区三区 | 91精品啪在线观看国产91九色 | 亚州av在线| 91手机在线观看 | 涩涩撸| 青草香蕉精品视频在线观看 |