計算機的保護模式_第1頁
計算機的保護模式_第2頁
計算機的保護模式_第3頁
計算機的保護模式_第4頁
計算機的保護模式_第5頁
已閱讀5頁,還剩104頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

微機接口技術其次章愛護模式提綱2.1愛護模式基礎2.2內(nèi)存管理2.3任務2.4特權級愛護2.1愛護模式基礎通常所說的愛護模式是指80386處理器及以后的處理器所實現(xiàn)的運行模式。2.1.1CPU的3種運行模式從80386起先,Intel的CPU具有3種運行模式:實模式愛護模式虛擬8086模式實模式在實模式下,80X86等同于一個16位的8086微處理器。接受類似于8086的體系結構,其尋址機制、中斷處理機制均和8086相同.只運用低20位地址線,只能尋址1M字節(jié)的物理地址空間.實模式不支持硬件上的多任務切換.不支持特權級,可以執(zhí)行全部特權指令。DOS操作系統(tǒng)運行于實模式下,而Windows/Linux操作系統(tǒng)運行于愛護模式下。愛護模式CPU供應了段式和頁式內(nèi)存管理功能,支持多任務和特權級。物理尋址空間高達4GB(80386/80486)或64GB(Pentium及以上CPU)。虛擬8086模式虛擬8086模式又稱“V86模式”。32位80X86處理器給每個以“虛擬8086模式”運行的任務“創(chuàng)建”了一個與真實的8086處理器特別相像的運行環(huán)境,以便運行DOS程序。既有愛護功能又能執(zhí)行8086代碼的工作模式。2.1.1CPU的3種運行模式實模式保護模式V86模式Reset復位Reset復位、修改CR0LMSW指令、修改CR0中斷或異常IRETD指令、任務轉換Reset復位CPU的3種運行模式及其切換特權級在愛護模式下,CPU有4個特權級,分別為特權級0、1、2、3。Ring2Ring0Ring1應用程序操作系統(tǒng)Ring3操作系統(tǒng)運行在高的特權級(Ring0)上,而應用程序運行在低的特權級(Ring3)上,應用程序不能干脆修改(破壞)操作系統(tǒng)的程序和數(shù)據(jù).2.1.2愛護模式下的特殊寄存器通用32位寄存器EAXEBXECXEDXESIEDIEBPESP3116150GDTR:globaldescriptortableLDTR:localdescriptortableIDTR:interruptdescriptortableTR:taskregisterEIP:32bitsinlengthEFLAGSCR0,CR1,CR2,CR3DR0-DR7(Debugregisters)TR6-TR7(Testregisters)EIPCSDSSSESFSGSAXBXCXDXSPBPSIDIEFLAGSGDTRIDTRLDTRCR0CR1CR2CR3DR0DR1DR2DR3DR4DR5DR6DR7TR6TR7LimitLimitBaseBase0151647MSW2.1.2愛護模式下的特殊寄存器標記寄存器標記寄存器EFLAGS也擴展為32位2.1.2愛護模式下的特殊寄存器EFLAGS中的位11到位0和8086完全相同。這里主要擴展了4個標記位:VM:v86模式位,=1工作在v86模式,=0工作在實模式或愛護模式RF:復原位,與程序調(diào)試有關的一個限制位。NT:嵌套任務位,=1當前任務嵌套在其他任務中IOPL:占2位,規(guī)定了哪些特權級的程序可以執(zhí)行I/O指令2.1.2愛護模式下的特殊寄存器指令指針寄存器EIP和堆棧指針寄存器ESPEIP和ESP都是32位寄存器,它們的低16位分別是IP和SP。IPSP3116150EIPESP2.1.2愛護模式下的特殊寄存器愛護模式增加了四個寄存器:全局描述符表寄存器GDTR中斷描述符表寄存器IDTR局部描述符表寄存器LDTR任務寄存器TR2.1.2愛護模式下的特殊寄存器愛護模式下存貯器的虛擬地址須先由分段部件轉換為線性地址,再由分頁部件轉換為物理地址。線性地址由段基址和段內(nèi)偏移量相加得到。段內(nèi)偏移量32位(段最大4GB),段基地址仍舊由16位的段寄存器選擇。2.1.2愛護模式下的特殊寄存器段寄存器的內(nèi)容,是-個被稱為段描述符的索引值,所檢索到的表項叫做段描述符,每個段描述符含8個字節(jié),其中包括了32位的段基址。2.1.2愛護模式下的特殊寄存器全局描述符表寄存器GDTRGDTR是48位的寄存器。其最低16位是限長,給出全局描述符表(GDT)的字節(jié)大?。ㄆ渲当菺DT的長度少1);其高32位是基址,指出GDT在物理存儲器中存放的基地址。GDT全局存儲器是一種共享系統(tǒng)資源,該存儲器可以被全部任務訪問。全局描述符表GDT是用來定義全局存儲器空間的一種機制,它用段描述符說明一個全局存儲器中的段,每個GDT最多含有8192個描述符(8192×8=64KB)。全局描述符表只能有一個。GDTGDT是位于存貯器中,用全局描述符表寄存器GDTR指出它的位置和大小,可軟件編程變更。2.1.2愛護模式下的特殊寄存器BASELIMIT0471615819108190全局描述符表GDT全局描述符表寄存器(GDTR)MAX:64kbytes8Kentries12.1.2愛護模式下的特殊寄存器中斷描述符表寄存器IDTRIDTR是48位的寄存器。其最低16位是限長,給出中斷描述符表IDT的字節(jié)大小(其值比IDT的長度少1);其高32位是基址,指出IDT在物理存儲器中存放的基地址?;废揲L4716150IDTRIDT中斷描述符表。IDT中保存的是中斷門描述符。每個門描述符包含8字節(jié),IDT最多包含256個門描述符,因為CPU最多支持256個中斷。中斷門指出的是中斷服務程序的入口。2.1.2愛護模式下的特殊寄存器愛護模式下的中斷描述符表的功能,類似于實模式下的中斷向量表,區(qū)分為IDT的位置可變,由相應的描述符說明,而實模式下的中斷向量表的地址是固定的,必需在物理地址00000H處。GDTR和IDTR的值必需在進入愛護模式之前裝入。2.1.2愛護模式下的特殊寄存器局部描述符表寄存器LDTR愛護模式下多任務的環(huán)境中每個任務都有一個局部描述符表LDT。LDT只含有與系統(tǒng)中某一個任務相關的各個段的描述符。和全部任務有關的公用段的描述符放在全局描述符表GDT中。這樣,就可以使每一任務的代碼段、數(shù)據(jù)段、堆棧段與系統(tǒng)其他部分隔離開,達到愛護的目的。LDT由于每項任務都有自己的LDT(且每項任務只能有一個LDT),因此愛護模式的軟件系統(tǒng)可能有多個LDT。但GDT只有一個。多LDT的示例LDTRLDTR是一個16位的選擇符,包含LDT描述符在GDT中的索引,不干脆指出LDT的位置和大小。LDTR寄存器確定LDT的位置和限長的過程GDT①②③④⑤LDTRGDTRLDT①和②步由GDTR確定了GDT表在存儲器中的位置和限長。LDTR中是一個選擇符,它包含了LDT描述符在GDT中的索引。③步是依據(jù)LDTR在GDT中取出LDT描述符的過程。在LDT描述符中,包含由LDT的位置和限長,即④和⑤步。TR任務寄存器TR任務寄存器TR在愛護模式的任務切換機制中運用。TR是16位的選擇符,其內(nèi)容為索引值,它選中的是TSS描述符。TR的初值由軟件裝入,當執(zhí)行任務切換指令時TR的內(nèi)容自動修改。TSS在多任務環(huán)境下,每個任務都有屬于自己的任務狀態(tài)段TSS,TSS中包含啟動任務所必需的信息。任務狀態(tài)段TSS在存儲器的基地址和限長(大?。┯蒚SS描述符指出。TSS描述符放在全局描述符表GDT中,TR內(nèi)容為選擇符,它指出TSS描述符在GDT中的依次號。由描述符說明各TSS的位置和限長。由任務寄存器TR取得TSS的過程①②③④⑤①和②步由GDTR確定了GDT表在存儲器中的位置和限長。TR是一個選擇符,這個選擇符中包含了TSS描述符在GDT中的索引。③步依據(jù)TR在GDT中取出TSS描述符。在第④和⑤步中,在TSS描述符中取得TSS的基址和限長。PhysicalMemoryGDTTSSTSSdescriptorTRBASELIMIT01516472.1.2愛護模式下的特殊寄存器限制寄存器有四個系統(tǒng)限制寄存器CR0~CR3。CR0的低5位是系統(tǒng)限制標記,被稱為機器狀態(tài)字MSW;分頁機制中用到CR3、CR2和CR0的其他位。PG00..00ETTSEMMPPE3130~1943210CR02.1.2愛護模式下的特殊寄存器機器狀態(tài)字MSW中各位的含義如下:PE(ProtectionmodeEnable):愛護模式允許標記。=0為實模式,CPU復位(啟動)時自動進入實模式;=1為愛護模式??梢酝ㄟ^軟件設置PE位,進入或退出愛護模式。MP(Monitorcoprocessorextension):運算協(xié)處理器存在位。=1表示系統(tǒng)中有運算協(xié)處理器。EM(Emulateprocessorextension):=1時系統(tǒng)用軟件模擬器執(zhí)行數(shù)學運算。TS(TaskSwitched):任務切換標記。當任務間切換時,自動設置此位為1。PG(Pagingenable):=1時,存儲器管理單元允許分頁。=0時,分頁功能被關閉,線性地址等于物理地址。2.1.2愛護模式下的特殊寄存器段寄存器32位CPU有6個段寄存器:CS——代碼段寄存器,其值為代碼段的段值;

DS——數(shù)據(jù)段寄存器,其值為數(shù)據(jù)段的段值;

ES——附加段寄存器,其值為附加數(shù)據(jù)段的段值;

SS——堆棧段寄存器,其值為堆棧段的段值;

FS——附加段寄存器,其值為附加數(shù)據(jù)段的段值;

GS——附加段寄存器,其值為附加數(shù)據(jù)段的段值。2.1.2愛護模式下的特殊寄存器在實模式和V86模式下,段寄存器的16位內(nèi)容是20位段首址的高16位,段首址的低4位為0。在愛護模式下,段寄存器中的16位內(nèi)容是一個選擇符(selector),用于在段描述符表(GDT或LDT)中選擇(確定)段描述符。2.1.2愛護模式下的特殊寄存器CS:EIP=0008:804F1266SS:ESP=0010:8053CED8DS=0023ES=0023FS=0030GS=0000IndexTIRPL1514131211109876543210選擇符2.1.2愛護模式下的特殊寄存器RPL(RequestorPrivilegeLevel):懇求特權級,2位二進制數(shù)字,范圍為0~3。00代表特權級0,01代表特權級1,10代表特權級2,11代表特權級3。懇求特權級是將要訪問的段的特權級。TI(TableIndicator):表指示符。為0時,從GDT中選擇描述符;為1時,從LDT中選擇描述符。Index:索引。指出要訪問描述符在段描述符表中的依次號,Index占13位。因此,依次號的范圍是0~8191。每個段描述符表(GDT或LDT)中最多有8192=213個描述符。小結GDTR(GDT)IDTR(IDT)LDTR(LDT)TREFLAGS(IOPL,VM)CR0(PE,PG)CR1,CR2,CR3CS,DS,ES,FS,GS,SS(selector)2.2內(nèi)存管理80368以上的CPU允許運用虛擬存儲器,除了有一個速度較快地、容量較小的主存儲器(內(nèi)存),還有一個速度較慢,但容量很大的外部存儲器。二者通過存貯器管理機制,有機地、敏捷地結合在一起。2.2.1分段內(nèi)存管理虛擬地址、線性地址、物理地址虛擬地址就是程序指令中運用的地址(也稱邏輯地址),它由段和偏移兩個部分組成。段選擇符的Index和TI占14位,偏移量為32位。如DS:[EBX]就是一個虛擬地址。TIselectoroffsetINDEXRPLCPU的分段部件將虛擬地址轉換為線性地址。對于一個虛擬地址,線性地址是段的基地址再加上偏移量。段的基地址保存在段描述符中。段基址和偏移量都是32位的,所以線性地址是32位。線性地址空間的范圍是232=4GB,即0000000016~FFFFFFFF16。2.2.1分段內(nèi)存管理虛擬地址和線性地址都是任務相關的。同一個虛擬地址可能得到不同的線形地址。任務1和任務2對同一個虛擬地址0047H:00002000H得到的線性地址可能是不同的。對于同一個局部段選擇符,LDT可對不同的任務設置不同的段基址。線性地址為什么也是任務相關的?物理地址物理地址是微處理器引腳輸出的地址信號。同一個線性地址得到的物理地址可以不同。CPU的分頁部件將線性地址轉換為物理地址。假如禁止CPU的分頁功能,線性地址就干脆作為物理地址。2.2.1分段內(nèi)存管理虛擬地址線性地址物理地址的轉換過程虛擬地址(16位段選擇符:32位偏移量)分段部件線性地址(32位)=段基址+偏移量分頁部件物理地址=頁的基地址+偏移量物理地址=線性地址允許分頁?允許禁止2.2.1分段內(nèi)存管理段式地址轉換轉換過程如圖2-13。依據(jù)段選擇符在GDT或LDT中確定對應的段描述符,在段描述符中包括這個段的段基址、限長和權限等信息。取出段的基址后,再加上偏移部分,就得到了線性地址。2.2.1分段內(nèi)存管理段描述符段基址限長權限+

段偏移虛擬地址線性地址全局段與局部段2.2.1分段內(nèi)存管理段描述符段描述符用于描述代碼段、數(shù)據(jù)段和堆棧段。 段限長指出了一個段的最終一個字節(jié)的偏移地址。段描述符位于GDT或LDT中,占8字節(jié)(64位),由以下幾個部分組成:段基址(32位)、限長(20位)、訪問權限(8位)和屬性(4位)。段描述符的格式如圖2-14,圖2-15。段描述符格式2.2.1分段內(nèi)存管理P(Present)存在位。=1時表示該段己裝入內(nèi)存;=0時表示該段沒有在內(nèi)存中,訪問這個段會產(chǎn)生段異樣。操作系統(tǒng)將某個段從物理內(nèi)存中交換到磁盤時,設置此位為0。DPL(DescriptorPrivilegeLevel)描述符特權級。說明這個段的特權級,取值為0~3。S(System)描述符類型位。=1時,這個段為代碼段、數(shù)據(jù)段或堆棧段;=0時,為系統(tǒng)段描述符。E(Executable)可執(zhí)行位,用來區(qū)分代碼段和數(shù)據(jù)段。S=1且E=1時,這是一個代碼段,可執(zhí)行。S=1且E=0時,這是一個數(shù)據(jù)段或堆棧段,不行執(zhí)行。E=0時,后面的兩位為ED和W;若E=1時,后面的兩位為C和R。PDPL1580TYPE11CRA10EWA2.2.1分段內(nèi)存管理ED(ExpansionDirection)擴展方向位(對數(shù)據(jù)段或堆棧段)。=0時,段向上擴展(從低地址向高地址擴展),偏移量小于等于限長。=1時,段向下擴展(從高地址向低地址擴展),偏移量必需大于限長。W(Writeable)寫允許位(對數(shù)據(jù)段或堆棧段)。=0時,不允許對這個數(shù)據(jù)段寫入;=1時,允許對這個數(shù)據(jù)段寫入。對數(shù)據(jù)段進行讀操作總是被允許的。C(Conforming)一樣位(對代碼段)。=0時,這個段不是一樣代碼段;=1時,這個段是一樣代碼段。R(Readable)讀允許位(對代碼段)。=0時,不允許讀這個段的內(nèi)容;=1時,允許讀這個段的內(nèi)容。對于代碼段進行寫操作總是被禁止的。PDPL1580TYPE11CRA10EWA2.2.1分段內(nèi)存管理A(Accessed)訪問位。=1表示段己被訪問(運用)過;=0表示段未被訪問過。G(Granularity)粒度位。G=1時,限長以頁為單位;G=0時,限長以字節(jié)為單位。D(DefaultOperationSize)默認操作數(shù)寬度。D=1時,為32位數(shù)據(jù)操作段;D=1時,為16位數(shù)據(jù)操作段。AVL(Availablefield)可用位。這一位保留給操作系統(tǒng)或應用程序來運用。2.2.1分段內(nèi)存管理段的屬性Windows操作系統(tǒng)中,DS段的線性地址范圍為0000000016-FFFFFFFF16,與CS段完全相同。段的屬性是由段選擇符來確定的,對于同樣一個線性地址范圍,不同的選擇符有不同的屬性。如0000000016-FFFFFFFF16可能是代碼段,也可能是數(shù)據(jù)段。2.2.1分段內(nèi)存管理段描述符高速緩存為了提高CPU的運行效率在CPU內(nèi)部設置了段描述高速緩存,這些緩存不行見,自動裝入段描述符。段描述符高速緩沖的內(nèi)容和6個段描述符寄存器索引的描述符當前值保持一樣。GDTbase=0003F000Limit=03FF0003F0000000000000000000-FFFF0000009BCF000003F010FFFF00000093CF00-FFFF000000FBCF000003F020FFFF000000F3CF00-AB200020048B0080.0003F030010000F0DF93C0FF-FF0F000000F34000@.0003F040FFFF000400F20000-00000000000000000008Code3200000000FFFFFFFF0PRE0010Data3200000000FFFFFFFF0PRW001BCode3200000000FFFFFFFF3PRE0023Data3200000000FFFFFFFF3PRW0028TSS3280042000000020AB0PB0030Data32FFDFF00000001FFF0PRW003BData320000000000000FFF3PRW0043Data16000004000000FFFF3PRW0048Reserved00000000000000000NP段描述符的例子SEGMENTLIMIT15..0SEGMENTBASE15..0

BASE23..16

BASE31..24GX0LIMIT19..16PDPLSTYPEA0347AVL0231615872431PDPL1580TYPE11CRA10EWALoadingDescriptorfromDescriptorTableLDTRdescriptorCSdescriptor00A00000HFFFFHGDTR00A00000H00A0FFFFH2000HLDTR00A02007H00A02000H00008290000000FFFF0FFE60FFFF000000900000HFFFFH00900000H0090FFFFH1005HCS00600000HFFFFFH00901007H00901000H006FFFFFH00600000HGDT(64KB)LDT(64KB)CODESEGMENT(1MB)SYSTEMMEMORYUSERMEMORYCS=1003H,如何?2.2.2分頁內(nèi)存管理愛護模式下的CPU支持分頁機制,并且分頁管理是在分段管理機制的基礎上工作,它將分段管理機制得到的線性地址轉換為物理地址。運用分頁機制的好處在于,它可以把每個活動任務當前所必需的少量頁面放在內(nèi)存中,而不必將整個段調(diào)入內(nèi)存,從而提高了內(nèi)存的運用效率。2.2.2分頁內(nèi)存管理分頁全部頁的長度固定為4KB,頁與頁之間也沒有重疊。CPU將4GB的線性地址空間劃分成220頁。在Windows/Linux操作系統(tǒng)中,將段式內(nèi)存管理和頁式內(nèi)存管理結合起來,主要是依靠頁式內(nèi)存管理來調(diào)度內(nèi)存。2.2.2分頁內(nèi)存管理線性地址到物理地址的映射線性地址按頁(4KB)為單位映射到物理地址。每一個線性頁面都映射到一個物理頁面上。任務A任務B頁1頁2頁1頁3頁2物理內(nèi)存線性地址空間線性地址到物理地址的映射2.2.2分頁內(nèi)存管理線性地址轉換為物理地址的過程分頁機制,就是一種將線性地址的頁面映射到物理地址頁面的手段,也就是從線性地址到物理地址的轉換過程。分頁機制中用到了兩個表:頁表書目表和頁表。2.2.2分頁內(nèi)存管理32位線性地址被劃分為3個部分:頁書目索引頁表索引字節(jié)索引其中第1項是對頁書目(PageDirectory)的索引,第2項是對頁表(PageTables)的索引,第3項是線性地址在頁面內(nèi)的偏移。10位12位10位2.2.2分頁內(nèi)存管理線性地址轉換為物理地址的過程LinearAddress從何而來?黑色方框的邊界代表什么意思?2.2.2分頁內(nèi)存管理片內(nèi)轉換檢測緩沖器TLB每次內(nèi)存操作都須要將線性地址轉換為物理地址,轉換過程中須要訪問頁書目表和頁表來取得頁表描述符和頁描述符。為了提高轉換效率,CPU內(nèi)部設置了片內(nèi)轉換檢測緩沖器TLB(TranslationLookasideBuffer),其中保存了32個頁描述符,它們都是最近運用過的。2.2.2分頁內(nèi)存管理頁表項頁表項就是在分頁轉換時用到的頁表描述符和頁描述符,都是32位,頁表項格式如圖2-21。高20位基地址AVL0D0A00R/WU/SP3112111098765432102.2.2分頁內(nèi)存管理頁書目、頁表和物理頁的基地址的低12位全部為0,定位在頁的邊界上。頁表項的低12位供應愛護功能和統(tǒng)計信息。U/S位、R/W位、P位實現(xiàn)頁愛護機制,p32。2.2.2分頁內(nèi)存管理頁面映射的例子經(jīng)過頁書目索引和頁表索引的兩級查找,就將一個線性地址的頁面對應到一個物理頁面上。線性地址的最低12位就是物理地址的最低12位。線性地址在轉換為物理地址時,物理地址的高20位為頁表描述符的高20位,而取得頁表描述符須要線性地址的頁書目索引和頁表索引在頁書目表和頁表中。2.2.2分頁內(nèi)存管理不同任務中的線性地址被映射到不同的物理頁面上不同任務中的線性地址被映射到相同的物理頁面上線性地址轉換為物理地址的過程PageDirectoryPhysical=0E9640000e9640006720530E67B0F90D-67A0870E6750340BgS.g...g...gP4.…………0e96410067104E0E00000000-0000000000000000g.N0e4e100025E0D60E2540FC00-000000002560FC00

%...%@%`..0e4e10100000000000000000-00000000000000000e4e10200000000000000000-00000000000000000e4e10300000000000000000-000000002520EA0E%..0e4e1040000000006740270F-67E07A0000000000g@'.g.z0e4e10506730E80E2500DB0E-0000000000000000g0..%LinearAddr:10000000PhysAddr:0ed6e000LinearAddr:????????PhysAddr:00fc6000LinearAddr:10014000PhysAddr:????????LinearAddr:10015000PhysAddr:0edb000010015000H=00010000000000010101000000000000bBit31-22=0001000000b=040H(offsetis040Hx4=0100H)Bit21-12=0000010101b=015H(offsetis015Hx4=0054H)2.3任務多任務環(huán)境,是指其硬件允許軟件系統(tǒng)中存在多個任務,并能夠以分時的方式使各程序輪番執(zhí)行。當運行一個應用程序后,操作系統(tǒng)就為這個程序創(chuàng)建一個任務。TR在愛護模式下,在任何時刻都有一個當前任務,當前任務由TR寄存器指定,CPU在這個任務的環(huán)境下執(zhí)行。因此,系統(tǒng)中至少存在一個任務。2.3.1任務狀態(tài)段任務狀態(tài)段是一種特殊的段,有一個段描述符來描述它的限長、段基址等屬性,這個描述符放在GDT中。任務執(zhí)行環(huán)境每個任務都由兩個部分組成:任務執(zhí)行環(huán)境TES(TaskExecutationSpace)和任務狀態(tài)段TSS(TaskStateSegment)。任務執(zhí)行環(huán)境包括一個代碼段、堆棧段和數(shù)據(jù)段等,任務在每一個特權級上執(zhí)行時都有一個堆棧段。圖2-262.3.1任務狀態(tài)段任務狀態(tài)段TSS中保存了任務的各種狀態(tài)信息。任務狀態(tài)段描述符(即TSS描述符)描述某個任務狀態(tài)段,規(guī)定了任務狀態(tài)段的基地址和任務狀態(tài)段的大小等信息。描述符格式如圖2-27,2-28。2.3.2任務切換過程1.干脆任務切換段間跳轉指令JMPX:Y或段間調(diào)用指令CALLX:Y可以用來執(zhí)行任務切換。在中斷/異樣或者執(zhí)行IRET指令時也可能發(fā)生任務切換。利用JMP/CALL/IRET進行任務干脆切換示意圖2.3.2任務切換過程2.間接任務切換當CPL>DPLTSS時,就不能接受任務的干脆切換,必需通過任務門進行任務的切換。此時,指令中包含的是任務門選擇符。選擇符指向的是任務門描述符,門中的TSS選擇符選中新任務的TSS描述符,激活新的TSS,啟動新的任務。利用JMP/CALL或中斷進行任務間接切換示意圖

2.3.2任務切換過程任務切換的步驟把寄存器現(xiàn)場保存到當前任務的TSS(任務A的TSS)。把指示目標任務(任務B)TSS的選擇符裝入TR寄存器中,同時把對應TSS的描述符裝入TR的高速緩沖寄存器中。復原當前任務(任務B)的寄存器現(xiàn)場。進行鏈接處理。2.3.2任務切換過程把CR0中的TS標記置為1,這表示已發(fā)生過任務切換,在當前任務運用協(xié)處理器指令時,產(chǎn)生故障(向量號為7)。把TSS中的CS選擇符的RPL作為當前任務特權級,設置為CPL。裝載LDTR寄存器。裝載代碼段寄存器CS、堆棧段寄存器SS和各數(shù)據(jù)段寄存器及其高速緩沖寄存器。2.3.2任務切換過程任務內(nèi)特權級變更時TSS中堆棧指針的運用運用CALL指令通過調(diào)用門向高特權級轉移運用RET指令實現(xiàn)向低特權級轉移。2.4特權級愛護愛護模式下設置了0、1、2、3共4個特權級,以區(qū)分操作系統(tǒng)程序和應用程序。這種特權級機制阻擋了用戶程序對操作系統(tǒng)的非法訪問,保證高特權級的代碼或數(shù)據(jù)不被低特權級的程序所破壞。2.4.1對數(shù)據(jù)訪問的愛護為段寄存器賦值時的檢查程序要訪問某一個段時,在將選擇符賦給DS之前,CPU依據(jù)選擇符的TI位在GDT或LDT中讀入段描述符,并驗證:1)P位,假如P位為0,CPU會引發(fā)一個異樣,由操作系統(tǒng)程序進行處理2)段類型是否與目標段選擇符類型(CS、DS、SS等)一樣,即類型檢查為段寄存器賦值時的檢查(續(xù))3)依據(jù)CPL、DPL、RPL來推斷特權級是否滿足要求:DPL≥MAX(CPL,RPL).CPL是當前正在運行的程序的特權級.DPL是描述符特權級,位于段描述符中,它表明白什么樣的特權級程序可以運用這個段。RPL是懇求特權級。Privilege–checkSEGMENTBASE15..0

BASE23..16

BASE31..24GX0PDPLSTYPEA0347AVL0231615872432SEGMENTLIMIT15..0DPL10EWALIMIT19..161RCCSRPLCPLINDEXTargetSegmentSelectorDataSegmentDescriptor16-bitvisibleselectorInvisibleDescriptorPrivilegecheckbyCPUPrivilege-checkTheprocedureincodesegmentCisnotabletoaccessdatasegmentEusingsegmentselectorE3(dottedline),becausetheCPLofcodesegmentCandtheRPLofsegmentselectorE3arebothnumericallygreaterthan(lessprivileged)thantheDPLofdatasegmentE.EvenifacodesegmentCprocedureweretousesegmentselectorE1orE2,suchthattheRPLwouldbeacceptable,itstillcouldnotaccessdatasegmentEbecauseitsCPLisnotprivilegedenough.CPL=0:操作系統(tǒng)內(nèi)核,DPL=2,RPL=2,應用程序的數(shù)據(jù)段.MOVAX,0042hMOVDS,AX(DPL=2在段描述符中)操作系統(tǒng)可以讀取應用程序的數(shù)據(jù)段CPL=3,RPL=0,DPL=0,是否可以?Privilege-check基于段的內(nèi)存愛護訪問內(nèi)存時的檢查1)操作數(shù)的偏移量是否超出段的邊界2)操作是否與段的愛護屬性匹配基于段的內(nèi)存愛護SelectorOffsetBaseLimitAccessrightsSelectorTypeandlimitcheckBaseLimitLDT/GDTDataLimitBaseMemoryLDTR/GDTRBaseLimit2.4.2對程序轉移的愛護干脆轉移的愛護1)同一代碼段內(nèi)轉移時,只須要檢查限長。2)段間調(diào)用或跳轉,須要檢查限長,特權級CPL和DPL。CPL=DPL,允許跳轉和調(diào)用。CPL<DPL,禁止。CPL>DPL,此時要檢查段描述符的C位。假如C位為1,表示這是一樣代碼段,允許跳轉和調(diào)用。PrivilegecheckbyCPURestrictingControlTransfersSEGMENTBASE15..0

BASE23..16

BASE31..24GX0PDPLSTYPEA0347AVL0231615872432SEGMENTLIMIT15..0DPL10EWALIMIT19..161RCCSCPLCodeSegmentDescriptor16-bitvisibleselectorInvisibleDescriptorRestrictingControlTransfersCPL=DPL(在同一優(yōu)先級內(nèi)轉移)orCPL>=DPLiftheselectedcodesegmentisconfirmingsegment(在低優(yōu)先級中執(zhí)行高優(yōu)先級代碼,段描述符中的C位必需為1)ConformingCodesegmentsareaccessiblebyprivilegelevelswhicharethesameorlessprivilegedthantheconforming-codesegment'sDPL.CPL<DPL,可以轉移嗎?RestrictingControlTransfersIntra-segmentJmpCallRetE132Inter-segmentJmpCallRetEE123DPL=1ConformingCodeSegEEE123CallingaConfirmingSegment間接轉移的愛護間接轉移接受JMP/CALLX:Y指令,其中X不再是16位段選擇符,而是一個門選擇符。運用門選擇符的轉移是間接轉移。在干脆轉移中,X是16位段選擇符。2.4.3門門(Gate),可以看做是一種轉換機構。門的類型有4種:調(diào)用門、任務門、中斷門、陷阱門。調(diào)用門用來變更任務或者程序的特權級別;任務門像個開關一樣,用來執(zhí)行任務切換;中斷門和陷阱門用來指出中斷服務程序的入口地址。2.4.3門系統(tǒng)描述符門描述符屬于系統(tǒng)描述符,門描述符的格式如圖2-34。系統(tǒng)描述符中,S位設置為0,而段描述符中S位為1,以此來區(qū)分系統(tǒng)描述符和段描述符。2.4.3門調(diào)用門調(diào)用門實現(xiàn)任務從CPL級到更高特權級的間接限制轉移,它在更高級特權級的段中定義了一個有效的入口點。調(diào)用門指出了入口點的虛地址:目標選擇符和偏移量。程序從低特權級向高特權級的轉換,必需通過調(diào)用門。保證了高特權級程序執(zhí)行過程(操作)的完整性。通過調(diào)用門的轉移和檢查圖2-3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論