freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

80x86保護(hù)模式系列教程(編輯修改稿)

2025-07-26 08:25 本頁面
 

【文章內(nèi)容簡介】 在保護(hù)方式下,虛擬地址空間(相當(dāng)于邏輯地址空間)中存儲單元的地址由段選擇子和段內(nèi)偏移兩部分組成。與實(shí)模式相比,段選擇子代替了段值。 段選擇子長16位,其格式如下表所示。從表中可見,段選擇子的高13位是描述符索引(Index)。所謂描述符索引是指描述符在描述符表中的序號。段選擇子的第2位是引用描述符表指示位,標(biāo)記為TI(Table Indicator),TI=0指示從全局描述符表GDT中讀取描述符;TI=1指示從局部描述符表LDT中讀取描述符。 選擇子結(jié)構(gòu)BIT15BIT14BIT13BIT12BIT11BIT10BIT9BIT8BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0描述符索引TIRPL選擇子確定描述符,描述符確定段基地址,段基地址與偏移之和就是線性地址。所以,虛擬地址空間中的由選擇子和偏移兩部分構(gòu)成的二維虛擬地址,就是這樣確定了線性地址空間中的一維線性地址。 選擇子的最低兩位是請求特權(quán)級RPL(Requested Privilege Level),用于特權(quán)檢查。 RPL字段的用法如下: 每當(dāng)程序試圖訪問一個(gè)段時(shí),要把當(dāng)前特權(quán)級與所訪問段的特權(quán)級進(jìn)行比較,以確定是否允許程序?qū)υ摱蔚脑L問。使用選擇子的RPL字段,將改變特權(quán)級的測試規(guī)則。在這種情況下,與所訪問段的特權(quán)級比較的特權(quán)級不是CPL,而是CPU與RPL中更外層的特權(quán)級。 CPL存放在CS寄存器的RPL字段內(nèi),每當(dāng)一個(gè)代碼段選擇子裝入CS寄存器中時(shí),處理器自動(dòng)地把CPL存放到CS的RPL字段。 由于選擇子中的描述符索引字段用13位表示,所以可區(qū)分8192個(gè)描述符。這也就是描述符表最多包含8192個(gè)描述符的原因。由于每個(gè)描述符長8字節(jié),根據(jù)上表所示選擇子的格式,屏蔽選擇子低3位后所得的值就是選擇子所指定的描述符在描述符表中的偏移,這可認(rèn)為是安排選擇子高13位作為描述符索引的原因。 有一個(gè)特殊的選擇子稱為空(Null)選擇子,它的Index=0,TI=0,而RPL字段可以為任意值??者x擇子有特定的用途,當(dāng)用空選擇子進(jìn)行存儲訪問時(shí)會(huì)引起異常??者x擇子是特別定義的,它不對應(yīng)于全局描述符表GDT中的第0個(gè)描述符,因此處理器中的第0個(gè)描述符總不被處理器訪問,一般把它置成全0。但當(dāng)TI=1時(shí),Index為0的選擇子不是空選擇子,它指定了當(dāng)前任務(wù)局部描述符表LDT中的第0個(gè)描述符。 五段描述符高速緩沖寄存器在實(shí)模式下,段寄存器含有段值,為訪問存儲器形成物理地址時(shí),處理器引用相應(yīng)的某個(gè)段寄存器并將其值乘以16,形成20位的段基地址。在保護(hù)模式下,段寄存器含有段選擇子,如上所述,為了訪問存儲器形成線性地址時(shí),處理器要使用選擇子所指定的描述符中的基地址等信息。為了避免在每次存儲器訪問時(shí),都要訪問描述符表而獲得對應(yīng)的段描述符,從80286開始每個(gè)段寄存器都配有一個(gè)高速緩沖寄存器,稱之為段描述符高速緩沖寄存器或描述符投影寄存器,對程序員而言它是不可見的。每當(dāng)把一個(gè)選擇子裝入到某個(gè)段寄存器時(shí),處理器自動(dòng)從描述符表中取出相應(yīng)的描述符,把描述符中的信息保存到對應(yīng)的高速緩沖寄存器中。此后對該段訪問時(shí),處理器都使用對應(yīng)高速緩沖寄存器中的描述符信息,而不用再從描述符表中取描述符。 各段描述符高速緩沖寄存器之內(nèi)容如下表所示。其中,32位段基地址直接取自描述符, 32位的段界限取自描述符中20位的段界限,并根據(jù)描述符屬性中的粒度位轉(zhuǎn)換成以字節(jié)為單位。其它十個(gè)特性根據(jù)描述符中的屬性而定,“Y”表示“是”,“N”表示“否” ,“R”表示必須可讀,“W”表示必須可寫,“P”表示必須存在,“D”表示根據(jù)描述符中屬性而定。 段描述符高速緩沖寄存器的內(nèi)容段寄存器段基地址段界限段屬性存在性特權(quán)級已存取粒度擴(kuò)展方向可讀性可寫性可執(zhí)行堆棧大小一致特權(quán)CS32位基地址32位段界限PDDDDDNYDSS32位基地址32位段界限PDDDDRWNDDS32位基地址32位段界限PDDDDDDNES32位基地址32位段界限PDDDDDDNFS32位基地址32位段界限PDDDDDDNGS32位基地址32位段界限PDDDDDDN段描述符高速緩沖寄存器再處理器內(nèi),所以可對其進(jìn)行快速訪問。絕大多數(shù)情況下,對存儲器的訪問是在對應(yīng)選擇子裝入到段寄存器之后進(jìn)行的,所以,使用段描述符高速緩沖寄存器可以得到很好的執(zhí)行性能。 段描述符高速緩沖寄存器之內(nèi)保存的描述符信息將一直保存到重新把選擇子裝載到段寄存器時(shí)再更新。程序員盡管不可見段描述符高速緩沖寄存器,但必須注意到它的存在和它的上述更新時(shí)機(jī)。例如,在改變了描述符表中的某個(gè)當(dāng)前段的描述符后,也要更新對應(yīng)的段描述符高速緩沖寄存器的內(nèi)容,即使段選擇子未作改變,這可通過重新裝載段寄存器實(shí)現(xiàn)。 80386控制寄存器和系統(tǒng)地址寄存器如下表所示。它們用于控制工作方式,控制分段管理機(jī)制及分頁管理機(jī)制的實(shí)施。 控制寄存器CRxBIT31BIT30—BIT12BIT11—BIT5BIT4BIT3BIT2BIT1BIT0CR0PG0000000000000000ETTSEMMPPECR1保留CR2頁故障線性地址CR3頁目錄表物理頁碼000000000000BIT47—BIT16BIT15—BIT0全局描述符表寄存器GDTR基地址界限中斷描述符表寄存器IDTR基地址界限BIT15—BIT0局部描述符表寄存器LDTR選擇子任務(wù)狀態(tài)段寄存器TR選擇子BIT31—BIT0BIT31—BIT0BIT11—BIT0基地址界限屬性基地址界限屬性一控制寄存器從上表可見,80386有四個(gè)32位的控制寄存器,分別命名位CR0、CRCR2和CR3。但CR1被保留,供今后開發(fā)的處理器使用,在80386中不能使用CR1,否則會(huì)引起無效指令操作異常。CR0包括指示處理器工作方式的控制位,包含啟用和禁止分頁管理機(jī)制的控制位,包含控制浮點(diǎn)協(xié)處理器操作的控制位。CR2及CR3由分頁管理機(jī)制使用。CR0中的位5—位30及CR3中的位0至位11是保留位,這些位不能是隨意值,必須為0。 控制寄存器CR0的低16位等同于80286的機(jī)器狀態(tài)字MSW。 控制寄存器CR0中的位0用PE標(biāo)記,位31用PG標(biāo)記,這兩個(gè)位控制分段和分頁管理機(jī)制的操作,所以把它們稱為保護(hù)控制位。PE控制分段管理機(jī)制。PE=0,處理器運(yùn)行于實(shí)模式;PE=1,處理器運(yùn)行于保護(hù)方式。PG控制分頁管理機(jī)制。PG=0,禁用分頁管理機(jī)制,此時(shí)分段管理機(jī)制產(chǎn)生的線性地址直接作為物理地址使用;PG=1,啟用分頁管理機(jī)制,此時(shí)線性地址經(jīng)分頁管理機(jī)制轉(zhuǎn)換位物理地址。關(guān)于分頁管理機(jī)制的具體介紹在后面的文章中進(jìn)行。 下表列出了通過使用PE和PG位選擇的處理器工作方式。由于只有在保護(hù)方式下才可啟用分頁機(jī)制,所以盡管兩個(gè)位分別為0和1共可以有四種組合,但只有三種組合方式有效。PE=0且PG=1是無效組合,因此,用PG為1且PE為0的值裝入CR0寄存器將引起通用保護(hù)異常。 需要注意的是,PG位的改變將使系統(tǒng)啟用或禁用分頁機(jī)制,因而只有當(dāng)所執(zhí)行的程序的代碼和至少有一部分?jǐn)?shù)據(jù)在線性地址空間和物理地址空間具有相同的地址的情況下,才能改變PG位。 PG和PE位與處理器工作模式PGPE處理器工作方式00實(shí)模式01保護(hù)模式,禁用分頁機(jī)制10非法組合11保護(hù)方式,啟用分頁機(jī)制控制寄存器CR0中的位1—位4分別標(biāo)記為MP(算術(shù)存在位)、EM(模擬位)、TS(任務(wù)切換位) 和ET(擴(kuò)展類型位),它們控制浮點(diǎn)協(xié)處理器的操作。 當(dāng)處理器復(fù)位時(shí),ET位被初始化,以指示系統(tǒng)中數(shù)字協(xié)處理器的類型。如果系統(tǒng)中存在 80387協(xié)處理器,那么ET位置1;如果系統(tǒng)中存在80287協(xié)處理器或者不存在協(xié)處理器,那么ET位清0。 EM位控制浮點(diǎn)指令的執(zhí)行是用軟件模擬,還是由硬件執(zhí)行。EM=0時(shí),硬件控制浮點(diǎn)指令傳送到協(xié)處理器;EM=1時(shí),浮點(diǎn)指令由軟件模擬。 TS位用于加快任務(wù)的切換,通過在必要時(shí)才進(jìn)行協(xié)處理器切換的方法實(shí)現(xiàn)這一目的。每當(dāng)進(jìn)行任務(wù)切換時(shí),處理器把TS置1。TS=1時(shí),浮點(diǎn)指令將產(chǎn)生設(shè)備不可用(DNA)異常。 MP位控制WAIT指令在TS=1時(shí),是否產(chǎn)生DNA異常。MP=1和TS=1時(shí),WAIT產(chǎn)生異常;MP=0時(shí),WAIT指令忽略TS條件,不產(chǎn)生異常。 控制寄存器CR2和CR3由分頁管理機(jī)制使用。 CR2用于發(fā)生頁異常時(shí)報(bào)告出錯(cuò)信息。當(dāng)發(fā)生頁異常時(shí),處理器把引起頁異常的線性地址保存在CR2中。操作系統(tǒng)中的頁異常處理程序可以檢查CR2的內(nèi)容,從而查出線性地址空間中的哪一頁引起本次異常。 CR3用于保存頁目錄表的其始物理地址。由于目錄是頁對齊的,所以僅高20位有效,低12 位保留未用。向CR3中裝入一個(gè)新值時(shí),低12位必須為0;但從CR3中取值時(shí),低12位被忽略。每當(dāng)用MOV指令重置CR3的值時(shí),會(huì)導(dǎo)致分頁機(jī)制高速緩沖區(qū)的內(nèi)容無效,用此方法,可以在啟用分頁機(jī)制之前,即把PG位置1之前,預(yù)先刷新分頁機(jī)制的高速緩存。CR3寄存器即使在CR0寄存器的PG位或PE位為0時(shí)也可裝入,如在實(shí)模式下也可設(shè)置CR3,以便進(jìn)行分頁機(jī)制的初始化。在任務(wù)切換時(shí),CR3要被改變,但是如果新任務(wù)中CR3的值與原任務(wù)中CR3的值相同,那么處理器不刷新分頁高速緩存,以便當(dāng)任務(wù)共享也表時(shí)有較快的執(zhí)行速度。 二系統(tǒng)地址寄存器全局描述符表GDT、局部描述符表LDT和中斷描述符表IDT等都是保護(hù)方式下非常重要的特殊段,它們包含有為段機(jī)制所用的重要表格。為了方便快速地定位這些段,處理器采用一些特殊的寄存器保存這些段的基地址和段界限。我們把這些特殊的寄存器稱為系統(tǒng)地址寄存器。 如本文開始處的表格所示,GDTR長48位,其中高32位為基地址,低16位為界限。由于GDT 不能有GDT本身之內(nèi)的描述符進(jìn)行描述定義,所以處理器采用GDTR為GDT這一特殊的系統(tǒng)段提供一個(gè)偽描述符。GDTR給定了GDT,如下圖所示。 GDTR中的段界限以字節(jié)為單位。由于段選擇子中只有13位作為描述符索引,而每個(gè)描述符長8個(gè)字節(jié),所以用16位的界限足夠。通常,對于含有N個(gè)描述符的描述符表的段界限設(shè)為8*N1。 利用結(jié)構(gòu)類型可定義偽描述符如下: PDESC STRUC LIMIT DW 0 BASE DD 0 PDESC ENDS局部描述符表寄存器LDTR規(guī)定當(dāng)前任務(wù)使用的局部描述符表LDT。如本文開始處的表格所示,LDTR類似于段寄存器,由程序員可見的16位的寄存器和程序員不可見的高速緩沖寄存器組成。實(shí)際上,每個(gè)任務(wù)的局部描述符表LDT作為系統(tǒng)的一個(gè)特殊段,由一個(gè)描述符描述。而用于描述符LDT的描述符存放在GDT中。在初始化或任務(wù)切換過程中,把描述符對應(yīng)任務(wù)LDT的描述符的選擇子裝入LDTR,處理器根據(jù)裝入LDTR可見部分的選擇子,從GDT中取出對應(yīng)的描述符,并把LDT的基地址、界限和屬性等信息保存到LDTR的不可見的高速緩沖寄存器中。隨后對LDT的訪問,就可根據(jù)保存在高速緩沖寄存器中的有關(guān)信息進(jìn)行合法性檢查。 LDTR寄存器包含當(dāng)前任務(wù)的LDT的選擇子。所以,裝入到LDTR的選擇子必須確定一個(gè)位于GDT中的類型為LDT的系統(tǒng)段描述符,也即選擇子中的TI位必須是0,而且描述符中的類型字段所表示的類型必須為LDT。 可以用一個(gè)空選擇子裝入LDTR,這表示當(dāng)前任務(wù)沒有LDT。在這種情況下,所有裝入到段寄存器的選擇子都必須指示GDT中的描述符,也即當(dāng)前任務(wù)涉及的段均由GDT中的描述符來描述。如果再把一個(gè)TI位為1的選擇子裝入到段寄存器,將引起異常。 中斷描述符表寄存器IDTR指向中斷描述符表IDT。如本文開始處的表格所示,IDTR長48 位,其中32位的基地址規(guī)定IDT的基地址,16位的界限規(guī)定IDT的段界限。由于80386只支持256個(gè)中斷/異常,所以IDT表最大長度是2K,以字節(jié)位單位的段界限為7FFH。IDTR 指示IDT的方式與GDTR指示GDT的方式相同。 任務(wù)狀態(tài)段寄存器TR包含指示描述當(dāng)前任務(wù)的任務(wù)狀態(tài)段的描述符選擇子,從而規(guī)定了當(dāng)前任務(wù)的狀態(tài)段。任務(wù)狀態(tài)段的格式在后面的文章中介紹。如本文開始處的表格所示,TR也有程序員可見和不可見兩部分。當(dāng)把任務(wù)狀態(tài)段的選擇子裝入到TR可見部分時(shí),處理器自動(dòng)把選擇子所索引的描述符中的段基地址等信息保存到不可見的高速緩沖寄存器中。在此之后,對當(dāng)前任務(wù)狀態(tài)段的訪問可快速方便地進(jìn)行。裝入到TR的選擇子不能為空,必須索引位于GDT中的描述符,且描述符的類型必須是TSS。 本文介紹兩個(gè)實(shí)現(xiàn)實(shí)模式與保護(hù)模式切換的實(shí)例,通過他們說明如何實(shí)現(xiàn)實(shí)模式與保護(hù)模式的切換, 也說明保護(hù)模式下的80386及其編程。 一演示實(shí)模式和保護(hù)模式切換的實(shí)例(實(shí)例一)實(shí)例一的邏輯功能是,以十六進(jìn)制數(shù)的形式顯示從內(nèi)存地址110000H開始的256個(gè)字節(jié)的值。本實(shí)例指定該內(nèi)存區(qū)域的目的僅僅是想說明切換到保護(hù)模式的必要性,因?yàn)樵趯?shí)模式下不能訪問該指定內(nèi)存區(qū)域,只有在保護(hù)模式下才能訪問到該指定區(qū)域。 本實(shí)例的具體實(shí)現(xiàn)步驟是:(1)作切換到保護(hù)方式的準(zhǔn)備;(2)切換到保護(hù)方式;(3)把指定內(nèi)存區(qū)域的內(nèi)容傳送到位于常規(guī)內(nèi)存的緩沖區(qū)中;(4)切換回實(shí)模式;(5)顯示緩
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1