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

正文內(nèi)容

一個簡易操作系統(tǒng)的實現(xiàn)畢業(yè)論文(編輯修改稿)

2025-07-25 01:53 本頁面
 

【文章內(nèi)容簡介】 下:a) 當前特權(quán)級CPL。當前代碼段的選擇子中,最低2位為特權(quán)級CPL,這表示當前正在運行的程序的特權(quán)級。CPL是程序本身的性質(zhì)所決定的:如果是“操作系統(tǒng)和操作系統(tǒng)核心程序”(如存儲器管理程序、任務調(diào)度程序、訪問控制程序),那么,特權(quán)級為0;如果是“操作系統(tǒng)外圍的系統(tǒng)程序”(如緩沖區(qū)分配程序、外設驅(qū)動程序),那么,特權(quán)級為1;如果是一些“應用軟件”(如數(shù)據(jù)庫、辦公軟件),那么、特權(quán)級為2;如果是用戶程序,那么特權(quán)級為3。b) 描述符特權(quán)級DPL。每個段的段描述符中,用描述符特權(quán)級DPL表示此段的特權(quán)級。程序運行時,數(shù)據(jù)段的DPL在每次被訪問時受到檢查,以確定程序是否有權(quán)訪問該數(shù)據(jù)段。c) 請求特權(quán)級RPL。數(shù)據(jù)段的段選擇子中的最低2位為請求特權(quán)級RPL,數(shù)據(jù)段總是被代碼訪問的,此時RPL將受到檢測,以確定此次訪問是否合法。只有當代碼段的CPL的級別不低于RPL的時候,才能是訪問成功進行。數(shù)據(jù)段中設置RPL是為了防止特權(quán)級低的程序訪問特權(quán)級高的數(shù)據(jù)段。一般情況下,數(shù)據(jù)段選擇子中的RPL和此段描述符中的DPL是相等的,由于在程序運行中,要訪問數(shù)據(jù)時,總是先裝入選擇子,再由選擇子找到段描述符,然后由段描述符找到對應段,所以,提前在裝入選擇子這一環(huán)用RPL進行特權(quán)級保護檢查,使得保護機制更加快捷。當一個程序訪問數(shù)據(jù)段的時候,其CPL的級別必須高于或等于被訪問段的DPL。例如,CPL為0的代碼段對任何特權(quán)級的數(shù)據(jù)段都可以訪問,而CPL為1的代碼段只能訪問特權(quán)級為3的數(shù)據(jù)段。在程序運行過程當中,除了數(shù)據(jù)讀寫操作時進行界限檢查之外,當遇到轉(zhuǎn)移指令JMP、中斷指令INT、電泳指令CALL、和返回指令RET時,可能因為涉及到不同的段,所以也會進行界限檢查。如果是段內(nèi)轉(zhuǎn)移,則保護模式會檢查這些指令的目標地址是否超出了當前代碼段的界限,如果是段間轉(zhuǎn)移,則會對目標端的特權(quán)級進行檢查,只有CPL級別低于或者等于目標端的DPL時,才能實現(xiàn)轉(zhuǎn)移,也就是說,轉(zhuǎn)移,總是往高級別或者相同級別的目標段進行。如此一來,出現(xiàn)了CPL和DPL狀態(tài)不同的情況,這種情況產(chǎn)生在異常中斷和調(diào)用INT指令、CALL指令的時候,此時,CPL改成DPL的值,CPL數(shù)值減小,級別提高。但是,當執(zhí)行RET、IRET指令時,情況和執(zhí)行CALL、INT指令相反,此時,CPL的數(shù)值可能會增大,級別降低。最后,需要注意的是:a) DPL是“段描述符”提供的,每個段都對應著一個DPL,而CPL和RPL是“選擇子”提供的。b) CPL對應于代碼段,而RPL對應于數(shù)據(jù)段c) 一個代碼段處于運行過程中,沒有發(fā)生段間轉(zhuǎn)移時,CPL總是等于DPLd) CPL為0時,可以訪問任何RPL級別的數(shù)據(jù)段,CPL為1時,只能訪問RPL為3的數(shù)據(jù)段。以此類推。 分段管理機制上面講到存儲管理機制和虛擬地址映射物理地址機制,那在32位保護模式下,操作系統(tǒng)具體怎樣實現(xiàn)這些機制?這節(jié)的主要內(nèi)容就是:介紹保護模式下的段定義,以及怎樣實現(xiàn)由“段選擇子”+“段內(nèi)偏移”構(gòu)成的“二維虛擬地址”轉(zhuǎn)換為“一維的線性地址”。 段定義段是實現(xiàn)虛擬地址到線性地址轉(zhuǎn)換機制的基礎。在保護方式下,每個段由這三個參數(shù)定義:段基地址,段界限,段屬性。通俗點說,“段基地址”規(guī)定了這個段在“線性地址空間”中的開始地址,“段界限”規(guī)定這個段的大小,值得注意的是,在80386保護模式下,段界限僅僅由20位來表示,大家都知道,20位能表達的最大地址是1M,如果是以1B作為單位的話,一個段的最大地址范圍是1M*1B = 1MB,顯然無法滿足程序的需求,而且也體現(xiàn)不出保護模式相對于實模式的優(yōu)越性,為了解決這個問題,在“段屬性”(定義段的三個元素之一)中用一位“粒度位”(用符號G標記)來規(guī)定20位段界限的單位,如果G=0表示以1B作為單位,段大小的范圍為1B1M;如果G=1表示以4KB為單位,段大小的范圍為4KB4GB?!岸螌傩浴币?guī)定了段的主要特性,例如上面提到的“粒度位”,以及段的特權(quán)級,這里不詳細介紹。 虛擬地址到線性地址的轉(zhuǎn)換機制由上一個小節(jié)可知,由“二維的虛擬地址”到“一維的線性地址”的轉(zhuǎn)換機制可由圖34所示。圖 34 由虛擬地址到線性地址的轉(zhuǎn)換機制 虛擬地址到線性地址的轉(zhuǎn)換機制所需要的數(shù)據(jù)結(jié)構(gòu)和寄存器上面講到三個參數(shù)可以定義一個段,這三個參數(shù)由一個8字節(jié) = 64位的數(shù)據(jù)結(jié)構(gòu)保存,這個數(shù)據(jù)結(jié)構(gòu)稱作“段描述符”(顧名思義),其中32位表示“段基地址”,20位表示“段界限”,剩下的12位表示“段屬性”。為了和上一代的機器兼容,32位的“段基地址”和20位的“段界限”并非連續(xù)存放,具體怎樣存放,“段屬性”中哪一位代表什么,限于論文篇幅,這里不詳細介紹。(全局和局部)段描述符表一個任務會涉及到多個段,每個段需要一個描述符來描述,為了方便管理和查詢,80386將描述符組織成線性表,由描述符組成的線性表稱作“描述符表”。在80386中一共有三種“描述符”表:全局描述符表GDT(Global Descriptor Table),局部描述符表LDT(Local Descriptor Table),中斷描述符表IDT(Interrupt Descriptor Table)。在整個系統(tǒng)中,全局描述符表GDT和中斷描述符表IDT只有一張,局部描述符表由多張,每個任務可以有一張自己的LDT。每個描述符表本身形成一個特殊的數(shù)據(jù)段,這樣的特殊數(shù)據(jù)段最多可以包含8096個描述符。每個任務的“局部描述符表LDT”含有該任務自己的代碼段、數(shù)據(jù)段、和堆棧段的描述符,也包含該任務所使用的一些“門描述符”,如:“任務門”和“調(diào)用門”門描述符。隨著任務的切換,系統(tǒng)當前的“局部描述符表LDT”也隨之切換?!叭置枋龇鞧DT”含有每一個任務都有可能或者可以訪問的段的描述符,通常包括操作系統(tǒng)所使用的代碼段、數(shù)據(jù)段、堆棧段的描述符,也包含多種特殊數(shù)據(jù)段描述符,例如各個用于描述任務LDT的特殊數(shù)據(jù)段。在任務切換時,不切換GDT。通過LDT可以使各個任務私有的各個段與其他任務隔離,從而達到受保護的目的。通過GDT可以使各個任務都需要使用的段能夠被共享。由上面的內(nèi)容可知“虛擬地址”是“二維”的,那是哪兩個“維”呢?“虛擬地址”是由那兩個東西組成的呢?在實模式中,這兩個東西一個是保存在段寄存器(CS,DS,SS。)中的段地址,另一個是段內(nèi)偏移地址,此時線性地址 = (段寄存器)*16 + 段內(nèi)偏移。而在保護模式中,“段選擇子”代替了保存在段寄存器(CS,DS,SS。)中的段地址。通俗點說,“段選擇子”是一個索引,一個指針,它可以幫助操作系統(tǒng)在“段描述符表”中查找到定義這個段的“段描述符”,從而得到“段描述符”中的“段基地址”,其實到了這個時候,這個“段描述符”中的“段基址地址”,就和實模式中的段寄存器(CS,DS,SS。)中的段地址有點相似了,但是不同點在于計算線性地址的方式,實模式中,線性地址 = (段寄存器)*16 + 段內(nèi)偏移,而保護模式中,線性地址 = 段基地址 + 偏移?!岸芜x擇子”長16位,第0位和第1位十請求特權(quán)級RPL(Request Privilege Level)用于特權(quán)檢查;第2位是引用描述符表指示位TI(Table Indirector),TI = 0指示從全局描述符表GDT中讀取段描述符,TI = 1指示從局部描述符表LDT中讀取段描述符;第3至15位一共13位用來指示“描述符索引”,由于每個描述符在描述符表中占據(jù)8個字節(jié),所以,如果屏蔽掉段選擇子的低三位(即令低三位為0),剛好可以得到當前描述符相對于第一個描述符的偏移地址,這或許是安排選擇子高13位作為“描述符索引”的原因。一共有13位作為選擇子的“描述符索引”,所以一個描述符表中,最多有8096個描述符。所以,總結(jié)來說就是,“二維的虛擬地址” = “選擇子:偏移地址”,“選擇子”+“段描述符表”得到“段描述符”,從“段描述符”得到“段基地址”,由“段基地址”和“偏移地址”就可以就算出線性空間中的“一維的線性地址”。從上述敘述可知,在保護模式下,每一次由“虛擬地址”映射為“線性地址”時,都必須使用“選擇子”查詢“描述符表”來得到段描述符中的基地址。為了避免每一次存儲器訪問時,都要訪問描述符表,從80286開始,每個段寄存器都配有一個高速緩沖寄存器,稱之為“段描述符高速緩沖寄存器”或稱為“描述符投影寄存器”,這個寄存器的存在對程序員來說是不可見的。其工作原理為:每當把一個“選擇子”裝入到某個段寄存器時,處理器自動從描述符表中取出相應的描述符,把描述符中的信息裝入到對應的高速緩沖寄存器中,此后在對該段訪問時,處理器都是用對應高速緩沖寄存器中的描述符信息,而不用再從描述符表中取描述符。而絕大多數(shù)情況下,對存儲器的訪問都是在“對應選擇子”裝入到段寄存器之后進行的,所以,使用段描述符高速緩沖寄存器可以得到很好的執(zhí)行效果。 分段管理機制所依賴的兩類寄存器上面的內(nèi)容對80386的保護模式下的分段管理機制做了詳細說明,但是有幾點疑問,CPU靠什么來控制這些機制的實施?例如,怎么設置CPU,讓其運行在實模式下或者保護模式下?還有,上面提到了可以保存8096個描述符的描述符表,這個表到底在內(nèi)存的哪里,CPU怎么找到保存這個表的特殊數(shù)據(jù)段?要回答這些問題,必須搞明白的一點是,為了使得分段管理機制的實施,CPU必須知道人們到底想讓它“干什么”和“怎么干”。而通過設置“控制寄存器”,可以讓CPU知道自己“走什么路”,按什么方式運行;通過設置“系統(tǒng)地址寄存器”,可以給予CPU一些實施這個機制必須的數(shù)據(jù)。下面就對這兩類寄存器進行詳細說明。 控制寄存器 控制寄存器包含四個32位的寄存器,分別命名為CR0,CR1,CR2,CR3。 CR0的第0位為PE位,第31位為PG位,這兩個控制位控制分段和分頁管理機制,所以稱之為“保護控制位”。PE控制分段管理機制,PE = 0,處理器運行于實模式,PE = 1,處理器運行于保護模式。PG控制分頁管理機制,PG = 0,禁用分頁管理機制,此時“線性地址”等同于“物理地址”,PG = 1,啟用分頁管理機制,此時“線性地址”通過內(nèi)存中的MMU轉(zhuǎn)化為“物理地址”。CR0中的第1至4位為MP(算數(shù)存在位)、EM(模擬位)、TS(任務切換位)、ET(擴展類型類),它們共同控制浮點協(xié)處理器的操作,所以稱為“協(xié)處理器控制位”。 CR1被保留,供以后的開發(fā)的處理使用,在80386中不能使用CR1,否則引起無效指令操作異常。CR2和CR3用于分頁管理機制使用,由于這次的操作系統(tǒng)沒有用到分頁管理,限于論文篇幅,這里不做介紹。 系統(tǒng)地址寄存器 “全局描述符表GDT”、“局部描述符表LDT”和“中斷描述符表IDT”在上文已經(jīng)有所有講述,這三個描述符表是保護模式下非常重要的數(shù)據(jù)結(jié)構(gòu),它們被保存在特殊數(shù)據(jù)段里,但是操作系統(tǒng)怎樣快速地定位,找到它們,這就用到了“系統(tǒng)地址寄存器”。 一般來說,要定義一個段需要三個參數(shù),段基地址、段大小、段屬性,而由于這三個表太過于“著名”且“地位特殊”,已經(jīng)不需要太多的“段屬性”來對他們進行說明,所以,“系統(tǒng)地址寄存器”只負責告知這些特殊數(shù)據(jù)段的基地址和界限(即大小)。 這些“系統(tǒng)地址寄存器”包括“全局描述符表寄存器GDTR”(GDT Register)、“局部描述符表寄存器LDTR”(LDT Register)、“中斷描述符表寄存器IDTR”(IDT Register)、任務狀態(tài)段寄存器TR(TTS Register)。圖 35 控制寄存器和系統(tǒng)地址寄存器 全局描述符表寄存器GDTR 如圖36所示,GDTR長48位,其中高32位作為基地址,低16位作為界限。GDTR中的段界限以1B為單位,由于段選擇子中用13位作為描述符索引,所以一個描述符表最多有2的13次方個段描述符,每個段描述符占用8B空間,所以,用16位作為界限足夠。通常對于含有N個描述符的描述符表的段界限應該設置為8*N – 1。圖 36 GDTR中的基地址和界限 局部描述符表寄存器LDTR 局部描述符表寄存器LDTR規(guī)定當前任務使用的局部描述符表LDT,如圖所示,由程序員可見的16位的寄存器和32位的程序員不可見的高速緩沖寄存器組成。 實際上,每個任務的局部描述符表作為系統(tǒng)的一個特殊段,由一個全局描述符描述(當然其實沒有“全局描述符”這個說法),這個全局描述符存放在GDT中。在初始化或任務切換過程中,把指示描述當前任務或者切換后任務LDT的描述符的選擇子裝入到LDTR(即上面提到的程序員可見的16位的寄存器),處理器根據(jù)裝入LDTR可見部分的選擇子,從GDT中去除對應的描述符,并把LDT的基地址和界限等信息保存到LDTR對應的高速緩沖寄存器中(32位的程序員不可見的高速緩沖寄存器)。隨后對LDT的訪問,既可以根據(jù)保存在高速緩沖寄存器中的有關信息進行合法性檢查。 LDTR寄存器包含當前任務LDT的選擇子,所以,裝入到LDTR的選擇子必須確定一個位于GDT的位LDT類型的系統(tǒng)段描述符,也就是說,選擇子中的TI位必須是0(前面提到過),而且這個描述符的類型字段(屬于“段類型”的一部分)所表示的類型必須是LDT。 中斷描述符表寄存器IDTR 中斷描述符表寄存器IDTR指向中斷描述符表IDT。如圖35所示,IDTR長48位,其中32位的基地址規(guī)定IDT的基地址,16位的界限規(guī)定IDT的段界限。由于80386只支持256個中斷+異常,所以IDT表的最大長度為2K。 IDTR指示IDT表的方式與GETR指示GDT表的方式相同。 任務狀態(tài)段寄存器TR 任務狀態(tài)段寄存器TR包含指示描述當前任務的任務狀態(tài)段(TTS)的描述符選擇子,從而規(guī)定了當前任務的狀態(tài)段,任務狀態(tài)段的格式在后面的任務切換中詳細介紹。 如圖35所示,和LDTR一樣,TR也有程序員可見和不可見部分(其實不可見部分都是之前講到過的高速緩沖寄存器)。當把任務狀態(tài)段的選擇子裝入到TR可見部分時,處理器
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1