




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、微機原理與接口課程設計 08計科二班 陳鵬 學號2007221104210048摘要 本文首先簡要介紹了保護模式下的相關知識,詳細介紹了任務狀態段和格式,以及各部分代表的含義。然后介紹了任務切換的兩種途徑直接通過TSS進行任務切換和通過任務門進行任務切換,然后介紹了任務切換的過程,最后用實例實現過程,該實例都通過介紹的兩種途徑分別實現了,最后是對該實例的說明和解釋。關鍵詞 :保護模式,任務間切換,匯編語言 目前,IA-32系列的處理器,均具有4種工作模式:實模式,保護模式和虛擬8086模式和系統管理模式。只有在保護模式下,IA-32處理器才能發揮其強大的功能。保護模式下任務的切換是經常遇到的問
2、題。下面說明保護模式下任務切換的原理及實現。1 相關知識1.1 保護模式介紹在保護模式下,通過段頁式尋址機制來實現多任務之間的有效隔離,支持任務與任務之間的分離和操作系統與任務之間的分離,特權分級系統和保護機構保護了虛空間到實空間的切換安全。操作系統的代碼和數據不允許被應用程序所訪問,因此操作系統的代碼和應用程序都被有效保護。1.2微處理機的保護方式寄存器微處理機由于系統存儲管理的需要,配備了系統地址寄存器。其中4個寄存器用于控制分段存儲器管理中數據結構的位置,它們的名稱分別是系統地址寄存器(即全局描述符表寄存器GDTR和中斷描述符表寄存器IDTR)以及描述符寄存器(局部描述符寄存器LDTR
3、和任務狀態寄存器TR),存儲管理寄存器只能在保護方式下使用,所以又稱其為保護方式寄存器。GDTR,LDTR,IDTR都是48位的寄存器,用來保存全局描述符表GDT的32位線性基地址和16位的段界限。任務寄存器TR保存著32位的線性基地址,32的段界限、描述符屬性以及當前正在執行任務的16位段選擇符。任務寄存器訪問的是全局描述符表中的任務狀態段TSS描述符。BIT47-BIT16BIT15-BIT0全局描述符表寄存器GDTR基地址界限中斷描述符表寄存器IDTR基地址界限 GDTR和IDTR的結構如右圖 BIT15-BIT0BIT31-BIT0BIT31-BIT0BIT11-BIT0局部描述符表寄
4、存器LDTR選擇子基地址界限屬性任務狀態段寄存器TR選擇子基地址界限屬性TR和LDTR的結構1.3 任務狀態段任務狀態段(Task State Segment)是保存一個任務重要信息的特殊段。任務狀態段描述符用于描述這樣的系統段。任務狀態段寄存器TR的可見部分含有當前任務的任務狀態段描述符的選擇子,TR的不可見的高速緩沖寄存器部分含有當前任務狀態段的段基地址和段界限等信息。 任務狀態段TSS的基本格式31 15 0I/O位圖基址TLDT選擇子gsfsdssscsesediesiebpespebxedxecxeaxeflagseipgr3(pdbr)ss2esp2ss1esp1ss0esp0上一
5、任務鏈接從圖中可見,TSS的基本格式由104字節組成。這104字節的基本格式是不可改變的,但在此之外系統軟件還可定義若干附加信息。基本的104字節可分為鏈接字段區域、內層堆棧指針區域、地址映射寄存器區域、寄存器保存區域和其它字段等五個區域。1.3.1.寄存器保存區域寄存器保存區域位于TSS內偏移20H至5FH處,用于保存通用寄存器、段寄存器、指令指針和標志寄存器。當TSS對應的任務正在執行時,保存區域是未定義的;在當前任務被切換出時,這些寄存器的當前值就保存在該區域。當下次切換回原任務時,再從保存區域恢復出這些寄存器的值,從而,使處理器恢復成該任務換出前的狀態,最終使任務能夠恢復執行。從上圖可
6、見,各通用寄存器對應一個32位的雙字,指令指針和標志寄存器各對應一個32位的雙字;各段寄存器也對應一個32位的雙字,段寄存器中的選擇子只有16位,安排再雙字的低16位,高16位未用,一般應填為0。 1.3.2.內層堆棧指針區域為了有效地實現保護,同一個任務在不同的特權級下使用不同的堆棧。例如,當從外層特權級3變換到內層特權級0時,任務使用的堆棧也同時從3級變換到0級堆棧;當從內層特權級0變換到外層特權級3時,任務使用的堆棧也同時從0級堆棧變換到3級堆棧。所以,一個任務可能具有四個堆棧,對應四個特權級。四個堆棧需要四個堆棧指針。TSS的內層堆棧指針區域中有三個堆棧指針,它們都是48位的全指針(1
7、6位的選擇子和32位的偏移),分別指向0級、1級和2級堆棧的棧頂,依次存放在TSS中偏移為4、12及20開始的位置。當發生向內層轉移時,把適當的堆棧指針裝入SS及ESP寄存器以變換到內層堆棧,外層堆棧的指針保存在內層堆棧中。沒有指向3級堆棧的指針,因為3級是最外層,所以任何一個向內層的轉移都不可能轉移到3級。但是,當特權級由內層向外層變換時,并不把內層堆棧的指針保存到TSS的內層堆棧指針區域。實際上,處理器從不向該區域進行寫入,除非程序設計者認為改變該區域的值。這表明向內層轉移時,總是把內層堆棧認為是一個空棧。因此,不允許發生同級內層轉移的遞歸,一旦發生向某級內層的轉移,那么返回到外層的正常途
8、徑是相匹配的向外層返回。 1.3.3.地址映射寄存器區域從虛擬地址空間到線性地址空間的映射由GDT和LDT確定,與特定任務相關的部分由LDT確定,而LDT又由LDTR確定。如果采用分頁機制,那么由線性地址空間到物理地址空間的映射由包含頁目錄表起始物理地址的控制寄存器CR3確定。所以,與特定任務相關的虛擬地址空間到物理地址空間的映射由LDTR和CR3確定。顯然,隨著任務的切換,地址映射關系也要切換。TSS的地址映射寄存器區域由位于偏移1CH處的雙字字段(CR3)和位于偏移60H處的字字段(LDTR)組成。在任務切換時,處理器自動從要執行任務的TSS中取出這兩個字段,分別裝入到寄存器CR3和LDT
9、R。這樣就改變了虛擬地址空間到物理地址空間的映射。但是,在任務切換時,處理器并不把換出任務但是的寄存器CR3和LDTR的內容保存到TSS中的地址映射寄存器區域。事實上,處理器也從來不向該區域自動寫入。因此,如果程序改變了LDTR或CR3,那么必須把新值人為地保存到TSS中的地址映射寄存器區域相應字段中。可以通過別名技術實現此功能。1.3.4.鏈接字段鏈接字段安排在TSS內偏移0開始的雙字中,其高16位未用。在起鏈接作用時,地16位保存前一任務的TSS描述符的選擇子。 如果當前的任務由段間調用指令CALL或中斷/異常而激活,那么鏈接字段保存被掛起任務的 TSS的選擇子,并且標志寄存器EFLAGS
10、中的NT位被置1,使鏈接字段有效。在返回時,由于NT標志位為1,返回指令RET或中斷返回指令IRET將使得控制沿鏈接字段所指恢復到鏈上的前一個任務。1.3.5.其它字段為了實現輸入/輸出保護,要使用I/O許可位圖。任務使用的I/O許可位圖也存放在TSS中,作為TSS的擴展部分。在TSS內偏移66H處的字用于存放I/O許可位圖在TSS內的偏移(從TSS開頭開始計算)。關于I/O許可位圖的作用,以后的文章中將會詳細介紹。在TSS內偏移64H處的字是為任務提供的特別屬性。在80386中,只定義了一種屬性,即調試陷阱。該屬性是字的最低位,用T表示。該字的其它位置被保留,必須被置為0。在發生任務切換時,
11、如果進入任務的T位為1,那么在任務切換完成之后,新任務的第一條指令執行之前產生調試陷阱。2 任務切換的方法 利用段間轉移指令JMP 或段間調用指令CALL,通過任務門或者直接通過任務狀態段,可以切換到別的任務。此外,在中斷/異常或者執行IRET指令時也可能發生任務切換。下面詳細介紹前面兩種。2.1.直接通過TSS進行任務切換段間轉移指令JMP或段間調用指令CALL所含指針的選擇子指示一個可用任務狀態段TSS描述符時,正常情況下就發生從當前任務到由該可用TSS對應任務(目標任務)的切換。目標任務的入口點由目標任務TSS內的CS和EIP字段所規定的指針確定。這樣的JMP或CALL指令內的偏移被丟棄
12、。另外,對于段間調用指令CALL,若目標選擇子指示一TSS段描述符或任務門時,則返回地址和外層棧指針并不壓入堆棧。處理器采用與訪問數據段相同的特權級規則控制對TSS段描述符的訪問。TSS段描述符的DPL規定了訪問該描述符的最外層特權級,只有在相同級別或更內層級別的程序才可以訪問它。同時,還要求指示它的選擇子的RPL必須滿足RPL=TSS的DPL的條件。當這些條件滿足時,就開始任務切換。 2.2.通過任務門進行任務切換任務門內的選擇子指示某個任務的TSS描述符。當段間轉移指令JMP或段間調用指令CALL所含指針的選擇子指示一個任務門時,正常情況下就發生任務切換,即從當前任務切換到由任務門內的選擇
13、子所指示的TSS描述符對應的任務(目標任務)。這樣的JMP或CALL指令內的偏移被丟棄;任務門內的偏移也無意義。 處理器采用與訪問數據段相同的特權級規則控制對任務門的訪問。任務門的DPL規定了訪問該任務門的最外層特權級,只有在同級或更內層級別的程序才可以訪問它。同時,還要求指示任務門的選擇子RPL必須滿足RPL=任務門的DPL的條件。在這些條件滿足時,再檢查任務門內的選擇子,要求該選擇子指示GDT中的可用的TSS描述符。對于任務門所指向的TSS描述符的DPL不進行特權級檢查。檢查通過以后,就開始任務切換。3 任務切換的過程根據指示目標任務TSS描述符的選擇子進行任務切換的一般過程如下: 第一,
14、測試目標任務狀態段的界限。TSS用于保存任務的各種狀態信息,不同的任務,TSS中可以有數量不等的其他信息,根據任務狀態段的基本格式,TSS的界限應大于或等于103(104-1)。 第二,把寄存器現場保存到當前任務的TSS。把通用寄存器、段寄存器、EIP及EFLAGS的當前值保存到當前TSS中。保存的EIP值是返回地址,指向引起任務切換指令的下一條指令。但不把LDTR和CR3的內容保存到TSS中。 第三,把指示目標任務TSS的選擇子裝入TR寄存器中。同時把對應TSS的描述符裝入TR的高速緩沖寄存器中。此后,當前任務改稱為原任務,目標任務改稱為當前任務。 第四,基本恢復當前任務(目標任務)的寄存器
15、現場。根據保存在TSS中的內容,恢復各通用寄存器、段寄存器、EFLAGS及EIP。在裝入寄存器的過程中,為了能正確地處理可能發生的異常,只把對應選擇子裝入各段寄存器。此時選擇子的P位為0。還裝載CR3寄存器。 第五,進行鏈接處理。如果需要鏈接,那么將指向原任務TSS的選擇子寫入當前任務TSS的鏈接字段,把當前任務TSS描述符類型改為“忙”(并不修改原任務狀態段描述符的“忙”位),并將標志寄存器EFLAGS中的NT位置1,表示是嵌套任務。如果需要解鏈,那么把原任務TSS描述符類型改為“可用”。如果無解鏈處理,那么將原任務TSS描述符類型置為“可用”,當前任務TSS描述符類型置為“忙”。由于JMP
16、指令引起的任務切換不實施鏈接/解鏈處理;由CALL指令、中斷、IRET指令引起的任務切換要實施鏈接/解鏈處理。 第六,把CR0中的TS標志置為1,這表示已發生過任務切換,在當前任務使用協處理器指令時,產生自陷。由自陷處理程序完成有關協處理器現場的保存和恢復。這有利于快速地進行任務切換。 第七,把TSS中的CS選擇子的RPL作為當前任務特權級設置為CPL。又因為裝入CS高速緩沖寄存器時要檢測CPL=代碼段描述符的DPL,所以TSS中的選擇子所指示的代碼段描述符的DPL必須等于該選擇子的RPL。任務切換可以在一個任務的任何特權級發生,并且可以切換到另一任務的任何特權級。 第八,裝載LDTR寄存器。
17、一個任務可以有自己的LDT,也可以沒有。當任務沒有LDT時,TSS中LDT選擇子為0。如果TSS中LDT選擇子非空,則從GDT中讀出對應的LDT描述符,在經過測試后,把所讀的LDT描述符裝入LDTR高速緩沖寄存器。如果LDT選擇子為空,則將LDT的存在位置為0,表明任務不使用LDT。 第九,裝載代碼段寄存器CS、堆棧段寄存器SS和各數據段寄存器及其高速緩沖寄存器。在裝入代碼段高速緩存之前,也要進行特權檢查,處理器調整TSS中的CS選擇子的RPL=0,裝入之后,調整CS的RPL等于目標代碼段的DPL。堆棧段使用的是TSS中的SS和SP字段的值,而不是使用內層棧保存區中的指針,即使發生了向內層特權
18、級的變換。這與任務內的通過調用門的轉移不同。 第十,把調試寄存器DR7中的局部啟用位置為0,以清除局部于原任務的各個斷點和方式。 4 切換實例4.1 代碼;名稱:sample.ASM;功能:演示任務切換和任務內有特權級變換的轉移;編譯:TASM sample.ASM;鏈接:LINK sample.OBJ;-INCLUDE 386SCD.INC;-GDTSeg SEGMENT PARA USE16 ;全局描述符表數據段(16位) ;全局描述符表GDT LABEL BYTE ;空描述符DUMMY Desc ;規范段描述符及選擇子Normal Desc Normal_Sel = Normal-GDT
19、 ;視頻緩沖區段描述符及選擇子VideoBuf Desc Video_Sel = VideoBuf-GDT;-EFFGDT LABEL BYTE ;演示任務的局部描述符表段的描述符及選擇子DemoLDTab Desc DemoLDT_Sel = DemoLDTab-GDT ;演示任務的任務狀態段描述符及選擇子DemoTSS Desc DemoTSS_Sel = DemoTSS-GDT ;臨時任務的任務狀態段描述符及選擇子TempTSS Desc TempTSS_Sel = TempTSS-GDT ;臨時代碼段描述符及選擇子TempCode Desc TempCode_Sel = TempCod
20、e-GDT GDNum = ($-EFFGDT)/(SIZE Desc) ;需處理基地址的描述符個數GDTLen = $-GDT ;全局描述符表長度GDTSeg ENDS ;全局描述符表段定義結束;-DemoLDTSeg SEGMENT PARA USE16 ;局部描述符表數據段(16位)DemoLDT LABEL BYTE ;局部描述符表 ;2級堆棧段描述符(32位段)及選擇子DemoStack Desc DemoStack_Sel = DemoStack-DemoLDT+TIL ;演示任務代碼段描述符(32位段)及選擇子DemoCode Desc DemoCode_Sel = DemoCo
21、de-DemoLDT+TIL ;演示任務數據段描述符(32位段)及選擇子DemoData Desc DemoData_Sel = DemoData-DemoLDT+TIL ;把LDT作為普通數據段描述的描述符及選擇子ToDLDT Desc ToDLDT_Sel = ToDLDT-DemoLDT+TIL ;把TSS作為普通數據段描述的描述符及選擇子ToTTSS Desc ToTTSS_Sel = ToTTSS-DemoLDT+TILDemoLDNum = ($-DemoLDT)/(SIZE Desc) ;需處理基地址的LDT描述符數 ;指向臨時任務Temp的任務門及選擇子ToTempT Gate
22、 ToTempT_Sel = ToTempT-DemoLDT+TILDemoLDTLen = $-DemoLDTDemoLDTSeg ENDS ;局部描述符表段定義結束;-DemoTSSSeg SEGMENT PARA USE16 ;任務狀態段TSS DD 0 ;鏈接字 DD DemoStackLen ;0級堆棧指針 DW DemoStack_Sel,0 ;0級堆棧選擇子 DD 0 ;1級堆棧指針(實例不使用) DW 0,0 ;1級堆棧選擇子(實例不使用) DD 0 ;2級堆棧指針 DW 0,0 ;2級堆棧選擇子 DD 0 ;CR3 DW DemoBegin,0 ;EIP DD 0 ;EFLA
23、GS DD 0 ;EAX DD 0 ;ECX DD 0 ;EDX DD 0 ;EBX DD DemoStackLen ;ESP DD 0 ;EBP DD 0 ;ESI DD 1826 ;EDI DW Video_Sel,0 ;ES DW DemoCode_Sel,0 ;CS DW DemoStack_Sel,0 ;SS DW DemoData_Sel,0 ;DS DW ToDLDT_Sel,0 ;FS DW ToTTSS_Sel,0 ;GS DW DemoLDT_Sel,0 ;LDTR DW 0 ;調試陷阱標志 DW $+2 ;指向I/O許可位圖 DB 0ffh ;I/O許可位圖結束標志Dem
24、oTSSLen = $DemoTSSSeg ENDS ;任務狀態段TSS結束;-DemoStackSeg SEGMENT PARA USE32 ;演示任務堆棧段(32位段)DemoStackLen = 512 DB DemoStackLen DUP(0)DemoStackSeg ENDS ;演示任務堆棧段結束;-DemoDataSeg SEGMENT PARA USE32 ;演示任務數據段(32位段)Message2 DB in Demo task now.,0DemoDataLen = $DemoDataSeg ENDS ;演示任務數據段結束;-DemoCodeSeg SEGMENT PAR
25、A USE32 ;演示任務的32位代碼段 ASSUME CS:DemoCodeSeg,DS:DemoDataSegDemoBegin PROC FAR mov esi,OFFSET Message2 ;顯示字符串 mov ah,4ah jmp DemoR2 DemoR1: stosw DemoR2: lodsb or al,al jnz DemoR1 ;把指向規范數據段描述符的選擇子填入臨時任務TSS ASSUME DS:TempTSSSeg push gs pop ds mov ax,Normal_Sel mov WORD PTR TempTask.TRFS,ax mov WORD PTR
26、TempTask.TRGS,ax mov WORD PTR TempTask.TRSS,ax mov WORD PTR TempTask.TRES,ax mov WORD PTR TempTask.TRDS,ax ;通過任務門切換到臨時任務 JUMP32 ToTempT_Sel,0 jmp DemoBeginDemoBegin ENDPDemoCodeLen = $DemoCodeSeg ENDS ;演示任務的32位代碼段結束;-TempTSSSeg SEGMENT PARA USE16 ;臨時任務的任務狀態段TSSTempTask TSS DB 0ffh ;I/O許可位圖結束標志TempTS
27、SLen = $TempTSSSeg ENDS;-TempCodeSeg SEGMENT PARA USE16 ;臨時任務的代碼段 ASSUME CS:TempCodeSegVirtual PROC FAR mov ax,TempTSS_Sel ;裝載TR ltr ax movax, Video_Sel movgs, ax; 視頻段選擇子(目的) movedi, (80 * 10 + 33) * 2; 屏幕第 12 行, 第 0 列。 movah, 0Ch; 0000: 黑底 1100: 紅字 moval, C movgs:edi, ax JUMP16 DemoTSS_Sel,0 ;直接切換到
28、演示任務 Toreal: movax, Video_Sel movgs, ax; 視頻段選擇子(目的) movedi, (80 * 12 + 33) * 2; 屏幕第 12 行, 第 0 列。 movah, 0Ch; 0000: 黑底 1100: 紅字 moval, L movgs:edi, ax clts ;清任務切換標志 mov eax,cr0 ;準備返回實模式 and al,11111110b mov cr0,eax JUMP16 ,Virtual ENDPTempCodeSeg ENDS;=RDataSeg SEGMENT PARA USE16 ;實方式數據段VGDTR PDesc ;
29、GDT偽描述符SPVar DW ? ;用于保存實方式下的SPSSVar DW ? ;用于保存實方式下的SSRDataSeg ENDS;-RCodeSeg SEGMENT PARA USE16 ASSUME CS:RCodeSeg,DS:RDataSeg,ES:RDataSegStart PROC mov ax,RDataSeg mov ds,ax cld call InitGDT ;初始化全局描述符表GDT mov ax,DemoLDTSeg mov fs,ax mov si,OFFSET DemoLDT mov cx,DemoLDNum call InitLDT ;初始化局部描述符表LDT
30、mov SSVar,ss mov SPVar,sp lgdt QWORD PTR VGDTR ;裝載GDTR并切換到保護方式 cli mov eax,cr0 or al,1 mov cr0,eax JUMP16 ,Real: mov ax,RDataSeg mov ds,ax lss sp,DWORD PTR SPVar ;又回到實方式 sti mov ax,4c00h int 21hStart ENDPInitGDT PROC push ds mov ax,GDTSeg mov ds,ax mov cx,GDNum mov si,OFFSET EFFGDTInitG: mov ax,si.B
31、aseL movzx eax,ax shl eax,4 shld edx,eax,16 mov WORD PTR si.BaseL,ax mov BYTE PTR si.BaseM,dl mov BYTE PTR si.BaseH,dh add si,SIZE Desc loop InitG pop ds mov bx,16 mov ax,GDTSeg mul bx mov WORD PTR VGDTR.Base,ax mov WORD PTR VGDTR.Base+2,dx retInitGDT ENDP;入口參數:FS:SI=第一個要初始化的描述符,CX=要初始化的描述符數InitLDT PROC mov ax,WORD PTR fs:si.Bas
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025和諧供水入網合同
- 2025建筑工程、設備安裝、材料采購等合同量價分析表單
- 2025服務器租用合同樣本
- 2025私營企業股權轉讓合同范本
- 山西省太原市第十二中學2024-2025學年高三高考3月模擬試卷物理試題含解析
- 山東省濟寧院附中2025年初三下學期第一次診斷(期末)考試化學試題含解析
- 四川長江職業學院《會展營銷》2023-2024學年第二學期期末試卷
- 山西藝術職業學院《項目視覺出品與設計營銷》2023-2024學年第二學期期末試卷
- 信陽藝術職業學院《中國文化概要英語》2023-2024學年第二學期期末試卷
- 上海外國語大學《數字邏輯與數字系統A》2023-2024學年第一學期期末試卷
- GB∕T 23524-2019 石油化工廢鉑催化劑化學分析方法 鉑含量的測定 電感耦合等離子體原子發射光譜法
- 《手機短視頻:策劃拍攝剪輯發布》第4章 手機短視頻的拍攝方法
- Q∕SY 1134-2014 產品駐廠監造規范
- 堤防工程設計規范
- 寶寶生日祝福可愛卡通電子相冊PPT模板
- 高處作業審批表
- 超聲波洗碗機的設計(全套圖紙)
- 小學校本課程教材《好習慣伴我成長》
- 國家開放大學電大本科《兒童心理學》網絡課形考任務話題討論答案(第二套)
- 用人單位職業健康監護檔案(一人一檔)
- 80噸吊車性能表
評論
0/150
提交評論