版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章存儲(chǔ)器管理5.1實(shí)方式存儲(chǔ)器管理5.2保護(hù)方式存儲(chǔ)器管理
5.3保護(hù)及任務(wù)切換
5.4虛擬8086方式5.1實(shí)方式存儲(chǔ)器管理5.1.1存儲(chǔ)器的分段結(jié)構(gòu)
微處理器運(yùn)行在實(shí)方式時(shí),程序?qū)Υ鎯?chǔ)器的訪問(wèn)采用分段地址。分段地址由一個(gè)段值和一個(gè)有效的地址偏移值組合而成,其表示方式為: 段值:偏移量(均以省略后綴H的十六進(jìn)制形式表示)圖5.1在分段尋址中組合段和偏移量5.1.2物理地址的形成圖5.2實(shí)方式下物理地址的產(chǎn)成5.2保護(hù)方式存儲(chǔ)器管理5.2.1存儲(chǔ)器的分段管理1.段選擇器圖5.3保護(hù)方式段選擇器格式2.段描述符表圖5.4段選擇器和描述符表3.段描述符圖5.5描述符的分類圖5.6段描述符格式①段基地址。該域用來(lái)確定段在存儲(chǔ)器的起始地址。對(duì)80286來(lái)說(shuō),段基地址24位寬,段可在4MB線性地址空間的任何字節(jié)處起始;對(duì)80386和80486來(lái)說(shuō),段基地址32位寬,分成兩部分,由處理器將它們結(jié)合在一起,32位段基地址決定了段可在4GB線性地址空間中的任何字節(jié)處起始。可以看出,保護(hù)方式下段基地址的設(shè)置與實(shí)方式下段基地址僅限于被10H整除的地址處是大不相同的,使用起來(lái)靈活得多。②段限量。該域用來(lái)確定段的尺寸。對(duì)80286,段限量為16位無(wú)符號(hào)數(shù),表示段的最大尺寸為64KB。對(duì)80386和80486,段限量由兩部分組成20位的無(wú)符號(hào)數(shù)。但僅就20位的段限量還不能確定出段的尺寸,還需要根據(jù)段描述符中粒度D的設(shè)置來(lái)共同確定。若粒度位設(shè)置成字節(jié)粒狀,則限量以字節(jié)為單位,得段的尺寸為1B~1MB。若粒度位設(shè)置成頁(yè)粒狀,則限量以頁(yè)為單位,一頁(yè)為4KB,故段的尺寸為4KB~4GB。當(dāng)采用頁(yè)粒狀時(shí),有效地址偏移量的最低12位不必檢查。若粒度設(shè)置為頁(yè),段限量設(shè)置為00000H,則該段的有效地址偏移量為0~FFFH(4095)。③類型。圖5.7段描述符類型域的定義④DT位。這是描述符類型位,用來(lái)區(qū)分兩種類型的段描述符。DT=1,表示為段描述符;DT=0,表示為一個(gè)特殊的描述符(或稱系統(tǒng)段描述符)或門描述符。
⑤DPL。該域?yàn)槊枋龇貦?quán)級(jí)域,用來(lái)實(shí)現(xiàn)保護(hù)而不用于地址生成。⑥P。P位為存在位,用來(lái)表示描述符存在于存儲(chǔ)器中(P=1)或不存在于存儲(chǔ)器中(P=0),它用于地址生成。如果一個(gè)描述符所描述的段已移至硬盤上,表明不在內(nèi)存中,這時(shí)P=0。若這種情況下試圖將該描述符的段選擇器裝入段寄存器,處理器便會(huì)產(chǎn)生一個(gè)段不存在異常(以P=0為標(biāo)志),并且操作系統(tǒng)中的異常處理程序會(huì)把該段重新裝入存儲(chǔ)器。因而該位的設(shè)置使操作系統(tǒng)能夠?qū)?yīng)用程序?qū)崿F(xiàn)虛擬存儲(chǔ)器的功能。⑦AVL。AVL為可用位,只在80386、80486中使用。該位用來(lái)確定是否允許系統(tǒng)程序員擴(kuò)充處理器的保護(hù)機(jī)制,即是否允許對(duì)存儲(chǔ)器映象的I/O口實(shí)現(xiàn)保護(hù)。當(dāng)AVL=1時(shí),表示該描述符(用來(lái)描述存儲(chǔ)器映象的I/O段)可被系統(tǒng)軟件使用。當(dāng)AVL=0時(shí),表示該描述符對(duì)應(yīng)的段選擇器不能重新裝入和使用。⑧D。D位為缺省操作尺寸位,不用于地址生成,只在80386及80486的代碼段描述符中被識(shí)別。當(dāng)D=0時(shí),表示操作數(shù)和有效地址的缺省值是16位;當(dāng)D=1時(shí),表示操作數(shù)和有效地址的缺省值為32位。當(dāng)一條單指令具有超越前綴時(shí),可以超越該位設(shè)置。⑨G。G位為粒度位,在80386、80486中,它用來(lái)指定段限量的單位。G=0,表明段限量以字節(jié)為單位;G=1,表明段限量以頁(yè)為單位,每頁(yè)4KB。(2)特殊的段描述符及門描述符。表5.1系統(tǒng)段類型域定義4.描述符表寄存器圖5.8描述符表寄存器圖5.9GDTR、LDTR與描述符表的關(guān)系圖5.10LDTR同LDT描述符和LDT的關(guān)系5.段寄存器圖5.1180286段寄存器格式圖5.1280386和80486段寄存器格式5.2.2存儲(chǔ)器的分頁(yè)管理1.頁(yè)目錄和頁(yè)表分頁(yè)管理機(jī)制在將線性化地址空間的頁(yè)轉(zhuǎn)換到物理地址空間的頁(yè)時(shí),由于每個(gè)頁(yè)面的整個(gè)4KB是作為一個(gè)單位進(jìn)行映射的,且每個(gè)頁(yè)面都對(duì)齊在4KB的邊界,因而線性地址的低12位在分頁(yè)轉(zhuǎn)換過(guò)程中將直接作為物理地址的低12位使用。分頁(yè)管理機(jī)制中的重定位函數(shù)(或稱轉(zhuǎn)換函數(shù))實(shí)際上是把線性地址的高20位轉(zhuǎn)換成對(duì)應(yīng)物理地址的高20位,并且,這個(gè)轉(zhuǎn)換函數(shù)是通過(guò)對(duì)常駐內(nèi)存的頁(yè)表查詢來(lái)完成的。對(duì)頁(yè)表的查詢分兩步進(jìn)行,即查詢一個(gè)兩級(jí)表來(lái)完成。第一級(jí)表稱為頁(yè)目錄表,它的長(zhǎng)度也總是恰好為一頁(yè)(4KB),且起始于能被1000H整除的物理存儲(chǔ)器地址上。因而頁(yè)目錄表的起始地址為20位(80386SX中為12位),頁(yè)目錄表可在微處理器4GB(80386SX為16MB)地址空間內(nèi)任意安置,只要它對(duì)齊在4KB的邊界處即可。
頁(yè)目錄的4KB數(shù)據(jù)結(jié)構(gòu)共存放了1024個(gè)項(xiàng)(稱為頁(yè)目錄項(xiàng))。每項(xiàng)4B,32位,是一個(gè)指針,它指向另一個(gè)相似的數(shù)據(jù)結(jié)構(gòu)。這個(gè)相似的數(shù)據(jù)結(jié)構(gòu)即是稱為頁(yè)表的第二級(jí)表。它也總是4KB長(zhǎng),并對(duì)齊在4KB的邊界處。頁(yè)表的4KB數(shù)據(jù)結(jié)構(gòu)又存放了1024個(gè)頁(yè)表項(xiàng),每項(xiàng)同樣4B,32位長(zhǎng),且作為物理存儲(chǔ)器中頁(yè)的指針。頁(yè)目錄項(xiàng)和頁(yè)表項(xiàng)的格式都一樣,表示在圖5.13中。其中高20位稱為頁(yè)幀地址,低12位定義如下:圖5.13頁(yè)目錄表/頁(yè)表的表項(xiàng)格式(1)P位。該位為存在位。P=1表示該項(xiàng)里的頁(yè)地址映射到物理存儲(chǔ)器中的一個(gè)頁(yè)。P=0,表示該項(xiàng)里的頁(yè)地址沒(méi)有映射到物理存儲(chǔ)器中,或說(shuō)該項(xiàng)所指頁(yè)不在物理存儲(chǔ)器中。這時(shí),若欲用該項(xiàng)進(jìn)行地址轉(zhuǎn)換將產(chǎn)生一個(gè)頁(yè)出錯(cuò)異常,并且操作系統(tǒng)中的頁(yè)出錯(cuò)處理程序?qū)言擁?xiàng)重新裝入存儲(chǔ)器。如果頁(yè)目錄中,某項(xiàng)的P位清零,則表示對(duì)應(yīng)的頁(yè)表已被移出存儲(chǔ)器。可以說(shuō)操作系統(tǒng)利用P位提供的信息實(shí)現(xiàn)了請(qǐng)求分頁(yè)的虛擬存儲(chǔ)器的能力。
(2)R/W位。R/W位為讀/寫位,用于實(shí)現(xiàn)頁(yè)級(jí)保護(hù),它不涉及到地址轉(zhuǎn)換。(3)U/S位。U/S位為用戶/監(jiān)控程序位,用于實(shí)現(xiàn)頁(yè)級(jí)保護(hù),不涉及地址轉(zhuǎn)換。
(4)A位。A位為訪問(wèn)位,用來(lái)表明該項(xiàng)指出的頁(yè)是否已被讀或?qū)?。若目錄?xiàng)中A=1,則表示該項(xiàng)所指出的頁(yè)表已被訪問(wèn)過(guò)。若頁(yè)表項(xiàng)中A=1,則表示該頁(yè)表項(xiàng)所指出存儲(chǔ)器中的頁(yè)已被訪問(wèn)過(guò)??傊?,A位的置位由處理器完成,A位的狀態(tài)可供操作系統(tǒng)軟件測(cè)試,以便計(jì)算不同頁(yè)的使用頻度。(5)D位。該位為頁(yè)面重寫標(biāo)志位,只在頁(yè)表項(xiàng)中設(shè)置,而不在頁(yè)目錄項(xiàng)中設(shè)置。當(dāng)頁(yè)表項(xiàng)中D=1時(shí),表明該項(xiàng)所指出的存儲(chǔ)器中的頁(yè)已被寫。D位的狀態(tài)可被操作系統(tǒng)軟件測(cè)試,以便操作系統(tǒng)判斷存儲(chǔ)器的某頁(yè)在它最后一次被復(fù)制到磁盤后是否被修改過(guò)。
(6)AVL域。該域?yàn)榭捎糜颍?位,供系統(tǒng)軟件設(shè)計(jì)人員使用??蓪⑴c頁(yè)使用有關(guān)的信息放在該域中,幫助分析判斷應(yīng)把哪些頁(yè)移出存儲(chǔ)器。2.線性地址到物理地址的轉(zhuǎn)換圖5.14線性地址格式圖5.15線性地址到物理地址的轉(zhuǎn)換圖5.16線性地址25674890H的分解
由于CR3=28345XXXH,所以頁(yè)目錄基地址=28345000H。線性地址中目錄索引地址為0010010101B,故得頁(yè)目錄表中所尋址項(xiàng)的物理地址=目錄表基地址+偏移地址(目錄索引地址乘4)=28345000H+254H=28345254H。設(shè)目錄表中尋址項(xiàng)(從28345254H開(kāi)始的4個(gè)字節(jié))的內(nèi)容為00200021H,這表明尋址項(xiàng)對(duì)應(yīng)頁(yè)表的基地址為00200000H,P位(位0)及A位(位5)為1,該被尋址頁(yè)表在存儲(chǔ)器中,且對(duì)應(yīng)目錄項(xiàng)已被訪問(wèn)過(guò)。線性地址中的頁(yè)表索引地址為1001110100B,故得頁(yè)表中所尋址項(xiàng)的物理地址=頁(yè)表基地址+頁(yè)表索引地址×4=00200000H+9D0H=002009D0H。又設(shè)頁(yè)表中所尋址項(xiàng)(從002009D0H開(kāi)始的4個(gè)字節(jié))的內(nèi)容為34567021H,則頁(yè)幀基地址=34567000H,要尋址的存儲(chǔ)單元最終物理地址=頁(yè)幀基地址+線性地址中的12位偏移量=34567000H+890H=34567890H。4.頁(yè)轉(zhuǎn)換高速緩沖存儲(chǔ)器圖5.17386DX/386SX轉(zhuǎn)換監(jiān)視緩沖器(TLB)結(jié)構(gòu)3.小結(jié)圖5.18虛擬—物理地址轉(zhuǎn)換5.3保護(hù)及任務(wù)切換5.3.1不同任務(wù)間的保護(hù)不同任務(wù)間的保護(hù)首先開(kāi)始于把每個(gè)任務(wù)放置在不同的虛擬地址空間,然后,再在每個(gè)任務(wù)中定義一組獨(dú)立的映射表,完成相互間各不相同的虛擬—物理地址轉(zhuǎn)換。這樣,一個(gè)任務(wù)中的虛擬地址空間映射到物理存儲(chǔ)器的一部分;另一個(gè)任務(wù)的虛擬地址空間映射到物理存儲(chǔ)器的另外區(qū)域。在各任務(wù)中定義各自獨(dú)立的一組映射表時(shí),一般不應(yīng)使它們所映射的物理存儲(chǔ)空間重疊,因而,各任務(wù)之間是彼此隔離的。
為了將操作系統(tǒng)與各應(yīng)用程序隔離,且為各應(yīng)用程序所共享,常把操作系統(tǒng)存儲(chǔ)在一個(gè)單獨(dú)的任務(wù)中,并把操作系統(tǒng)存儲(chǔ)在虛擬存儲(chǔ)空間的一個(gè)公共區(qū)域中。然后,再對(duì)每個(gè)任務(wù)按此公共區(qū)域分配一個(gè)同樣的虛擬地址空間及定義同樣的虛擬—物理地址轉(zhuǎn)換函數(shù)。這樣,既可使每個(gè)任務(wù)能對(duì)操作系統(tǒng)進(jìn)行訪問(wèn),又可保證操作系統(tǒng)不被各應(yīng)用程序破壞。通常,稱各任務(wù)公用的這部分虛擬地址空間為全局地址空間,而稱僅被一個(gè)任務(wù)獨(dú)占不被其它任務(wù)共享的虛擬地址空間為局部地址空間。5.3.2段級(jí)別保護(hù)圖5.19段描述符格式1.類型檢查圖5.20描述符類型域表5.2存儲(chǔ)段描述符類型表5.3相容的段寄存器和段類型2.限度檢查實(shí)方式下,段的限度固定為64KB。保護(hù)方式下,段的限度由段描述符的限度域指出,是不固定的。對(duì)80286來(lái)說(shuō),限度以字節(jié)為單位,16位限度域表明一個(gè)段最大尺寸為64KB。對(duì)80386/80486來(lái)說(shuō),限度域?yàn)?0位,當(dāng)描述符中G=0時(shí),限度以字節(jié)為單位,一個(gè)段最大尺寸為1MB;當(dāng)G=1時(shí),限度以頁(yè)為單位,一頁(yè)為4KB,限度=限度域值*4096+4095。因此,若限度域值為0,則該段的最大尺寸為4KB,程序可訪問(wèn)段內(nèi)從0到4095的字節(jié)。
除了向下擴(kuò)充的段以外,所有段的段描述符的限度(化為字節(jié)數(shù))都表示從段起始處開(kāi)始的最大偏移量。當(dāng)訪問(wèn)存儲(chǔ)器操作數(shù)時(shí),只要被訪問(wèn)操作數(shù)的一部分超出限度,處理器就會(huì)發(fā)出一般保護(hù)異常信號(hào)。例如,訪問(wèn)一個(gè)雙字操作數(shù),其地址在限度減2處,便會(huì)發(fā)生異常。當(dāng)段描述符中E=1時(shí),為向下擴(kuò)充段,它常用于堆棧段。對(duì)向下擴(kuò)充的段來(lái)說(shuō),限度表示一個(gè)段的最小偏移量。向下擴(kuò)充堆棧段的合法偏移量范圍是從限度的字節(jié)數(shù)+1直到220-1(對(duì)16位段)或232-1(對(duì)32位段)。當(dāng)限度=0時(shí),向下擴(kuò)充段具有最大的尺寸。圖5.21兩種數(shù)據(jù)段的類型3.特權(quán)檢查圖5.22Intel的特權(quán)環(huán)狀模型5.3.3數(shù)據(jù)訪問(wèn)
每當(dāng)一個(gè)程序試圖訪問(wèn)一個(gè)數(shù)據(jù)段時(shí),便將程序的當(dāng)前特權(quán)級(jí)CPL與要訪問(wèn)段的特權(quán)級(jí)DPL進(jìn)行比較,只要DPL的特權(quán)級(jí)別等于或低于CPL(或RPL)的特權(quán)級(jí),對(duì)該數(shù)據(jù)段的訪問(wèn)便是允許的。否則便不允許,并產(chǎn)生一個(gè)一般保護(hù)異常,向操作系統(tǒng)報(bào)告該訪問(wèn)操作違反了特權(quán)規(guī)則。因而,在數(shù)據(jù)訪問(wèn)時(shí),被訪問(wèn)的數(shù)據(jù)段的特權(quán)級(jí)DPL規(guī)定了允許訪問(wèn)該段的最外層特權(quán)級(jí)。由于數(shù)據(jù)訪問(wèn)的這一特權(quán)級(jí)規(guī)則使得上節(jié)所述特權(quán)級(jí)的典型用法中,0級(jí)的操作系統(tǒng)核心,有權(quán)訪問(wèn)任務(wù)中的所有數(shù)據(jù)存儲(chǔ)段;1級(jí)的操作系統(tǒng)其余部分有權(quán)訪問(wèn)2級(jí)和3級(jí)的所有數(shù)據(jù)存儲(chǔ)段;3級(jí)的應(yīng)用程序只能訪問(wèn)本身的處于3級(jí)的數(shù)據(jù)存儲(chǔ)段。反過(guò)來(lái),0級(jí)操作系統(tǒng)核心的數(shù)據(jù)存儲(chǔ)段卻得以保護(hù),不能被操作系統(tǒng)除核心外的其余部分及應(yīng)用程序訪問(wèn)。同時(shí),整個(gè)操作系統(tǒng)也得到了保護(hù),它的數(shù)據(jù)存儲(chǔ)段不允許任何2級(jí)和3級(jí)的應(yīng)用程序訪問(wèn)。5.3.4控制轉(zhuǎn)移在同一任務(wù)中實(shí)現(xiàn)控制轉(zhuǎn)移有3種方式:段內(nèi)轉(zhuǎn)移,直接轉(zhuǎn)移到另一代碼段的段間轉(zhuǎn)移和通過(guò)調(diào)用門的段間轉(zhuǎn)移。
1.段內(nèi)轉(zhuǎn)移段內(nèi)轉(zhuǎn)移通過(guò)近程跳轉(zhuǎn)指令JMP或近程調(diào)用指令CALL及返回指令RET(包括直接給出段內(nèi)偏移量和間接給出段內(nèi)偏移量)執(zhí)行。它不會(huì)引起特權(quán)級(jí)的變化,也不需再加載CS段寄存器,只需作限度檢查,即檢查是否會(huì)轉(zhuǎn)移到段外。同時(shí)為加速保護(hù)檢查,限度值已預(yù)先裝入到段描述符高速緩存器中。2.直接的段間轉(zhuǎn)移直接的段間轉(zhuǎn)移是最簡(jiǎn)單的段間轉(zhuǎn)移,它使用具有遠(yuǎn)程標(biāo)號(hào)的跳轉(zhuǎn)指令或調(diào)用及返回指令執(zhí)行。這時(shí),遠(yuǎn)程標(biāo)號(hào)直接給出一個(gè)48位的遠(yuǎn)指針:16位選擇子和32位偏移量。該16位選擇子作為新的選擇器值裝入CS寄存器時(shí),便將所指向的段描述符裝入CS段寄存器對(duì)應(yīng)的段描述符高速緩存器中。接下來(lái)應(yīng)進(jìn)行保護(hù)檢查,只有當(dāng)遠(yuǎn)指針?biāo)改繕?biāo)段的描述符特權(quán)級(jí)DPL與當(dāng)前特權(quán)級(jí)CPL(當(dāng)前正執(zhí)行程序段的特權(quán)級(jí))相等,且目標(biāo)段是一個(gè)存在的可執(zhí)行的代碼段,或目標(biāo)段描述符特權(quán)級(jí)DPL高于等于當(dāng)前特權(quán)級(jí)CPL,且目標(biāo)段是一個(gè)存在的,一致的可執(zhí)行代碼段時(shí),這種控制轉(zhuǎn)移方能實(shí)現(xiàn)。即目標(biāo)段轉(zhuǎn)移地址的基地址由遠(yuǎn)指針?biāo)付蚊枋龇峁?,轉(zhuǎn)移地址的偏移量由跳轉(zhuǎn)或調(diào)用指令提供。
這里所謂一致的可執(zhí)行代碼段是一種特別的存儲(chǔ)段,以段描述符類型域中ST=1及C=1來(lái)標(biāo)志。一致的可執(zhí)行代碼段用來(lái)存放多個(gè)特權(quán)級(jí)程序共享的例程。例如,存放數(shù)值庫(kù)例程。這樣,不同特權(quán)級(jí)執(zhí)行的程序可以使用段間調(diào)用指令調(diào)用庫(kù)中被共享的例程,并可在調(diào)用程序(主程序)具有的特權(quán)級(jí)(等于或低于一致可執(zhí)行代碼段的特權(quán)級(jí))執(zhí)行該例程,而不要求改變特權(quán)級(jí)。因此,可以說(shuō)直接的段間轉(zhuǎn)移實(shí)現(xiàn)的是同一特權(quán)級(jí)同一任務(wù)的轉(zhuǎn)移??刂妻D(zhuǎn)移到一致的代碼段,將在調(diào)用程序(主程序)具有的特權(quán)級(jí)執(zhí)行一致代碼段中的共享例程,而不在一致的代碼段由其DPL表示的特權(quán)級(jí)上執(zhí)行共享例程。因而,這種情況下,一致代碼段中的DPL用來(lái)規(guī)定可以轉(zhuǎn)移到該一致代碼段的最內(nèi)層特權(quán)級(jí)。DPL的這種解釋正好與數(shù)據(jù)訪問(wèn)時(shí)相反。3.通過(guò)調(diào)用門的段間轉(zhuǎn)移表5.4系統(tǒng)段和門的類型字段的編碼圖5.23調(diào)用門描述符格式圖5.24通過(guò)調(diào)用門的轉(zhuǎn)移圖5.25特權(quán)級(jí)和門及其間的調(diào)用4.堆棧切換
CALL指令通過(guò)調(diào)用門向內(nèi)層程序轉(zhuǎn)移時(shí),不僅切換特權(quán)級(jí),而且也需要切換棧。為使微機(jī)系統(tǒng)安全運(yùn)行,操作系統(tǒng)應(yīng)使每個(gè)任務(wù)為每個(gè)特權(quán)級(jí)別保持一個(gè)獨(dú)立的棧。因而,當(dāng)通過(guò)調(diào)用門向內(nèi)層轉(zhuǎn)移時(shí),必須從主調(diào)用程序的外層棧切換到目標(biāo)的內(nèi)層棧。內(nèi)層棧的特權(quán)級(jí)別由目標(biāo)代碼段描述符的DPL決定。內(nèi)層棧的棧段寄存器SS及棧指針ESP由任務(wù)狀態(tài)段TSS中適當(dāng)(與目標(biāo)代碼段相同特權(quán)級(jí))的指針進(jìn)行初始化。TSS由操作系統(tǒng)為每個(gè)任務(wù)所建,它包含有由操作系統(tǒng)初始化,且為只讀的指向0級(jí)、1級(jí)和2級(jí)的48位棧指針:棧段選擇器(SS)和偏移量(ESP)。通常TSS中的ESP指針設(shè)置成新棧段的高端限定值,因而在新的特權(quán)區(qū)總是建立起一個(gè)空棧。圖5.26切換到內(nèi)層棧5.向外層返回
CALL指令通過(guò)調(diào)用門把外層的程序轉(zhuǎn)移到內(nèi)層的過(guò)程(子程序)后,當(dāng)內(nèi)層的子程序執(zhí)行完時(shí),需執(zhí)行一條段間返回指令RET,把程序再?gòu)膬?nèi)層轉(zhuǎn)向外層,并將堆棧從內(nèi)層切向外層。仍以圖526為例說(shuō)明返回過(guò)程。首先,從內(nèi)層棧中彈出返回地址指針到CS寄存器和EIP寄存器中,并且可以調(diào)整內(nèi)層棧的ESP值(如圖5.26中ESP+16,該調(diào)整數(shù)16為RET16的操作數(shù)),使其跳過(guò)CALL指令執(zhí)行時(shí)從外層??截惾雰?nèi)層棧的4個(gè)雙字參數(shù),指向外層棧指針ESP的壓入處。返回地址指針的選擇子部分指向要返回的外層棧。選擇子的RPL字段確定返回后的特權(quán)級(jí)。5.3.5頁(yè)級(jí)別保護(hù)圖5.27頁(yè)表及頁(yè)目錄項(xiàng)目格式表5.5頁(yè)級(jí)保護(hù)屬性表5.6頁(yè)目錄和頁(yè)表的保護(hù)組合5.3.6任務(wù)切換1.任務(wù)狀態(tài)段圖5.2832位任務(wù)狀態(tài)段1)鏈接字段圖5.29任務(wù)狀態(tài)段的鏈接鏈2)內(nèi)層棧指針任務(wù)狀態(tài)段中有3個(gè)內(nèi)層棧指針,均為48位全指針,依次存放在TSS中偏移量為4、12及20開(kāi)始的區(qū)域中,分別指向0級(jí)、1級(jí)及2級(jí)堆棧的棧頂。當(dāng)發(fā)生向內(nèi)層轉(zhuǎn)移時(shí),便把相應(yīng)的內(nèi)層棧指針裝入到SS及ESP寄存器,以便切換到內(nèi)層堆棧,且把外層棧指針壓入內(nèi)層棧中,以便當(dāng)內(nèi)層向外層返回時(shí)恢復(fù)外層棧用。TSS段的內(nèi)層棧指針沒(méi)有指向3級(jí)的棧指針(因?yàn)?級(jí)是最外層的特權(quán)級(jí))。如果任務(wù)在3級(jí)被掛起,由于沒(méi)有發(fā)生特權(quán)級(jí)轉(zhuǎn)移,堆棧不用切換,且被掛起任務(wù)的指針保存在TSS的SS及ESP寄存器映象中。
TSS段中的內(nèi)層棧指針只能讀出不能寫入,因而,向內(nèi)層棧切換時(shí)總是將內(nèi)層棧初始化為同樣的棧指針。這是因?yàn)椴豢赡馨l(fā)生同級(jí)內(nèi)層轉(zhuǎn)移的遞歸。3)有關(guān)地址映射的基寄存器這里所謂有關(guān)地址映射的基寄存器是指局部描述符表寄存器LDTR和控制寄存器CR3。LDTR包含當(dāng)前任務(wù)的LDT描述符的選擇子。CR3包含頁(yè)轉(zhuǎn)換機(jī)制中頁(yè)目錄表的基地址(起始地址)。任務(wù)切換時(shí),處理器用新任務(wù)TSS段中偏移量為60H中的內(nèi)容(任務(wù)的LDT描述符選擇子)裝入LDTR寄存器。這樣,便將局部描述符表LDT變成新任務(wù)的LDT,從而也就改變了虛擬地址到線性地址的轉(zhuǎn)換函數(shù)。同樣,在任務(wù)切換時(shí),處理器用新任務(wù)TSS段中偏移量為1CH處的內(nèi)容裝入CR3寄存器。這樣,就將頁(yè)目錄表變成新任務(wù)的頁(yè)目錄表,從而改變了線性地址到物理地址的轉(zhuǎn)換函數(shù)。這種在任務(wù)之間改變轉(zhuǎn)換函數(shù)的能力,也是保護(hù)機(jī)制的一部分,使任務(wù)之間得到相互隔離。4)寄存器保存區(qū)域
TSS的寄存器保存區(qū)位于偏移量為20H~5FH的區(qū)域,用來(lái)保存通用寄存器、處理器控制寄存器及段寄存器的內(nèi)容。其中各段寄存器內(nèi)容都保存在一個(gè)32位的雙字中,雙字的低16位存放16位選擇子,雙字的高16位為全零。當(dāng)TSS對(duì)應(yīng)的任務(wù)正在執(zhí)行時(shí),保存區(qū)域是未定義的。當(dāng)前任務(wù)被切換時(shí),通用寄存器、處理器控制寄存器及段寄存器的當(dāng)前值便存入當(dāng)前任務(wù)的保存區(qū)域中。這樣,當(dāng)再次發(fā)生任務(wù)切換,并切換回原任務(wù)時(shí),各寄存器的值可由保存區(qū)域讀出,恢復(fù)成該任務(wù)切換前的狀態(tài),以使原任務(wù)能恢復(fù)執(zhí)行。5)其它字段
TSS中偏移量從66H開(kāi)始的區(qū)域存放I/O許可位圖,它定義了可由TSS對(duì)應(yīng)任務(wù)尋址的I/O端口地址。I/O許可位圖屬于TSS中的附加字段。
TSS中偏移量為64H處的字是為任務(wù)提供的特別的屬性。80386中只定義了一個(gè)調(diào)試陷阱屬性位T(位于64H處字的最低位),字的其它位為全零。當(dāng)發(fā)生任務(wù)切換時(shí),進(jìn)入任務(wù)的T位為1,則在任務(wù)切換后,新任務(wù)的第一條指令執(zhí)行之前產(chǎn)生調(diào)試陷阱。調(diào)試陷阱可使軟件在任務(wù)之間根據(jù)需要有效地共享調(diào)試寄存器。2.TSS描述符、任務(wù)門描述符及任務(wù)寄存器1)TSS描述符圖5.30TSS描述符的格式2)任務(wù)寄存器任務(wù)寄存器TR與一個(gè)段寄存器的格式相同,有一個(gè)16位的選擇器和48位不可見(jiàn)的高速緩存器。16位選擇器用來(lái)存放當(dāng)前任務(wù)TSS描述符的選擇子。當(dāng)把當(dāng)前任務(wù)TSS描述符的選擇子加載入TR中時(shí),TSS描述符提供的TSS段基址和限度值便被高速緩存入TR的48位不可見(jiàn)部分,然后,當(dāng)前任務(wù)TSS的基地址及限度值便從TR的高速緩存器中取得。加載和存儲(chǔ)TR寄存器分別采用LTR及STR指令。STR為非特權(quán)指令,可在任何特權(quán)級(jí)程序執(zhí)行。LTR為特權(quán)指令,只能在CPL=0的程序中執(zhí)行。通常,系統(tǒng)軟件初始化時(shí)向TR中置入初值。以后TR值的進(jìn)一步變化只能由任務(wù)切換來(lái)進(jìn)行。3)任務(wù)門描述符圖5.31任務(wù)門描述符格式
3.任務(wù)切換
1)任務(wù)切換的啟動(dòng)有4種方式用來(lái)啟動(dòng)任務(wù)切換。
(1)遠(yuǎn)程JMP指令或CALL指令的目標(biāo)選擇器選擇了全局描述符表中的TSS描述符。這時(shí)目的地址偏移量被忽略。
(2)遠(yuǎn)程JMP指令或CALL指令的目標(biāo)選擇器選擇了GDT或LDT中的任務(wù)門(目標(biāo)地址的偏移量被忽略),任務(wù)門中的選擇器指向新任務(wù)的TSS描述符。(3)發(fā)生了一個(gè)中斷,該中斷的向量選擇了IDT中的任務(wù)門,任務(wù)門中的選擇器指向新任務(wù)的TSS描述符。
(4)EFLAGS中的嵌套任務(wù)位NT=1時(shí),執(zhí)行返回指令。這時(shí),目的任務(wù)的選擇器在執(zhí)行返回指令的任務(wù)的TSS鏈接字中。綜上所述,正常的CALL和JMP指令以及中斷,如果它們直接或通過(guò)任務(wù)門間接引用一個(gè)TSS描述符,就會(huì)變成任務(wù)切換指令。IRET指令只有NT=1時(shí)才能啟動(dòng)一個(gè)任務(wù)切換。2)任務(wù)的切換過(guò)程任務(wù)的切換過(guò)程需經(jīng)如下5個(gè)步驟。(1)特權(quán)檢查。(2)存在與限度檢查。(3)引出任務(wù)的狀態(tài)保存。(4)TR寄存器加載。(5)引入任務(wù)的寄存器加載和任務(wù)執(zhí)行。5.3.7對(duì)特權(quán)級(jí)敏感的指令
80386指令系統(tǒng)中,某些指令當(dāng)具有不同特權(quán)級(jí)的程序執(zhí)行它們時(shí),會(huì)有不同的結(jié)果。如果一條指令被賦予了特權(quán),便只能在特權(quán)級(jí)0執(zhí)行;如果試圖在0級(jí)以外的特權(quán)級(jí)執(zhí)行該指令,便會(huì)產(chǎn)生異常。此外,I/O敏感指令只能在兩種情況下執(zhí)行:①執(zhí)行該指令的程序,其特權(quán)級(jí)等于或高于EFLAGS寄存器中IOPL域規(guī)定的特權(quán)級(jí)。②I/O敏感指令中使用任務(wù)狀態(tài)段TSS中I/O許可位圖規(guī)定的可由當(dāng)前任務(wù)訪問(wèn)的I/O地址。最后,若需對(duì)EFLAGS中某些位進(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職護(hù)理(護(hù)理風(fēng)險(xiǎn)管理)試題及答案
- 2025年中職交通運(yùn)營(yíng)管理(交通調(diào)度管理)試題及答案
- 2025年大學(xué)車輛工程(汽車制造企業(yè)生產(chǎn)管理)試題及答案
- 2025年大學(xué)大二(人力資源管理)員工關(guān)系綜合測(cè)試試題及答案
- 2025年高職建筑材料工程技術(shù)(新型建筑材料研發(fā))試題及答案
- 2026年重慶大學(xué)附屬江津醫(yī)院招聘?jìng)淇碱}庫(kù)(中藥調(diào)劑崗)及完整答案詳解1套
- 娛樂(lè)直播介紹
- 攝影比賽教學(xué)介紹
- 2026年浙江安保管理員考試題庫(kù)含答案
- 2026年母嬰護(hù)理新生兒急救基礎(chǔ)技能考核題及解析
- 環(huán)境衛(wèi)生學(xué)EnvironmentalHygiene10課件
- 橋架安裝承包合同
- 牛羊肉精深加工項(xiàng)目可行性研究報(bào)告
- 12D101-5 110KV及以下電纜敷設(shè)
- 直腸陰道瘺診療指南的更新
- DL-T5434-2021電力建設(shè)工程監(jiān)理規(guī)范
- FZT 43046-2017 錦綸彈力絲織物
- 居住權(quán)協(xié)議書
- 病案管理考核標(biāo)準(zhǔn)表格2022版
- 中國(guó)家庭金融調(diào)查報(bào)告
- 頂板安全生產(chǎn)責(zé)任制
評(píng)論
0/150
提交評(píng)論