版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p><b> 摘 要</b></p><p> 作為學習操作系統(tǒng)的新手,商用的操作系統(tǒng)設計復雜,代碼量大,不適合作為學習的藍本,如果能夠從零開始開發(fā)一個小型的操作系統(tǒng)雛形,不但可以全面深入地了解操作系統(tǒng)的工作原理,還可以為讀大型開源操作系統(tǒng)的代碼積累經(jīng)驗。</p><p> 這個取名為MyOS的從頭開始開發(fā)的系統(tǒng)雖然結(jié)構(gòu)簡單,但是具備了內(nèi)存管
2、理、多任務控制、任務切換、基本輸入輸出管理并且運行在32位保護模式下,在用戶接口方面,它采用的是圖形界面和命令行界面混合的方式來與用戶交互,在程序接口方面,設計了部分API,主要是針對于圖形顯示和計時器兩方面,本文利用這些API,實現(xiàn)了“貪吃蛇”、“時鐘計時器”兩個例子程序。</p><p> 本文首先介紹操作系統(tǒng)運行所依賴的硬件系統(tǒng)組成,然后重點地介紹了操作系統(tǒng)的基本特征和主要功能,接著詳細地說明了80386
3、以上Intel CPU所運行的貫穿整個操作系統(tǒng)開發(fā)的32位保護模式,接下來簡述了MyOS的開發(fā)環(huán)境和語言,以及MyOS的基本運行原理,然后重點介紹了MyOS的設計與實現(xiàn),最后敘述MyOS的程序接口API,以及利用MyOS中的API設計的應用程序。</p><p> 關鍵詞:操作系統(tǒng),運行原理,32保護模式</p><p><b> ABSTRACT</b><
4、/p><p> As a fresh man who want to learn Operating System deeply, commercial using OS are too complex to learn .So ,if we develop a demo of OS from blank, if we start from scratch ,we can not only have a good
5、 know for the running principle of a OS, but also accumulate many experience which are of significant importance to our further study and research for the operating system.</p><p> This thesis is about a
6、Operating System which is developed from the blank,and its’ name is MyOS.This MyOS is simple in structure, however, it possesses the management of memery and task and basic input and out, it support the multitask and r
7、un under the 32 bit protect mode. In addition, it using both graphical interfaces and command line interfaces to interact with user.As for the API, the MyOS get some API for the graphical display and timer, by which we
8、 develop some program which may run o</p><p> This thesis are composed by these elements.First of all, it describe the hardware which Operating System run on, and then ,it present the fundamental character
9、and main function of the Operating System. Secondly ,it illuminates the protect mode which is one of the two important elements of the thesis, and the other one is particularize the design and realization of the MyOS, be
10、fore which ,it will briefly tell you the developing circumstance and the developing language. At last, it deals with the</p><p> Keywords: Operating System , Principle of Running ,32bit Protect Mode</
11、p><p><b> 目 錄</b></p><p><b> 摘 要I</b></p><p> ABSTRACTII</p><p><b> 第1章 緒論1</b></p><p> 1.1 選題背景和意義1</
12、p><p> 1.2 國內(nèi)外研究現(xiàn)狀2</p><p> 1.3 主要研究內(nèi)容3</p><p> 第2章 操作系統(tǒng)運行環(huán)境及運行原理簡述4</p><p> 2.1 計算機系統(tǒng)硬件組成簡述4</p><p> 2.1.1 總線4</p><p> 2.1.2 I/
13、O設備4</p><p> 2.1.3 主存5</p><p> 2.1.4 處理器5</p><p> 2.2 操作系統(tǒng)的基本特性5</p><p> 2.2.1并發(fā)性6</p><p> 2.2.2共享性6</p><p> 2.2.3虛擬性6</p&g
14、t;<p> 2.2.4異步性7</p><p> 2.3 操作系統(tǒng)的主要功能7</p><p> 2.3.1 處理機管理7</p><p> 2.3.2 存儲器管理7</p><p> 2.3.3 設備管理8</p><p> 2.3.4 文件管理8</p>
15、<p> 2.3.5 用戶接口9</p><p> 2.3.6 程序接口9</p><p> 第3章 32位保護模式介紹11</p><p> 3.1 32位保護模式簡述11</p><p> 3.1.1 存儲管理機制和地址轉(zhuǎn)換機制簡介11</p><p> 3.1.2
16、保護機制12</p><p> 3.2 分段管理機制15</p><p> 3.2.1 段定義15</p><p> 3.2.2 虛擬地址到線性地址的轉(zhuǎn)換機制15</p><p> 3.2.3 虛擬地址到線性地址的轉(zhuǎn)換機制所需要的數(shù)據(jù)結(jié)構(gòu)和寄存器16</p><p> 3.3 分段管理機制
17、所依賴的兩類寄存器17</p><p> 3.3.1 控制寄存器17</p><p> 3.3.2 系統(tǒng)地址寄存器18</p><p> 3.4 系統(tǒng)段描述符、門描述符、任務狀態(tài)段20</p><p> 3.4.1 系統(tǒng)段描述符20</p><p> 3.4.2 門描述符21</p
18、><p> 3.4.3 任務狀態(tài)段TSS22</p><p> 3.5 控制轉(zhuǎn)移23</p><p> 3.5.1 任務內(nèi)無特權(quán)級變換的轉(zhuǎn)移23</p><p> 3.5.2 任務內(nèi)不同特權(quán)級的變換24</p><p> 3.5.3 任務間控制轉(zhuǎn)移----“任務切換”26</p>
19、<p> 第4章 MyOS具體設計與實現(xiàn)28</p><p> 4.1 MyOS的開發(fā)語言、開發(fā)流程以及開發(fā)環(huán)境簡述28</p><p> 4.2 MyOS運行原理簡述29</p><p> 4.2.1 引導扇區(qū)29</p><p> 4.2.2 加載內(nèi)核30</p><p>
20、 4.2.3 執(zhí)行系統(tǒng)內(nèi)核30</p><p> 4.3 MyOS內(nèi)核設計與實現(xiàn)31</p><p> 4.3.1 內(nèi)存管理31</p><p> 4.3.2 定時器設計36</p><p> 4.3.3 FIFO緩沖區(qū)設計41</p><p> 4.3.4 基本輸入輸出管理44&l
21、t;/p><p> 4.3.5 多任務管理47</p><p> 4.3.6 圖形界面的設計54</p><p> 4.3.7 編程接口API設計56</p><p> 第5章 利用MyOS的API編寫程序并運行60</p><p> 5.1 表秒計時器60</p><p&
22、gt; 5.2 游戲“貪吃蛇”61</p><p> 第6章 總結(jié)68</p><p><b> 參考文獻69</b></p><p><b> 致 謝70</b></p><p><b> 第1章 緒論</b></p><p&
23、gt; 1.1 選題背景和意義</p><p> 眾所周知,一個成型的操作系統(tǒng)往往非常復雜,因為考慮到操作系統(tǒng)作為軟硬件橋梁的特殊地位,其看上去比一般的軟件系統(tǒng)更加的難以理解,因為其核心部分往往包含許多直接針對CPU,內(nèi)存和I/O端口的操作?,F(xiàn)在有許多公開源代碼的操作系統(tǒng),可供隨時下載和閱讀,但是如果沒有些許實際開發(fā)的經(jīng)驗,往往會深陷代碼的汪洋大海中,“一葉障目,不見泰山”,并且這些代碼的細節(jié)之間經(jīng)?;ハ嚓P
24、聯(lián),要理解起來很不容易。而動手開發(fā)一個簡易的操作系統(tǒng),從底層原理一步一步實現(xiàn)最基本和最簡單的功能,到最后積累成一個簡單的操作系統(tǒng)模型,最終達到為以后閱讀大型操作系統(tǒng)(例如Linux)的源代碼打下基礎的目的。</p><p> 作為一個計算機系并有志于從事計算機相關行業(yè)的大學生來說,很多本科時期計算機相關科目的學習都僅僅是“紙上談兵”,缺乏實際操作,更談不上實際應用,這對以后的深入學習和長期發(fā)展非常不利。例如:匯
25、編課程學習的大部分內(nèi)容都使用8086/8088的16位實模式作為學習藍本,而現(xiàn)在操作系統(tǒng)因為大內(nèi)存的使用, 基本全部是32位保護模式,雖然語法等基礎沒有變化,但是其32保護模式的架構(gòu)思想在匯編課程中卻沒有提及到;作為系統(tǒng)開發(fā)利器的c語言,其課程學習只是掌握表面語法,如果沒有深入地應用,沒有研究其在機器層面的原理,很多精髓都無法掌握,也就談不上真正掌握c語言;而對于學習操作系統(tǒng)本身,如果沒有閱讀經(jīng)典操作系統(tǒng)的源代碼或者嘗試去做系統(tǒng)開發(fā)這方
26、面的實踐,對于其諸多概念和原理是無法深入理解的,只能停留在表面理解,無法做到心中有數(shù),就更談不上創(chuàng)新了。</p><p> 本文試圖通過這么一個“麻雀雖小,五臟俱全”操作系統(tǒng)的開發(fā),達到復習并總結(jié)本科時期諸多科目的目的,包括:x86匯編語言,C語言,計算機組成原理,微機原理,數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng),而事實上,在基本完成畢設,撰寫論文之際,對這幾門課程的確有了更新更高層次的理解,很多當時只是浮于表面的概念現(xiàn)在都能夠或
27、多或少地落實到代碼并能夠親自實現(xiàn)和完善,同時也初步具備了自己閱讀和分析大型操作系統(tǒng)源代碼的能力。</p><p> 1.2 國內(nèi)外研究現(xiàn)狀</p><p> 操作系統(tǒng)并不是與計算機硬件一起誕生的,它是在人們使用計算機的過程中,為了滿足兩大需求:提高資源利用率、增強計算機系統(tǒng)性能,伴隨著計算機技術(shù)本身及其應用的日益發(fā)展,而逐步地形成和完善起來的。</p><p>
28、; 操作系統(tǒng)的發(fā)展經(jīng)歷了手工操作(無操作系統(tǒng))、批處理系統(tǒng)、多道程序系統(tǒng)、分時系統(tǒng)、實時系統(tǒng)、通用操作系統(tǒng)。如今,概念意義上的操作系統(tǒng)和通俗意義上的操作系統(tǒng)差距越來越大,通俗意義上的操作系統(tǒng)為了方便而把最普通的包和應用程序的集合包括在操作系統(tǒng)內(nèi),而隨著操作系統(tǒng)的發(fā)展,一些功能更強的“第二類”操作系統(tǒng)軟件也被包括進去。在今天,沒有圖形界面和各種文件瀏覽器已經(jīng)不能稱為一個真正的操作系統(tǒng)了。</p><p> 另一
29、方面,操作系統(tǒng)的發(fā)展和計算機硬件的發(fā)展緊密聯(lián)系,而從計算機硬件發(fā)展的角度來看,操作系統(tǒng)的發(fā)展經(jīng)過了大型機時代操作系統(tǒng)、小型機時代操作系統(tǒng)(Unix)和個人計算機時代操作系統(tǒng)。</p><p> 大型機時代。早期的操作系統(tǒng)非常多樣化,生產(chǎn)商生產(chǎn)出針對各自硬件的系統(tǒng)。每一個操作系統(tǒng)都有很不同的命令模式、操作過程和調(diào)試工具,即使它們來自同一個生產(chǎn)商。最能 反映這一狀況的是,廠家每生產(chǎn)一臺新的機器都會配備一套新的操作系
30、統(tǒng)。這種情況一直持續(xù)到二十世紀六十年代IBM公司開發(fā)了System/360系列機器。盡管這些機器在性能上有明顯的差異,但是他們有統(tǒng)一的操作系統(tǒng)——OS/360。OS/360的成功陸續(xù)地催化出MFT、MVT、SVS、MVS、MVS/XA、MVS/ESA、OS/390和z/OS。 </p><p> 小型機和UNIX的崛起。UNIX操作系統(tǒng)是由AT&T公司開發(fā)出來的。由于它的早期版本是完全免費的,可以輕易獲
31、得并隨意修改,所以它得到了廣泛的接受。后來,它成為開發(fā)小型機操作系統(tǒng)的起點。由于早期的廣泛應用,它已經(jīng)成為的操作系統(tǒng)的典范。不過,它始終屬于AT&T公司,只有那些能負擔的起許可費的企業(yè)才用得起,這限制了它的應用范圍。 </p><p> 早期的操作系統(tǒng)是可以被用戶軟件所利用的功能的集合。一些有能力的公司發(fā)展更好的系統(tǒng),但他們不支持其他公司硬件的特性。 </p><p> 60年
32、代末70年代初,幾種硬件支持相似的或提供端口的軟件可在多種系統(tǒng)上運行。早期的系統(tǒng)已經(jīng)利用微程序來在他們的系統(tǒng)上實現(xiàn)功能。事實上,除了360/165和360/168外,360/40之后的大部分360系列的機器都實行微程序設計。 </p><p> 個人計算機時代。Apple, DOS 和以后微型處理器的發(fā)展使計算機的應用普及至中小企及個人愛好者。而計算機的普及又推動了硬件組件公共接口的發(fā)展(如S-100,SS-5
33、0,Apple II,ISA和PCI總線),并逐漸地要求有一種“標準”的操作系統(tǒng)去控制它們。在這些早期的計算機中,主要的操作系統(tǒng)是8080/8085/Z-80 CPU用的Digital Research’s CP/M-80,它建立在數(shù)碼設備公司(Digital Research)幾個操作系統(tǒng)的基礎上,主要針對PDP-11架構(gòu)。在此基礎上又產(chǎn)生了MS-DOS(或IBM公司的PC-DOS)。這些計算機在ROM(只讀存儲器)都有一個小小的啟動
34、程序,可以把操作系統(tǒng)從磁盤裝載到內(nèi)存。IBM-PC系列的BIOS是這一思想的延伸。自1981年第一臺IBM-PC誕生以來,BIOS的功能得到不斷地增強。 </p><p> 隨著顯示設備和處理其成本的降低,很多操作系統(tǒng)都開始提供圖形用戶界面。如:許多UNIX提供的X Window一類的系統(tǒng)、微軟的Windows系統(tǒng)、蘋果公司的Mac系統(tǒng)和IBM公司的OS/2等。最初的圖形用戶界面是由Xerox Palo Alt
35、o研究中心70年代初期研發(fā)出來的,之后被許多公司模仿,繼承發(fā)展。</p><p> 1.3 主要研究內(nèi)容</p><p> 實現(xiàn)一個能夠在裸機上運行的簡易的操作系統(tǒng)。</p><p> 該操作系統(tǒng)在保護模式下運行,是一個多任務的操作系統(tǒng),可以進行任務調(diào)度以及任務之間的通信。</p><p> 該操作系統(tǒng)具有自己的硬盤驅(qū)動程序,并實現(xiàn)
36、一個簡易的文件系統(tǒng),能夠?qū)崿F(xiàn)基本的文件操作系統(tǒng)調(diào)用。</p><p> 該操作系統(tǒng)具有簡單的內(nèi)存管理功能。</p><p> 該操作系統(tǒng)使用鍵盤和顯示器作為基本的輸入輸出系統(tǒng)。</p><p> 該操作系統(tǒng)具有簡易的命令行風格的用戶界面,實現(xiàn)一些主要的操作系統(tǒng)命令。</p><p> 在時間允許的情況下,進一步改善用戶界面,能夠?qū)崿F(xiàn)一
37、個簡易的圖形用戶界面,可以使用鼠標進行操作,并能夠輸出聲音(選做)。 </p><p> 將已完成的簡易操作系統(tǒng)制作成軟盤鏡像文件,可在虛擬機中運行。</p><p> 將已完成的簡易操作系統(tǒng)制作成光盤在真機上運行(選做)。</p><p><b> 撰寫畢業(yè)論文。</b></p><p><b> 答
38、辯。</b></p><p> 第2章 操作系統(tǒng)運行環(huán)境及運行原理簡述</p><p> 2.1 計算機系統(tǒng)硬件組成簡述</p><p> 如圖2-1所示,這是一個計算機系統(tǒng)硬件組成的簡單模型。</p><p><b> 2.1.1 總線</b></p><p> 貫穿
39、整個系統(tǒng)的是一組電子管道,稱作“總線”,它攜帶信息字節(jié)并負責在各個部件之間傳遞。通??偩€被設計成傳送定長的字節(jié)塊,也就是“字”(word)。一個字的字節(jié)數(shù)(被稱為“字長”)是一個基本的系統(tǒng)參數(shù),在各個系統(tǒng)中可能不相同?,F(xiàn)在的很多機器字長有的是4個字節(jié)(即32bit),有的是8個字節(jié)(即64bit)。[1]</p><p> 2.1.2 I/O設備</p><p> 輸入/輸出設備(I
40、/O設備)是系統(tǒng)與外部世界的聯(lián)系通道。如圖2-1所示,示例系統(tǒng)包括4個I/O設備:作為用戶輸入的鍵盤和鼠標,作為用戶輸出的顯示器,以及用于長期存儲數(shù)據(jù)和程序的磁盤驅(qū)動。</p><p> 每個I/O設備都通過一個“控制器”或者“適配器”與I/O總線相連?!翱刂破鳌焙汀斑m配器”之間的主要區(qū)別是它們的封裝方式。“控制器”是置于I/O設備本身或者系統(tǒng)的主板上的芯片組內(nèi),而“適配器”是是一塊插在主板插槽上的卡。但是這兩
41、者的任務一樣的,它們都負責在I/O總線和I/O設備自檢傳遞和翻譯信息。</p><p><b> 2.1.3 主存</b></p><p> 主存是一個臨時存儲設備,在處理器執(zhí)行程序時,用來存放程序和程序所處理的數(shù)據(jù)。</p><p> 從物理組成的角度來說,主存是一組動態(tài)隨機存取存儲器芯片組成的,從邏輯來說,主存就是一個線性的字節(jié)數(shù)組
42、,每一個字節(jié)都有唯一的地址,這些地址從0開始。一般來說,組成程序的每條機器指令都由不同數(shù)量的字節(jié)構(gòu)成,與C程序變量相對應的數(shù)據(jù)項的大小是根據(jù)類型變化的。</p><p> 2.1.4 處理器 </p><p> 中央處理單元(CPU),簡稱處理器,是解釋和執(zhí)行存儲在主存中指令的引擎。處理器的核心是一個字長的存儲設備,稱為程序計數(shù)器(PC),在任何時刻,PC都指向主存中的某條機器語言指
43、令。</p><p> 從系統(tǒng)通電開始,直到系統(tǒng)斷電,處理器都一直在不斷地執(zhí)行程序計數(shù)器所指向的指令,再更新程序計數(shù)器,使其指向下一條需要執(zhí)行的指令,這條指令不一定和上一條執(zhí)行的指令相鄰。處理器看上去是按照一個非常簡單的指令執(zhí)行模型來操作的,這個模型是由指令集結(jié)構(gòu)決定的。</p><p> 這樣的簡單操作并不多,而且操作是圍繞主存、寄存器文件、和算術(shù)邏輯單元(ALU)進行的。寄存器文件
44、是一個小的但是高速的存儲設備,由一些1字長的寄存器組成,每個寄存器有唯一的名字和特別的使用方式。而ALU則負責計算,計算數(shù)據(jù)和地址。</p><p> 下面是一些簡單操作的例子,可以通過這些例子更好地了解CPU的各個部件在CPU工作的作用和工作原理。CPU在執(zhí)行的要求下,可能會執(zhí)行以下操作:</p><p> 加載:把一個字節(jié)(或者一個字)從主存復制到寄存器,寄存器里原來的值被覆蓋。&
45、lt;/p><p> 存儲:把一個字節(jié)(或者一個字)從寄存器復制到主存的某個位置,以覆蓋內(nèi)存中該位置原來的值。</p><p> 計算:把兩個寄存器的內(nèi)容復制到ALU,ALU對這兩個字做算術(shù)運算,并將結(jié)果存在一個寄存器中,寄存器里原來的值被覆蓋。</p><p> 跳轉(zhuǎn):從指令中抽取一個字,并將這個字復制到程序計數(shù)器(PC)中,實現(xiàn)跳轉(zhuǎn)。</p>&
46、lt;p> 處理器看上去指示它的指令集結(jié)構(gòu)的簡單實現(xiàn),但是實際上現(xiàn)代處理器使用了非常復雜的機制來加速程序的執(zhí)行。所以,可以這樣區(qū)分“處理器的指令集結(jié)構(gòu)”和“微體系結(jié)構(gòu)”:“指令集結(jié)構(gòu)描述的是每條機器代碼指令的效果”,而“微體系結(jié)構(gòu)”描述的是處理器實際上是如何實現(xiàn)的。</p><p> 2.2 操作系統(tǒng)的基本特性</p><p> 操作系統(tǒng)的基本特性有并發(fā)性、虛擬性、共享性、異
47、步性,其中,并發(fā)性和虛擬性是操作系統(tǒng)最重要的兩個特性。</p><p><b> 2.2.1并發(fā)性</b></p><p> 并行性和并發(fā)性是既相似又有區(qū)別的兩個概念,并行性是指兩個或者多個事件在同一時刻發(fā)生,而并發(fā)性是指兩個或者多個事件在同一時間間隔內(nèi)發(fā)生。</p><p> 為了使多個程序能夠在系統(tǒng)中并發(fā)執(zhí)行,系統(tǒng)必須為每個程序建立進
48、程(Process)。簡單來說,進程是指在系統(tǒng)中能獨立運行并作為資源分配的基本單位,由一組機器指令、數(shù)據(jù)和堆棧等組成,是一個能獨立運行的活動實體。多個進程之間可以并發(fā)執(zhí)行和交換信息。一個進程在運行時需要一定的資源,如CPU、存儲空間以及I/O設備等。</p><p> 操作系統(tǒng)中程序的并發(fā)執(zhí)行將使系統(tǒng)復雜化,以至于在系統(tǒng)中必須增設若干新的功能模塊,分別用于對CPU、內(nèi)存、I/O設備以及文件系統(tǒng)等重要資源進行管理
49、,并控制好系統(tǒng)中各個進程的運行。</p><p> 長期以來,進程都是操作系統(tǒng)中可以擁有資源并作為獨立運行的基本單位。當一個進程因故不能繼續(xù)運行,操作系統(tǒng)便調(diào)度另一個程序運行。但是由于進程擁有自己的資源,故使得調(diào)度付出的代價非常大,所以人們引入比進程更小的單位——線程。通常一個進程中包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的OS中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立
50、調(diào)度的基本單位。由于線程比進程更小,基本上不擁有系統(tǒng)轉(zhuǎn),所以對地進行調(diào)度所花費的系統(tǒng)資源很少,從而能夠更高效地提高系統(tǒng)內(nèi)多個程序并發(fā)執(zhí)行的程度。</p><p><b> 2.2.2共享性</b></p><p> 在操作系統(tǒng)中,所謂共享,是指系統(tǒng)中的資源可供內(nèi)村中并發(fā)執(zhí)行的進程共同使用,相應的,把這種西苑共同使用成為資源共享,或者是資源復用。由于資源的屬性不同,
51、進程對資源的復用方式也不同,主要實現(xiàn)資源共享的方式有以下兩種:互斥共享方式和同時訪問方式。</p><p><b> 2.2.3虛擬性</b></p><p> 操作系統(tǒng)中的所謂“虛擬性”,是指通過虛擬技術(shù)把一個物理實體變?yōu)槿舾蛇壿嬌系膶?。物理實體是實際存在的,而邏輯對應物是現(xiàn)對于用戶來說的,是用戶感覺到的可以使用的東西。這個技術(shù)的實現(xiàn)主要有兩種途徑,時分復用
52、技術(shù)和空分復用技術(shù)。</p><p> 通俗地理解,時分復用技術(shù)就是將物理設備的使用機會按時間劃分為許多小段,各個用戶(或進程)在調(diào)度進程的調(diào)度下,交替使用這些使用設備的機會,常見的例子有:系統(tǒng)通過對處理機進行分片,然后把時間片分配給各個進程,實現(xiàn)了把一臺物理上的處理機虛擬位多臺邏輯上的處理機,從而在每臺邏輯處理機上運行一道程序。通常把用戶感覺到的處理機成為虛擬處理機。</p><p>
53、 而空分復用技術(shù)則被用來提高存儲空間的利用率,常見的有虛擬磁盤技術(shù)和虛擬存儲器技術(shù)。</p><p><b> 2.2.4異步性</b></p><p> 在多道程序下允許多個進程并發(fā)執(zhí)行,但是只有進程獲得所需的資源后方能執(zhí)行。在單處理機環(huán)境下,由于系統(tǒng)只有一臺處理機,所有每個時刻只能有一個進程運行,其他的必須等待處理機。當正在執(zhí)行的進程提出某種資源要求時,此項
54、資源如果得不到滿足,這個進程就無法繼續(xù)下去。可見一個進程在系統(tǒng)中的運行不可能是“一帆風順”的,而是以“走走停?!钡姆绞竭\行,而且這種方式在進程運行之前是不可預見的,具有隨機性,并且由于各個任務、系統(tǒng)、機器的之間的差異,進程通常以人們不可預知的速度向前推進,這就是進程的“異步性”。</p><p> 為了應對這種進程的“異步性”,為了讓系統(tǒng)中的各個進程都不出錯地執(zhí)行完自己的任務,操作系統(tǒng)必須具備完善的進程同步機制
55、,使得進程之間能夠協(xié)調(diào)地利用好共享的資源,獲得最后想要的結(jié)果。</p><p> 2.3 操作系統(tǒng)的主要功能</p><p> 操作系統(tǒng)的主要任務,是為多道程序的運行提供良好的運行環(huán)境,以保證運行在系統(tǒng)中的各個進程能夠有序、高效地運行,并能夠最大程度地提高系統(tǒng)中各項資源的利用率,而考慮到現(xiàn)在的系統(tǒng)和人之間的交互愈發(fā)頻繁,操作系統(tǒng)還需提供給用戶的使用接口和給程序員的編程接口。</
56、p><p> 所以,操作系統(tǒng)應該具備這樣幾個主要功能:處理機管理,存儲器管理,設備管理,文件管理,用戶接口和程序接口。而隨著網(wǎng)絡的普及,現(xiàn)代操作系統(tǒng)一般都具備網(wǎng)絡功能。</p><p> 2.3.1 處理機管理</p><p> 在未引入線程的系統(tǒng)中,處理機的分配和運行都是以進程為基本單位,因而對處理機的管理可以歸納為對進程的管理:創(chuàng)建和撤銷進程(進程控制),對
57、各個進程的運行進行協(xié)調(diào)(進程同步),進實現(xiàn)進程之間的信息交換(線程通信),按照一定的算法將處理機的處理時間分配給進程。</p><p> 其中進程同步包括“進程互斥”和“進程同步”,“進程互斥”是指各個進程在對臨界資源進行訪問時,應采用互斥方式,“進程同步”是指相互合作去完成某項任務的進程之間,必須遵循某種順序,操作系統(tǒng)中有同步機構(gòu)對它們的執(zhí)行次序加以協(xié)調(diào)。</p><p> 2.3.
58、2 存儲器管理</p><p> 存儲器管理管理的主要任務是為多道程序的運行提供良好的環(huán)境,方便用戶使用存儲器,提高存儲器的利用率以及能從邏輯上擴充內(nèi)存。主要功能包括:內(nèi)存分配、內(nèi)存保護、地址映射、內(nèi)存擴充。</p><p> 其中,為了實現(xiàn)內(nèi)存分配,在內(nèi)存分配機制中應該有這樣的設計和功能:用于實現(xiàn)內(nèi)存分配的數(shù)據(jù)結(jié)構(gòu),內(nèi)存分配功能,內(nèi)存回收功能。</p><p&g
59、t; 而內(nèi)存保護的的主要任務是保證讓每個程序都只能在屬于自己的內(nèi)存空間運行,不能訪問到別的程序的空間,更不能夠訪問到操作系統(tǒng)的內(nèi)存空間。此時,讓內(nèi)存保護得以實現(xiàn),必須設置合理的內(nèi)存保護機制。</p><p> 內(nèi)存映射功能主要是實現(xiàn)將程序的“邏輯地址”或“相對地址”映射為內(nèi)存的“物理地址”。</p><p> 內(nèi)存擴充并非是擴大物理內(nèi)存的實際容量,而是借助于虛擬存儲技術(shù),從邏輯上擴充
60、內(nèi)存容量,使用戶能夠使用的內(nèi)存容量大于實際的物理內(nèi)存容量。內(nèi)存擴充機制主要包括:請求調(diào)入功能和置換功能。</p><p> 2.3.3 設備管理</p><p> 設備管理用于管理計算機系統(tǒng)中所有的外圍設備,而設備管理的主要任務是:完成進程提出的I/O請求;為進程分配其所需要的I/O設備;提高CPU和I/O設備的利用率。</p><p> 為了實現(xiàn)上述任務,
61、設備管理應具備緩沖管理、設備分配、設備處理和虛擬設備等功能。</p><p> 緩沖管理集中要解決的矛盾是,CPU運行的高速型和外圍設備的低速性。而隨著CPU速率的不斷提高,而I/O又具備一定的確定性,所以這個矛盾更加嚴重地降低了CPU的利用率。為了提高CPU的利用率,可以在I/O設備和CPU之間設置緩沖區(qū),用于實現(xiàn)提高CPU的利用率和系統(tǒng)吞吐量。</p><p> 設備分配的任務是根
62、據(jù)進程的I/O請求和資源情況,按照某種分配策略,為進程分配所需要的設備。如果在I/O設備和CPU之間還存在著設備控制器和I/O通道,還要未分配出去的設備分配對應的控制器和通道。為了實現(xiàn)設備分配,系統(tǒng)中應設置設備控制表、控制器控制表等數(shù)據(jù)結(jié)構(gòu),用于記錄設備及控制器的標示符和狀態(tài),系統(tǒng)應該以這些數(shù)據(jù)結(jié)構(gòu)的實時數(shù)據(jù)為依據(jù),了解制定設備當前是否可用,是否忙碌,以供進行設備分配。</p><p> 設備處理其實就是設備驅(qū)
63、動程序,基本任務是用于實現(xiàn)CPU和設備控制器之間的通信,即由CPU向設備控制器發(fā)I/O命令,要求其完成指定的I/O操作;反之,由CPU接受從控制器發(fā)來的中斷請求,并迅速給予響應和相應的處理。</p><p> 2.3.4 文件管理</p><p> 在現(xiàn)代計算機系統(tǒng)中,一般將程序和數(shù)據(jù)以文件的形式存儲在磁盤或者磁帶上,供所有的或者某些指定的用戶使用。為了達到這個目的,操作系統(tǒng)必須配置
64、文件管理機構(gòu),文件管理的主要任務是對用戶文件盒系統(tǒng)文件進行管理,以方便用戶使用,同時需要保證文件的安全性。所以,文件管理的功能主要有:對文件存儲管理空間的管理、目錄管理、文件的讀/寫管理、文件的共享與保護。</p><p> 為了實現(xiàn)文件存儲空間的管理,系統(tǒng)應設置相應的數(shù)據(jù)結(jié)構(gòu),用于記錄文件存儲空間的使用情況,以供分配存儲空間時作為參考。系統(tǒng)還應具有對存儲空間進行分配和回收的功能。為了提高存儲空間的利用率,通常
65、采用離散分配方式對存儲空間進行分配,以減少外村零頭,以盤塊為基本分配單位,盤塊的大小通常為1—8KB。</p><p> 為了實現(xiàn)用戶能方便的在外存上找到自己的文件,通常由文件系統(tǒng)為每個文件建立一個目錄項。目錄項包括文件名、文件屬性、文件在磁盤上的物理位置等等描述文件的信息。而若干個目錄項又可以構(gòu)成一個目錄文件。目錄管理的主要任務是為每個文件建立目錄項,并對所有的目錄項進行有效的管理,以方便按名存取,即用戶只需
66、要提供文件名就可以對該文件進行存取。</p><p> 文件的讀/寫管理實際上是簡化用戶對文件的操作,當用戶想要打開、添加、修改、刪除一個文件時,操作系統(tǒng)先根據(jù)用戶給出的文件名去檢索文件目錄,從中獲得文件在外存的位置,然后利用讀/寫指針,對文件進行讀或?qū)憽?lt;/p><p> 文件的保護是系統(tǒng)為用戶的文件提供保護,以達到這幾個目標:防止沒有權(quán)限的用戶存取文件,防止冒名頂替存取文件,防止以
67、不正確的方式使用文件。</p><p> 2.3.5 用戶接口</p><p> 用戶接口是提供給用戶使用的接口,用戶可以通過該接口取得操作系統(tǒng)的服務。設置用戶接口的目的是為了方便用戶直接或者間接地控制自己的作業(yè),用戶可以通過這個接口向作業(yè)發(fā)出命令以控制作業(yè)的運行。用戶接口分為聯(lián)機用戶接口和脫機用戶接口,聯(lián)機用戶接口又分為命令行接口和圖形接口。</p><p>
68、; 命令行接口是由一組鍵盤操作命令組成,當用戶在終端或者控制臺上每次鍵入一條命令后,系統(tǒng)便立即轉(zhuǎn)入命令解釋程序,對這條命令加以解釋并執(zhí)行該命令。</p><p> 圖形接口是為了解決用戶必須熟記各種命令的名字和格式的問題而生的,其采用圖形化的操作界面,用非常容易識別的各種圖標來將系統(tǒng)的各項功能、各種應用程序和文件形象逼真地表現(xiàn)出來,用戶不需要用鍵盤輸入命令,只需要用鼠標點擊就能夠控制操作系統(tǒng)。</p&g
69、t;<p> 聯(lián)機用戶接口都能夠?qū)崿F(xiàn)用戶與進程的實時交互,而脫機用戶接口則是為批處理作業(yè)的用戶提供的,故也可以稱作是批處理用戶接口。批處理作業(yè)的用戶不能直接與自己的作業(yè)交互作用,只能委托系統(tǒng)代替用戶對作業(yè)進行控制和干預。</p><p> 2.3.6 程序接口</p><p> 程序接口是為用戶程序在執(zhí)行中訪問系統(tǒng)資源而設置的,是用戶所編制的程序取得操作系統(tǒng)服務的唯一
70、途徑。</p><p> 程序接口的本質(zhì)是一組系統(tǒng)調(diào)用,每一個系統(tǒng)調(diào)用都是一個能完成特定功能的子程序,每當應用程序要求OS提供某種服務時,便調(diào)用具有相應功能的系統(tǒng)調(diào)用。</p><p> 早期版本的系統(tǒng)調(diào)用都是用匯編語言提供的, 只有在用匯編語言書寫的程序中才能直接使用系統(tǒng)調(diào)用;但在高級語言以及C語言中,玩玩提供了與各系統(tǒng)調(diào)用一一對應的庫函數(shù),這樣應用程序就可以通過調(diào)用對應的庫函數(shù)來來
71、使用系統(tǒng)調(diào)用。</p><p> 與早期操作系統(tǒng)系統(tǒng)調(diào)用不同的是,近幾年的操作系統(tǒng)中,系統(tǒng)調(diào)用本省已經(jīng)采用C語言進行編寫,并以函數(shù)的形式提供,所以,在C語言編制的程序中,可以直接使用系統(tǒng)調(diào)用。</p><p> 第3章 32位保護模式介紹</p><p> 80386以上的X86處理器有兩種工作模式:實模式和保護模式。盡管實模式下的80386的功能要大大超過
72、先前處理器(8086/8088,80186,80286),但只有在保護模式下,80386才能真正發(fā)揮作用。</p><p> 3.1 32位保護模式簡述</p><p> 32位保護模式相對于實模式的優(yōu)勢體現(xiàn)在這幾個方面:在保護模式下,80386處理器的32根地址線全部有效,可尋址達到4GB的物理地址空間;保護模式所獨有的存儲器分段管理機制和可選的存儲器分頁管理機制,前者為存儲器的共
73、享和保護提供了硬件支持,后者為實現(xiàn)虛擬存儲器提供了硬件支持;支持多任務,在保護模式下,80386處理器給予系統(tǒng)開發(fā)者極大便利,可以快速地進行任務切換和保護任務環(huán)境;80386處理器有4個特權(quán)級和完善的特權(quán)檢查機制,既能高效的實現(xiàn)資源共享,又能保證代碼及數(shù)據(jù)的安全和保密,以及任務之間的隔離;在保護模式下可以用虛擬8086方式來執(zhí)行8086程序。</p><p> 3.1.1 存儲管理機制和地址轉(zhuǎn)換機制簡介<
74、;/p><p> 為了對存儲器中的程序和數(shù)據(jù)實現(xiàn)保護和共享提供硬件支持,80386在保護模式下采用了擴充的存儲器分段管理機制;為了對實現(xiàn)虛擬存儲器提供硬件支持,80386在保護模式下提供了可選的存儲器分頁管理機制。這些存儲管理機制有80386的存儲器管理部件MMU實現(xiàn)。</p><p> 由于本文實現(xiàn)的操作系統(tǒng)沒有使用更高級更復雜的分頁管理機制,所以在這里重點介紹與分段有關的地址轉(zhuǎn)換,不詳
75、細介紹分頁管理機制。</p><p> 保護模式下的虛擬存儲器由大小可變的存儲塊構(gòu)成,這樣的存儲塊稱為段。80386采用稱為描述符的數(shù)據(jù)來描述段的位置、大小、使用情況以及其他屬性。虛擬存儲器的地址(即“邏輯地址”)由指示描述符的“選擇子”和“偏移地址”兩部分構(gòu)成,這樣的地址集合稱為“虛擬地址空間”。</p><p> 很顯然,只有在物理存儲器中的程序才能運行,只有在物理存儲器中的數(shù)據(jù)才
76、能訪問,一切的地址都要映射到物理地址,二維的虛擬地址(“選擇子”+“偏移地址”)必須轉(zhuǎn)換成為一維的物理地址(實際內(nèi)存的地址)。由于物理地址遠小于虛擬地址,所以只有一部分虛擬地址空間能真正映射到物理存儲器。</p><p> 因為每一個任務都有一個虛擬地址空間,而為了避免多個并行任務的多個虛擬空間直接映射到一個物理地址空間,所以,采用線性地址空間隔離虛擬地址空間和物理地址空間。線性地址空間和物理地址空間對等,大小
77、一樣。</p><p> 如圖3-1所示。80386分兩步實現(xiàn)虛擬地址空間到物理地址空間的映射。第一步是通過虛擬地址中的“選擇子”在描述符表GDT中查詢得到段描述符,在段描述符中記載著這個段的段起始地址(在8086的實模式下,段起始地址是直接存儲在段寄存器中),再結(jié)合“偏移地址”計算得到線性地址。第二步是可選的,如果采用分頁機制,就用MMU來將線性地址映射為物理地址,從而尋址結(jié)束。所以,如果沒有采用分頁管理機制
78、,線性地址空間等于物理地址空間。</p><p> 3.1.2 保護機制</p><p> 為了支持多任務,對各任務實施保護是必要的。保護機制必須有效地實現(xiàn)不同任務之間的保護和同一任務內(nèi)的保護</p><p> 3.1.2.1不同任務之間的保護</p><p> 不同任務之間的保護中的一個重要方面是應用程序之間的保護。是通過把每個任
79、務放置在不同的虛擬地址空間的方法來實現(xiàn)任務與任務之間的隔離,達到應用程序之間保護的目的。虛擬地址到物理地址的映射函數(shù)在每個任務中單獨定義,隨著任務的切換,映射函數(shù)也隨之切換,這樣的機制使得任務A和任務B擁有相同的虛擬地址空間,但是映射到物理空間后,就是兩塊獨立不相干的區(qū)域。這樣,兩個不同的任務,盡管虛擬存儲單元地址相同,但實際的物理存儲單元地址不同。</p><p> 3.1.2.2同一任務內(nèi)的保護</p
80、><p> 實現(xiàn)在同一任務內(nèi)的保護需要達到那些目標?怎樣實現(xiàn)在同一任務內(nèi)的保護?為什么要實現(xiàn)在同一任務內(nèi)的保護?實現(xiàn)在同一任務內(nèi)的保護,主要目標是區(qū)分不同的段的特權(quán)級。在一個任務內(nèi),可以定義四種執(zhí)行特權(quán)級別,用于限制對任務中段進行訪問。一般會按照不同的段中的數(shù)據(jù)和代碼的可信任程度,給予不同的段不同的特權(quán)級。例如:具有最高特權(quán)級別的數(shù)據(jù),只能由最可信任的代碼訪問;給不重要的數(shù)據(jù)段和代碼段分配比較低的特權(quán)級別;具有最低
81、特權(quán)級別的數(shù)據(jù),可以被任何特權(quán)級的代碼訪問到。</p><p> 特權(quán)級的典型用法如圖3-2所示,把操作系統(tǒng)的核心放在0級,操作系統(tǒng)的其余部分(操作系統(tǒng)外圍程序)放在1級,中間軟件(數(shù)據(jù)庫和辦公軟件)放在2級,用戶的應用程序放在3級。這樣安排,使得在0級的操作系統(tǒng)核心有權(quán)利訪問所有特權(quán)級中的所有數(shù)據(jù)段和代碼段,在1級的操作系統(tǒng)其余部分有權(quán)利訪問除了0級意外的所有代碼段和數(shù)據(jù)段,而在3級中的應用程序只能訪問本任務
82、的數(shù)據(jù)段和代碼段。</p><p> 3.1.2.3實現(xiàn)“同一任務內(nèi)的保護”所依賴的機制</p><p> 在程序運行中,32位保護模式依靠CPL(current privilege level)、DPL(descriptor privilege level)和RPL(requestor privilege level)三種數(shù)據(jù)結(jié)構(gòu)來實施任務內(nèi)的特權(quán)級保護,這三種數(shù)據(jù)結(jié)構(gòu)如圖3-3所示
83、。</p><p> 這些數(shù)據(jù)結(jié)構(gòu)的具體解釋如下:</p><p> 當前特權(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
84、;如果是一些“應用軟件”(如數(shù)據(jù)庫、辦公軟件),那么、特權(quán)級為2;如果是用戶程序,那么特權(quán)級為3。</p><p> 描述符特權(quán)級DPL。每個段的段描述符中,用描述符特權(quán)級DPL表示此段的特權(quán)級。程序運行時,數(shù)據(jù)段的DPL在每次被訪問時受到檢查,以確定程序是否有權(quán)訪問該數(shù)據(jù)段。</p><p> 請求特權(quán)級RPL。數(shù)據(jù)段的段選擇子中的最低2位為請求特權(quán)級RPL,數(shù)據(jù)段總是被代碼訪問的,
85、此時RPL將受到檢測,以確定此次訪問是否合法。只有當代碼段的CPL的級別不低于RPL的時候,才能是訪問成功進行。數(shù)據(jù)段中設置RPL是為了防止特權(quán)級低的程序訪問特權(quán)級高的數(shù)據(jù)段。</p><p> 一般情況下,數(shù)據(jù)段選擇子中的RPL和此段描述符中的DPL是相等的,由于在程序運行中,要訪問數(shù)據(jù)時,總是先裝入選擇子,再由選擇子找到段描述符,然后由段描述符找到對應段,所以,提前在裝入選擇子這一環(huán)用RPL進行特權(quán)級保護檢
86、查,使得保護機制更加快捷。當一個程序訪問數(shù)據(jù)段的時候,其CPL的級別必須高于或等于被訪問段的DPL。例如,CPL為0的代碼段對任何特權(quán)級的數(shù)據(jù)段都可以訪問,而CPL為1的代碼段只能訪問特權(quán)級為1、2、3的數(shù)據(jù)段。</p><p> 在程序運行過程當中,除了數(shù)據(jù)讀寫操作時進行界限檢查之外,當遇到轉(zhuǎn)移指令JMP、中斷指令INT、電泳指令CALL、和返回指令RET時,可能因為涉及到不同的段,所以也會進行界限檢查。如果
87、是段內(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í)行C
88、ALL、INT指令相反,此時,CPL的數(shù)值可能會增大,級別降低。</p><p> 最后,需要注意的是:</p><p> DPL是“段描述符”提供的,每個段都對應著一個DPL,而CPL和RPL是“選擇子”提供的。</p><p> CPL對應于代碼段,而RPL對應于數(shù)據(jù)段</p><p> 一個代碼段處于運行過程中,沒有發(fā)生段間轉(zhuǎn)移
89、時,CPL總是等于DPL</p><p> CPL為0時,可以訪問任何RPL級別的數(shù)據(jù)段,CPL為1時,只能訪問RPL為1、2、3的數(shù)據(jù)段。。。以此類推。</p><p> 3.2 分段管理機制</p><p> 上面講到存儲管理機制和虛擬地址映射物理地址機制,那在32位保護模式下,操作系統(tǒng)具體怎樣實現(xiàn)這些機制?這節(jié)的主要內(nèi)容就是:介紹保護模式下的段定義,以
90、及怎樣實現(xiàn)由“段選擇子”+“段內(nèi)偏移”構(gòu)成的“二維虛擬地址”轉(zhuǎn)換為“一維的線性地址”。</p><p> 3.2.1 段定義</p><p> 段是實現(xiàn)虛擬地址到線性地址轉(zhuǎn)換機制的基礎。在保護方式下,每個段由這三個參數(shù)定義:段基地址,段界限,段屬性。通俗點說,“段基地址”規(guī)定了這個段在“線性地址空間”中的開始地址,“段界限”規(guī)定這個段的大小,值得注意的是,在80386保護模式下,段界
91、限僅僅由20位來表示,大家都知道,20位能表達的最大地址是1M,如果是以1B作為單位的話,一個段的最大地址范圍是1M*1B = 1MB,顯然無法滿足程序的需求,而且也體現(xiàn)不出保護模式相對于實模式的優(yōu)越性,為了解決這個問題,在“段屬性”(定義段的三個元素之一)中用一位“粒度位”(用符號G標記)來規(guī)定20位段界限的單位,如果G=0表示以1B作為單位,段大小的范圍為1B-1M;如果G=1表示以4KB為單位,段大小的范圍為4KB-4GB?!岸螌?/p>
92、性”規(guī)定了段的主要特性,例如上面提到的“粒度位”,以及段的特權(quán)級,這里不詳細介紹。</p><p> 3.2.2 虛擬地址到線性地址的轉(zhuǎn)換機制</p><p> 由上一個小節(jié)可知,由“二維的虛擬地址”到“一維的線性地址”的轉(zhuǎn)換機制可由圖3-4所示。</p><p> 3.2.3 虛擬地址到線性地址的轉(zhuǎn)換機制所需要的數(shù)據(jù)結(jié)構(gòu)和寄存器</p>&
93、lt;p> 3.2.3.1段描述符</p><p> 上面講到三個參數(shù)可以定義一個段,這三個參數(shù)由一個8字節(jié) = 64位的數(shù)據(jù)結(jié)構(gòu)保存,這個數(shù)據(jù)結(jié)構(gòu)稱作“段描述符”(顧名思義),其中32位表示“段基地址”,20位表示“段界限”,剩下的12位表示“段屬性”。為了和上一代的機器兼容,32位的“段基地址”和20位的“段界限”并非連續(xù)存放,具體怎樣存放,“段屬性”中哪一位代表什么,限于論文篇幅,這里不詳細介紹。
94、</p><p> 3.2.3.2(全局和局部)段描述符表</p><p> 一個任務會涉及到多個段,每個段需要一個描述符來描述,為了方便管理和查詢,80386將描述符組織成線性表,由描述符組成的線性表稱作“描述符表”。</p><p> 在80386中一共有三種“描述符”表:全局描述符表GDT(Global Descriptor Table),局部描述符表L
95、DT(Local Descriptor Table),中斷描述符表IDT(Interrupt Descriptor Table)。在整個系統(tǒng)中,全局描述符表GDT和中斷描述符表IDT只有一張,局部描述符表由多張,每個任務可以有一張自己的LDT。</p><p> 每個描述符表本身形成一個特殊的數(shù)據(jù)段,這樣的特殊數(shù)據(jù)段最多可以包含8096個描述符。</p><p> 每個任務的“局部描述
96、符表LDT”含有該任務自己的代碼段、數(shù)據(jù)段、和堆棧段的描述符,也包含該任務所使用的一些“門描述符”,如:“任務門”和“調(diào)用門”門描述符。隨著任務的切換,系統(tǒng)當前的“局部描述符表LDT”也隨之切換。</p><p> “全局描述符表GDT”含有每一個任務都有可能或者可以訪問的段的描述符,通常包括操作系統(tǒng)所使用的代碼段、數(shù)據(jù)段、堆棧段的描述符,也包含多種特殊數(shù)據(jù)段描述符,例如各個用于描述任務LDT的特殊數(shù)據(jù)段。在任
97、務切換時,不切換GDT。</p><p> 通過LDT可以使各個任務私有的各個段與其他任務隔離,從而達到受保護的目的。通過GDT可以使各個任務都需要使用的段能夠被共享。</p><p> 3.2.3.3段選擇子</p><p> 由上面的內(nèi)容可知“虛擬地址”是“二維”的,那是哪兩個“維”呢?“虛擬地址”是由那兩個東西組成的呢?在實模式中,這兩個東西一個是保存在
98、段寄存器(CS,DS,SS。。)中的段地址,另一個是段內(nèi)偏移地址,此時線性地址 = (段寄存器)*16 + 段內(nèi)偏移。而在保護模式中,“段選擇子”代替了保存在段寄存器(CS,DS,SS。。)中的段地址。通俗點說,“段選擇子”是一個索引,一個指針,它可以幫助操作系統(tǒng)在“段描述符表”中查找到定義這個段的“段描述符”,從而得到“段描述符”中的“段基地址”,其實到了這個時候,這個“段描述符”中的“段基址地址”,就和實模式中的段寄存器(CS,DS
99、,SS。。)中的段地址有點相似了,但是不同點在于計算線性地址的方式,實模式中,線性地址 = (段寄存器)*16 + 段內(nèi)偏移,而保護模式中,線性地址 = 段基地址 + 偏移。</p><p> “段選擇子”長16位,第0位和第1位十請求特權(quán)級RPL(Request Privilege Level)用于特權(quán)檢查;第2位是引用描述符表指示位TI(Table Indirector),TI = 0指示從全局描述符表GD
100、T中讀取段描述符,TI = 1指示從局部描述符表LDT中讀取段描述符;第3至15位一共13位用來指示“描述符索引”,由于每個描述符在描述符表中占據(jù)8個字節(jié),所以,如果屏蔽掉段選擇子的低三位(即令低三位為0),剛好可以得到當前描述符相對于第一個描述符的偏移地址,這或許是安排選擇子高13位作為“描述符索引”的原因。</p><p> 一共有13位作為選擇子的“描述符索引”,所以一個描述符表中,最多有8096個描述符
101、。</p><p> 所以,總結(jié)來說就是,“二維的虛擬地址” = “選擇子:偏移地址”,“選擇子”+“段描述符表”得到“段描述符”,從“段描述符”得到“段基地址”,由“段基地址”和“偏移地址”就可以就算出線性空間中的“一維的線性地址”。</p><p> 3.2.3.4段描述符高速緩沖寄存器</p><p> 從上述敘述可知,在保護模式下,每一次由“虛擬地址”
102、映射為“線性地址”時,都必須使用“選擇子”查詢“描述符表”來得到段描述符中的基地址。為了避免每一次存儲器訪問時,都要訪問描述符表,從80286開始,每個段寄存器都配有一個高速緩沖寄存器,稱之為“段描述符高速緩沖寄存器”或稱為“描述符投影寄存器”,這個寄存器的存在對程序員來說是不可見的。</p><p> 其工作原理為:每當把一個“選擇子”裝入到某個段寄存器時,處理器自動從描述符表中取出相應的描述符,把描述符中的
103、信息裝入到對應的高速緩沖寄存器中,此后在對該段訪問時,處理器都是用對應高速緩沖寄存器中的描述符信息,而不用再從描述符表中取描述符。而絕大多數(shù)情況下,對存儲器的訪問都是在“對應選擇子”裝入到段寄存器之后進行的,所以,使用段描述符高速緩沖寄存器可以得到很好的執(zhí)行效果。</p><p> 3.3 分段管理機制所依賴的兩類寄存器</p><p> 上面的內(nèi)容對80386的保護模式下的分段管理
104、機制做了詳細說明,但是有幾點疑問,CPU靠什么來控制這些機制的實施?例如,怎么設置CPU,讓其運行在實模式下或者保護模式下?還有,上面提到了可以保存8096個描述符的描述符表,這個表到底在內(nèi)存的哪里,CPU怎么找到保存這個表的特殊數(shù)據(jù)段?</p><p> 要回答這些問題,必須搞明白的一點是,為了使得分段管理機制的實施,CPU必須知道人們到底想讓它“干什么”和“怎么干”。而通過設置“控制寄存器”,可以讓CPU知
105、道自己“走什么路”,按什么方式運行;通過設置“系統(tǒng)地址寄存器”,可以給予CPU一些實施這個機制必須的數(shù)據(jù)。</p><p> 下面就對這兩類寄存器進行詳細說明。</p><p> 3.3.1 控制寄存器</p><p> 控制寄存器包含四個32位的寄存器,分別命名為CR0,CR1,CR2,CR3。</p><p> CR0的第0位為
106、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(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---一個簡易操作系統(tǒng)的實現(xiàn)
- 一個簡易操作系統(tǒng)的實現(xiàn)畢業(yè)論文
- 畢業(yè)論文---一個簡易操作系統(tǒng)的實現(xiàn)
- android操作系統(tǒng)畢業(yè)論文
- 操作系統(tǒng)遠程考試系統(tǒng)的設計與實現(xiàn)畢業(yè)論文
- 一個教學用微內(nèi)核操作系統(tǒng)的設計與實現(xiàn).pdf
- 畢業(yè)論文---一個圖書管理系統(tǒng)的設計與是實現(xiàn)
- 畢業(yè)論文—— 一個物流商品運輸系統(tǒng)的設計與實現(xiàn)
- 畢業(yè)論文—— 一個物流商品運輸系統(tǒng)的設計與實現(xiàn)
- 一個小型實時操作系統(tǒng)的設計與應用.pdf
- 畢業(yè)論文----淺談linux操作系統(tǒng)的安全
- 淺談linux操作系統(tǒng)的安全畢業(yè)論文
- 畢業(yè)論文—— 一個簡單的網(wǎng)上教務系統(tǒng)模型的設計與實現(xiàn)
- 畢業(yè)論文--操作系統(tǒng)輔助教學平臺的設計與實現(xiàn)
- 智能手機的操作系統(tǒng)畢業(yè)論文
- 自己寫一個最簡單的嵌入式操作系統(tǒng)
- 礦主井裝載操作系統(tǒng)的設計畢業(yè)論文
- 智能手機的操作系統(tǒng)畢業(yè)論文
- 畢業(yè)論文—— 一個動態(tài)文學網(wǎng)站的設計與實現(xiàn)
- 一個教學用嵌入式實時操作系統(tǒng)的開發(fā).pdf
評論
0/150
提交評論