2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  摘 要</b></p><p>  作為學(xué)習(xí)操作系統(tǒng)的新手,商用的操作系統(tǒng)設(shè)計(jì)復(fù)雜,代碼量大,不適合作為學(xué)習(xí)的藍(lán)本,如果能夠從零開(kāi)始開(kāi)發(fā)一個(gè)小型的操作系統(tǒng)雛形,不但可以全面深入地了解操作系統(tǒng)的工作原理,還可以為讀大型開(kāi)源操作系統(tǒng)的代碼積累經(jīng)驗(yàn)。</p><p>  這個(gè)取名為MyOS的從頭開(kāi)始開(kāi)發(fā)的系統(tǒng)雖然結(jié)構(gòu)簡(jiǎn)單,但是具備了內(nèi)存管

2、理、多任務(wù)控制、任務(wù)切換、基本輸入輸出管理并且運(yùn)行在32位保護(hù)模式下,在用戶接口方面,它采用的是圖形界面和命令行界面混合的方式來(lái)與用戶交互,在程序接口方面,設(shè)計(jì)了部分API,主要是針對(duì)于圖形顯示和計(jì)時(shí)器兩方面,本文利用這些API,實(shí)現(xiàn)了“貪吃蛇”、“時(shí)鐘計(jì)時(shí)器”兩個(gè)例子程序。</p><p>  本文首先介紹操作系統(tǒng)運(yùn)行所依賴的硬件系統(tǒng)組成,然后重點(diǎn)地介紹了操作系統(tǒng)的基本特征和主要功能,接著詳細(xì)地說(shuō)明了80386

3、以上Intel CPU所運(yùn)行的貫穿整個(gè)操作系統(tǒng)開(kāi)發(fā)的32位保護(hù)模式,接下來(lái)簡(jiǎn)述了MyOS的開(kāi)發(fā)環(huán)境和語(yǔ)言,以及MyOS的基本運(yùn)行原理,然后重點(diǎn)介紹了MyOS的設(shè)計(jì)與實(shí)現(xiàn),最后敘述MyOS的程序接口API,以及利用MyOS中的API設(shè)計(jì)的應(yīng)用程序。</p><p>  關(guān)鍵詞:操作系統(tǒng),運(yùn)行原理,32保護(hù)模式</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 國(guó)內(nèi)外研究現(xiàn)狀2</p><p>  1.3 主要研究?jī)?nèi)容3</p><p>  第2章 操作系統(tǒng)運(yùn)行環(huán)境及運(yùn)行原理簡(jiǎn)述4</p><p>  2.1 計(jì)算機(jī)系統(tǒng)硬件組成簡(jiǎn)述4</p><p>  2.1.1 總線4</p><p>  2.1.2 I/

13、O設(shè)備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 處理機(jī)管理7</p><p>  2.3.2 存儲(chǔ)器管理7</p><p>  2.3.3 設(shè)備管理8</p><p>  2.3.4 文件管理8</p>

15、<p>  2.3.5 用戶接口9</p><p>  2.3.6 程序接口9</p><p>  第3章 32位保護(hù)模式介紹11</p><p>  3.1 32位保護(hù)模式簡(jiǎn)述11</p><p>  3.1.1 存儲(chǔ)管理機(jī)制和地址轉(zhuǎn)換機(jī)制簡(jiǎn)介11</p><p>  3.1.2

16、保護(hù)機(jī)制12</p><p>  3.2 分段管理機(jī)制15</p><p>  3.2.1 段定義15</p><p>  3.2.2 虛擬地址到線性地址的轉(zhuǎn)換機(jī)制15</p><p>  3.2.3 虛擬地址到線性地址的轉(zhuǎn)換機(jī)制所需要的數(shù)據(jù)結(jié)構(gòu)和寄存器16</p><p>  3.3 分段管理機(jī)制

17、所依賴的兩類寄存器17</p><p>  3.3.1 控制寄存器17</p><p>  3.3.2 系統(tǒng)地址寄存器18</p><p>  3.4 系統(tǒng)段描述符、門(mén)描述符、任務(wù)狀態(tài)段20</p><p>  3.4.1 系統(tǒng)段描述符20</p><p>  3.4.2 門(mén)描述符21</p

18、><p>  3.4.3 任務(wù)狀態(tài)段TSS22</p><p>  3.5 控制轉(zhuǎn)移23</p><p>  3.5.1 任務(wù)內(nèi)無(wú)特權(quán)級(jí)變換的轉(zhuǎn)移23</p><p>  3.5.2 任務(wù)內(nèi)不同特權(quán)級(jí)的變換24</p><p>  3.5.3 任務(wù)間控制轉(zhuǎn)移----“任務(wù)切換”26</p>

19、<p>  第4章 MyOS具體設(shè)計(jì)與實(shí)現(xiàn)28</p><p>  4.1 MyOS的開(kāi)發(fā)語(yǔ)言、開(kāi)發(fā)流程以及開(kāi)發(fā)環(huán)境簡(jiǎn)述28</p><p>  4.2 MyOS運(yùn)行原理簡(jiǎn)述29</p><p>  4.2.1 引導(dǎo)扇區(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)核設(shè)計(jì)與實(shí)現(xiàn)31</p><p>  4.3.1 內(nèi)存管理31</p><p>  4.3.2 定時(shí)器設(shè)計(jì)36</p><p>  4.3.3 FIFO緩沖區(qū)設(shè)計(jì)41</p><p>  4.3.4 基本輸入輸出管理44&l

21、t;/p><p>  4.3.5 多任務(wù)管理47</p><p>  4.3.6 圖形界面的設(shè)計(jì)54</p><p>  4.3.7 編程接口API設(shè)計(jì)56</p><p>  第5章 利用MyOS的API編寫(xiě)程序并運(yùn)行60</p><p>  5.1 表秒計(jì)時(shí)器60</p><p&

22、gt;  5.2 游戲“貪吃蛇”61</p><p>  第6章 總結(jié)68</p><p><b>  參考文獻(xiàn)69</b></p><p><b>  致 謝70</b></p><p><b>  第1章 緒論</b></p><p&

23、gt;  1.1 選題背景和意義</p><p>  眾所周知,一個(gè)成型的操作系統(tǒng)往往非常復(fù)雜,因?yàn)榭紤]到操作系統(tǒng)作為軟硬件橋梁的特殊地位,其看上去比一般的軟件系統(tǒng)更加的難以理解,因?yàn)槠浜诵牟糠滞S多直接針對(duì)CPU,內(nèi)存和I/O端口的操作。現(xiàn)在有許多公開(kāi)源代碼的操作系統(tǒng),可供隨時(shí)下載和閱讀,但是如果沒(méi)有些許實(shí)際開(kāi)發(fā)的經(jīng)驗(yàn),往往會(huì)深陷代碼的汪洋大海中,“一葉障目,不見(jiàn)泰山”,并且這些代碼的細(xì)節(jié)之間經(jīng)?;ハ嚓P(guān)

24、聯(lián),要理解起來(lái)很不容易。而動(dòng)手開(kāi)發(fā)一個(gè)簡(jiǎn)易的操作系統(tǒng),從底層原理一步一步實(shí)現(xiàn)最基本和最簡(jiǎn)單的功能,到最后積累成一個(gè)簡(jiǎn)單的操作系統(tǒng)模型,最終達(dá)到為以后閱讀大型操作系統(tǒng)(例如Linux)的源代碼打下基礎(chǔ)的目的。</p><p>  作為一個(gè)計(jì)算機(jī)系并有志于從事計(jì)算機(jī)相關(guān)行業(yè)的大學(xué)生來(lái)說(shuō),很多本科時(shí)期計(jì)算機(jī)相關(guān)科目的學(xué)習(xí)都僅僅是“紙上談兵”,缺乏實(shí)際操作,更談不上實(shí)際應(yīng)用,這對(duì)以后的深入學(xué)習(xí)和長(zhǎng)期發(fā)展非常不利。例如:匯

25、編課程學(xué)習(xí)的大部分內(nèi)容都使用8086/8088的16位實(shí)模式作為學(xué)習(xí)藍(lán)本,而現(xiàn)在操作系統(tǒng)因?yàn)榇髢?nèi)存的使用, 基本全部是32位保護(hù)模式,雖然語(yǔ)法等基礎(chǔ)沒(méi)有變化,但是其32保護(hù)模式的架構(gòu)思想在匯編課程中卻沒(méi)有提及到;作為系統(tǒng)開(kāi)發(fā)利器的c語(yǔ)言,其課程學(xué)習(xí)只是掌握表面語(yǔ)法,如果沒(méi)有深入地應(yīng)用,沒(méi)有研究其在機(jī)器層面的原理,很多精髓都無(wú)法掌握,也就談不上真正掌握c語(yǔ)言;而對(duì)于學(xué)習(xí)操作系統(tǒng)本身,如果沒(méi)有閱讀經(jīng)典操作系統(tǒng)的源代碼或者嘗試去做系統(tǒng)開(kāi)發(fā)這方

26、面的實(shí)踐,對(duì)于其諸多概念和原理是無(wú)法深入理解的,只能停留在表面理解,無(wú)法做到心中有數(shù),就更談不上創(chuàng)新了。</p><p>  本文試圖通過(guò)這么一個(gè)“麻雀雖小,五臟俱全”操作系統(tǒng)的開(kāi)發(fā),達(dá)到復(fù)習(xí)并總結(jié)本科時(shí)期諸多科目的目的,包括:x86匯編語(yǔ)言,C語(yǔ)言,計(jì)算機(jī)組成原理,微機(jī)原理,數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng),而事實(shí)上,在基本完成畢設(shè),撰寫(xiě)論文之際,對(duì)這幾門(mén)課程的確有了更新更高層次的理解,很多當(dāng)時(shí)只是浮于表面的概念現(xiàn)在都能夠或

27、多或少地落實(shí)到代碼并能夠親自實(shí)現(xiàn)和完善,同時(shí)也初步具備了自己閱讀和分析大型操作系統(tǒng)源代碼的能力。</p><p>  1.2 國(guó)內(nèi)外研究現(xiàn)狀</p><p>  操作系統(tǒng)并不是與計(jì)算機(jī)硬件一起誕生的,它是在人們使用計(jì)算機(jī)的過(guò)程中,為了滿足兩大需求:提高資源利用率、增強(qiáng)計(jì)算機(jī)系統(tǒng)性能,伴隨著計(jì)算機(jī)技術(shù)本身及其應(yīng)用的日益發(fā)展,而逐步地形成和完善起來(lái)的。</p><p>

28、;  操作系統(tǒng)的發(fā)展經(jīng)歷了手工操作(無(wú)操作系統(tǒng))、批處理系統(tǒng)、多道程序系統(tǒng)、分時(shí)系統(tǒng)、實(shí)時(shí)系統(tǒng)、通用操作系統(tǒng)。如今,概念意義上的操作系統(tǒng)和通俗意義上的操作系統(tǒng)差距越來(lái)越大,通俗意義上的操作系統(tǒng)為了方便而把最普通的包和應(yīng)用程序的集合包括在操作系統(tǒng)內(nèi),而隨著操作系統(tǒng)的發(fā)展,一些功能更強(qiáng)的“第二類”操作系統(tǒng)軟件也被包括進(jìn)去。在今天,沒(méi)有圖形界面和各種文件瀏覽器已經(jīng)不能稱為一個(gè)真正的操作系統(tǒng)了。</p><p>  另一

29、方面,操作系統(tǒng)的發(fā)展和計(jì)算機(jī)硬件的發(fā)展緊密聯(lián)系,而從計(jì)算機(jī)硬件發(fā)展的角度來(lái)看,操作系統(tǒng)的發(fā)展經(jīng)過(guò)了大型機(jī)時(shí)代操作系統(tǒng)、小型機(jī)時(shí)代操作系統(tǒng)(Unix)和個(gè)人計(jì)算機(jī)時(shí)代操作系統(tǒng)。</p><p>  大型機(jī)時(shí)代。早期的操作系統(tǒng)非常多樣化,生產(chǎn)商生產(chǎn)出針對(duì)各自硬件的系統(tǒng)。每一個(gè)操作系統(tǒng)都有很不同的命令模式、操作過(guò)程和調(diào)試工具,即使它們來(lái)自同一個(gè)生產(chǎn)商。最能 反映這一狀況的是,廠家每生產(chǎn)一臺(tái)新的機(jī)器都會(huì)配備一套新的操作系

30、統(tǒng)。這種情況一直持續(xù)到二十世紀(jì)六十年代IBM公司開(kāi)發(fā)了System/360系列機(jī)器。盡管這些機(jī)器在性能上有明顯的差異,但是他們有統(tǒng)一的操作系統(tǒng)——OS/360。OS/360的成功陸續(xù)地催化出MFT、MVT、SVS、MVS、MVS/XA、MVS/ESA、OS/390和z/OS。 </p><p>  小型機(jī)和UNIX的崛起。UNIX操作系統(tǒng)是由AT&T公司開(kāi)發(fā)出來(lái)的。由于它的早期版本是完全免費(fèi)的,可以輕易獲

31、得并隨意修改,所以它得到了廣泛的接受。后來(lái),它成為開(kāi)發(fā)小型機(jī)操作系統(tǒng)的起點(diǎn)。由于早期的廣泛應(yīng)用,它已經(jīng)成為的操作系統(tǒng)的典范。不過(guò),它始終屬于AT&T公司,只有那些能負(fù)擔(dān)的起許可費(fèi)的企業(yè)才用得起,這限制了它的應(yīng)用范圍。 </p><p>  早期的操作系統(tǒng)是可以被用戶軟件所利用的功能的集合。一些有能力的公司發(fā)展更好的系統(tǒng),但他們不支持其他公司硬件的特性。 </p><p>  60年

32、代末70年代初,幾種硬件支持相似的或提供端口的軟件可在多種系統(tǒng)上運(yùn)行。早期的系統(tǒng)已經(jīng)利用微程序來(lái)在他們的系統(tǒng)上實(shí)現(xiàn)功能。事實(shí)上,除了360/165和360/168外,360/40之后的大部分360系列的機(jī)器都實(shí)行微程序設(shè)計(jì)。 </p><p>  個(gè)人計(jì)算機(jī)時(shí)代。Apple, DOS 和以后微型處理器的發(fā)展使計(jì)算機(jī)的應(yīng)用普及至中小企及個(gè)人愛(ài)好者。而計(jì)算機(jī)的普及又推動(dòng)了硬件組件公共接口的發(fā)展(如S-100,SS-5

33、0,Apple II,ISA和PCI總線),并逐漸地要求有一種“標(biāo)準(zhǔn)”的操作系統(tǒng)去控制它們。在這些早期的計(jì)算機(jī)中,主要的操作系統(tǒng)是8080/8085/Z-80 CPU用的Digital Research’s CP/M-80,它建立在數(shù)碼設(shè)備公司(Digital Research)幾個(gè)操作系統(tǒng)的基礎(chǔ)上,主要針對(duì)PDP-11架構(gòu)。在此基礎(chǔ)上又產(chǎn)生了MS-DOS(或IBM公司的PC-DOS)。這些計(jì)算機(jī)在ROM(只讀存儲(chǔ)器)都有一個(gè)小小的啟動(dòng)

34、程序,可以把操作系統(tǒng)從磁盤(pán)裝載到內(nèi)存。IBM-PC系列的BIOS是這一思想的延伸。自1981年第一臺(tái)IBM-PC誕生以來(lái),BIOS的功能得到不斷地增強(qiáng)。 </p><p>  隨著顯示設(shè)備和處理其成本的降低,很多操作系統(tǒng)都開(kāi)始提供圖形用戶界面。如:許多UNIX提供的X Window一類的系統(tǒng)、微軟的Windows系統(tǒng)、蘋(píng)果公司的Mac系統(tǒng)和IBM公司的OS/2等。最初的圖形用戶界面是由Xerox Palo Alt

35、o研究中心70年代初期研發(fā)出來(lái)的,之后被許多公司模仿,繼承發(fā)展。</p><p>  1.3 主要研究?jī)?nèi)容</p><p>  實(shí)現(xiàn)一個(gè)能夠在裸機(jī)上運(yùn)行的簡(jiǎn)易的操作系統(tǒng)。</p><p>  該操作系統(tǒng)在保護(hù)模式下運(yùn)行,是一個(gè)多任務(wù)的操作系統(tǒng),可以進(jìn)行任務(wù)調(diào)度以及任務(wù)之間的通信。</p><p>  該操作系統(tǒng)具有自己的硬盤(pán)驅(qū)動(dòng)程序,并實(shí)現(xiàn)

36、一個(gè)簡(jiǎn)易的文件系統(tǒng),能夠?qū)崿F(xiàn)基本的文件操作系統(tǒng)調(diào)用。</p><p>  該操作系統(tǒng)具有簡(jiǎn)單的內(nèi)存管理功能。</p><p>  該操作系統(tǒng)使用鍵盤(pán)和顯示器作為基本的輸入輸出系統(tǒng)。</p><p>  該操作系統(tǒng)具有簡(jiǎn)易的命令行風(fēng)格的用戶界面,實(shí)現(xiàn)一些主要的操作系統(tǒng)命令。</p><p>  在時(shí)間允許的情況下,進(jìn)一步改善用戶界面,能夠?qū)崿F(xiàn)一

37、個(gè)簡(jiǎn)易的圖形用戶界面,可以使用鼠標(biāo)進(jìn)行操作,并能夠輸出聲音(選做)。 </p><p>  將已完成的簡(jiǎn)易操作系統(tǒng)制作成軟盤(pán)鏡像文件,可在虛擬機(jī)中運(yùn)行。</p><p>  將已完成的簡(jiǎn)易操作系統(tǒng)制作成光盤(pán)在真機(jī)上運(yùn)行(選做)。</p><p><b>  撰寫(xiě)畢業(yè)論文。</b></p><p><b>  答

38、辯。</b></p><p>  第2章 操作系統(tǒng)運(yùn)行環(huán)境及運(yùn)行原理簡(jiǎn)述</p><p>  2.1 計(jì)算機(jī)系統(tǒng)硬件組成簡(jiǎn)述</p><p>  如圖2-1所示,這是一個(gè)計(jì)算機(jī)系統(tǒng)硬件組成的簡(jiǎn)單模型。</p><p><b>  2.1.1 總線</b></p><p>  貫穿

39、整個(gè)系統(tǒng)的是一組電子管道,稱作“總線”,它攜帶信息字節(jié)并負(fù)責(zé)在各個(gè)部件之間傳遞。通??偩€被設(shè)計(jì)成傳送定長(zhǎng)的字節(jié)塊,也就是“字”(word)。一個(gè)字的字節(jié)數(shù)(被稱為“字長(zhǎng)”)是一個(gè)基本的系統(tǒng)參數(shù),在各個(gè)系統(tǒng)中可能不相同?,F(xiàn)在的很多機(jī)器字長(zhǎng)有的是4個(gè)字節(jié)(即32bit),有的是8個(gè)字節(jié)(即64bit)。[1]</p><p>  2.1.2 I/O設(shè)備</p><p>  輸入/輸出設(shè)備(I

40、/O設(shè)備)是系統(tǒng)與外部世界的聯(lián)系通道。如圖2-1所示,示例系統(tǒng)包括4個(gè)I/O設(shè)備:作為用戶輸入的鍵盤(pán)和鼠標(biāo),作為用戶輸出的顯示器,以及用于長(zhǎng)期存儲(chǔ)數(shù)據(jù)和程序的磁盤(pán)驅(qū)動(dòng)。</p><p>  每個(gè)I/O設(shè)備都通過(guò)一個(gè)“控制器”或者“適配器”與I/O總線相連。“控制器”和“適配器”之間的主要區(qū)別是它們的封裝方式。“控制器”是置于I/O設(shè)備本身或者系統(tǒng)的主板上的芯片組內(nèi),而“適配器”是是一塊插在主板插槽上的卡。但是這兩

41、者的任務(wù)一樣的,它們都負(fù)責(zé)在I/O總線和I/O設(shè)備自檢傳遞和翻譯信息。</p><p><b>  2.1.3 主存</b></p><p>  主存是一個(gè)臨時(shí)存儲(chǔ)設(shè)備,在處理器執(zhí)行程序時(shí),用來(lái)存放程序和程序所處理的數(shù)據(jù)。</p><p>  從物理組成的角度來(lái)說(shuō),主存是一組動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器芯片組成的,從邏輯來(lái)說(shuō),主存就是一個(gè)線性的字節(jié)數(shù)組

42、,每一個(gè)字節(jié)都有唯一的地址,這些地址從0開(kāi)始。一般來(lái)說(shuō),組成程序的每條機(jī)器指令都由不同數(shù)量的字節(jié)構(gòu)成,與C程序變量相對(duì)應(yīng)的數(shù)據(jù)項(xiàng)的大小是根據(jù)類型變化的。</p><p>  2.1.4 處理器 </p><p>  中央處理單元(CPU),簡(jiǎn)稱處理器,是解釋和執(zhí)行存儲(chǔ)在主存中指令的引擎。處理器的核心是一個(gè)字長(zhǎng)的存儲(chǔ)設(shè)備,稱為程序計(jì)數(shù)器(PC),在任何時(shí)刻,PC都指向主存中的某條機(jī)器語(yǔ)言指

43、令。</p><p>  從系統(tǒng)通電開(kāi)始,直到系統(tǒng)斷電,處理器都一直在不斷地執(zhí)行程序計(jì)數(shù)器所指向的指令,再更新程序計(jì)數(shù)器,使其指向下一條需要執(zhí)行的指令,這條指令不一定和上一條執(zhí)行的指令相鄰。處理器看上去是按照一個(gè)非常簡(jiǎn)單的指令執(zhí)行模型來(lái)操作的,這個(gè)模型是由指令集結(jié)構(gòu)決定的。</p><p>  這樣的簡(jiǎn)單操作并不多,而且操作是圍繞主存、寄存器文件、和算術(shù)邏輯單元(ALU)進(jìn)行的。寄存器文件

44、是一個(gè)小的但是高速的存儲(chǔ)設(shè)備,由一些1字長(zhǎng)的寄存器組成,每個(gè)寄存器有唯一的名字和特別的使用方式。而ALU則負(fù)責(zé)計(jì)算,計(jì)算數(shù)據(jù)和地址。</p><p>  下面是一些簡(jiǎn)單操作的例子,可以通過(guò)這些例子更好地了解CPU的各個(gè)部件在CPU工作的作用和工作原理。CPU在執(zhí)行的要求下,可能會(huì)執(zhí)行以下操作:</p><p>  加載:把一個(gè)字節(jié)(或者一個(gè)字)從主存復(fù)制到寄存器,寄存器里原來(lái)的值被覆蓋。&

45、lt;/p><p>  存儲(chǔ):把一個(gè)字節(jié)(或者一個(gè)字)從寄存器復(fù)制到主存的某個(gè)位置,以覆蓋內(nèi)存中該位置原來(lái)的值。</p><p>  計(jì)算:把兩個(gè)寄存器的內(nèi)容復(fù)制到ALU,ALU對(duì)這兩個(gè)字做算術(shù)運(yùn)算,并將結(jié)果存在一個(gè)寄存器中,寄存器里原來(lái)的值被覆蓋。</p><p>  跳轉(zhuǎn):從指令中抽取一個(gè)字,并將這個(gè)字復(fù)制到程序計(jì)數(shù)器(PC)中,實(shí)現(xiàn)跳轉(zhuǎn)。</p>&

46、lt;p>  處理器看上去指示它的指令集結(jié)構(gòu)的簡(jiǎn)單實(shí)現(xiàn),但是實(shí)際上現(xiàn)代處理器使用了非常復(fù)雜的機(jī)制來(lái)加速程序的執(zhí)行。所以,可以這樣區(qū)分“處理器的指令集結(jié)構(gòu)”和“微體系結(jié)構(gòu)”:“指令集結(jié)構(gòu)描述的是每條機(jī)器代碼指令的效果”,而“微體系結(jié)構(gòu)”描述的是處理器實(shí)際上是如何實(shí)現(xiàn)的。</p><p>  2.2 操作系統(tǒng)的基本特性</p><p>  操作系統(tǒng)的基本特性有并發(fā)性、虛擬性、共享性、異

47、步性,其中,并發(fā)性和虛擬性是操作系統(tǒng)最重要的兩個(gè)特性。</p><p><b>  2.2.1并發(fā)性</b></p><p>  并行性和并發(fā)性是既相似又有區(qū)別的兩個(gè)概念,并行性是指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)生,而并發(fā)性是指兩個(gè)或者多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生。</p><p>  為了使多個(gè)程序能夠在系統(tǒng)中并發(fā)執(zhí)行,系統(tǒng)必須為每個(gè)程序建立進(jìn)

48、程(Process)。簡(jiǎn)單來(lái)說(shuō),進(jìn)程是指在系統(tǒng)中能獨(dú)立運(yùn)行并作為資源分配的基本單位,由一組機(jī)器指令、數(shù)據(jù)和堆棧等組成,是一個(gè)能獨(dú)立運(yùn)行的活動(dòng)實(shí)體。多個(gè)進(jìn)程之間可以并發(fā)執(zhí)行和交換信息。一個(gè)進(jìn)程在運(yùn)行時(shí)需要一定的資源,如CPU、存儲(chǔ)空間以及I/O設(shè)備等。</p><p>  操作系統(tǒng)中程序的并發(fā)執(zhí)行將使系統(tǒng)復(fù)雜化,以至于在系統(tǒng)中必須增設(shè)若干新的功能模塊,分別用于對(duì)CPU、內(nèi)存、I/O設(shè)備以及文件系統(tǒng)等重要資源進(jìn)行管理

49、,并控制好系統(tǒng)中各個(gè)進(jìn)程的運(yùn)行。</p><p>  長(zhǎng)期以來(lái),進(jìn)程都是操作系統(tǒng)中可以擁有資源并作為獨(dú)立運(yùn)行的基本單位。當(dāng)一個(gè)進(jìn)程因故不能繼續(xù)運(yùn)行,操作系統(tǒng)便調(diào)度另一個(gè)程序運(yùn)行。但是由于進(jìn)程擁有自己的資源,故使得調(diào)度付出的代價(jià)非常大,所以人們引入比進(jìn)程更小的單位——線程。通常一個(gè)進(jìn)程中包含若干個(gè)線程,它們可以利用進(jìn)程所擁有的資源。在引入線程的OS中,通常都是把進(jìn)程作為分配資源的基本單位,而把線程作為獨(dú)立運(yùn)行和獨(dú)立

50、調(diào)度的基本單位。由于線程比進(jìn)程更小,基本上不擁有系統(tǒng)轉(zhuǎn),所以對(duì)地進(jìn)行調(diào)度所花費(fèi)的系統(tǒng)資源很少,從而能夠更高效地提高系統(tǒng)內(nèi)多個(gè)程序并發(fā)執(zhí)行的程度。</p><p><b>  2.2.2共享性</b></p><p>  在操作系統(tǒng)中,所謂共享,是指系統(tǒng)中的資源可供內(nèi)村中并發(fā)執(zhí)行的進(jìn)程共同使用,相應(yīng)的,把這種西苑共同使用成為資源共享,或者是資源復(fù)用。由于資源的屬性不同,

51、進(jìn)程對(duì)資源的復(fù)用方式也不同,主要實(shí)現(xiàn)資源共享的方式有以下兩種:互斥共享方式和同時(shí)訪問(wèn)方式。</p><p><b>  2.2.3虛擬性</b></p><p>  操作系統(tǒng)中的所謂“虛擬性”,是指通過(guò)虛擬技術(shù)把一個(gè)物理實(shí)體變?yōu)槿舾蛇壿嬌系膶?duì)應(yīng)物。物理實(shí)體是實(shí)際存在的,而邏輯對(duì)應(yīng)物是現(xiàn)對(duì)于用戶來(lái)說(shuō)的,是用戶感覺(jué)到的可以使用的東西。這個(gè)技術(shù)的實(shí)現(xiàn)主要有兩種途徑,時(shí)分復(fù)用

52、技術(shù)和空分復(fù)用技術(shù)。</p><p>  通俗地理解,時(shí)分復(fù)用技術(shù)就是將物理設(shè)備的使用機(jī)會(huì)按時(shí)間劃分為許多小段,各個(gè)用戶(或進(jìn)程)在調(diào)度進(jìn)程的調(diào)度下,交替使用這些使用設(shè)備的機(jī)會(huì),常見(jiàn)的例子有:系統(tǒng)通過(guò)對(duì)處理機(jī)進(jìn)行分片,然后把時(shí)間片分配給各個(gè)進(jìn)程,實(shí)現(xiàn)了把一臺(tái)物理上的處理機(jī)虛擬位多臺(tái)邏輯上的處理機(jī),從而在每臺(tái)邏輯處理機(jī)上運(yùn)行一道程序。通常把用戶感覺(jué)到的處理機(jī)成為虛擬處理機(jī)。</p><p>

53、  而空分復(fù)用技術(shù)則被用來(lái)提高存儲(chǔ)空間的利用率,常見(jiàn)的有虛擬磁盤(pán)技術(shù)和虛擬存儲(chǔ)器技術(shù)。</p><p><b>  2.2.4異步性</b></p><p>  在多道程序下允許多個(gè)進(jìn)程并發(fā)執(zhí)行,但是只有進(jìn)程獲得所需的資源后方能執(zhí)行。在單處理機(jī)環(huán)境下,由于系統(tǒng)只有一臺(tái)處理機(jī),所有每個(gè)時(shí)刻只能有一個(gè)進(jìn)程運(yùn)行,其他的必須等待處理機(jī)。當(dāng)正在執(zhí)行的進(jìn)程提出某種資源要求時(shí),此項(xiàng)

54、資源如果得不到滿足,這個(gè)進(jìn)程就無(wú)法繼續(xù)下去。可見(jiàn)一個(gè)進(jìn)程在系統(tǒng)中的運(yùn)行不可能是“一帆風(fēng)順”的,而是以“走走停?!钡姆绞竭\(yùn)行,而且這種方式在進(jìn)程運(yùn)行之前是不可預(yù)見(jiàn)的,具有隨機(jī)性,并且由于各個(gè)任務(wù)、系統(tǒng)、機(jī)器的之間的差異,進(jìn)程通常以人們不可預(yù)知的速度向前推進(jìn),這就是進(jìn)程的“異步性”。</p><p>  為了應(yīng)對(duì)這種進(jìn)程的“異步性”,為了讓系統(tǒng)中的各個(gè)進(jìn)程都不出錯(cuò)地執(zhí)行完自己的任務(wù),操作系統(tǒng)必須具備完善的進(jìn)程同步機(jī)制

55、,使得進(jìn)程之間能夠協(xié)調(diào)地利用好共享的資源,獲得最后想要的結(jié)果。</p><p>  2.3 操作系統(tǒng)的主要功能</p><p>  操作系統(tǒng)的主要任務(wù),是為多道程序的運(yùn)行提供良好的運(yùn)行環(huán)境,以保證運(yùn)行在系統(tǒng)中的各個(gè)進(jìn)程能夠有序、高效地運(yùn)行,并能夠最大程度地提高系統(tǒng)中各項(xiàng)資源的利用率,而考慮到現(xiàn)在的系統(tǒng)和人之間的交互愈發(fā)頻繁,操作系統(tǒng)還需提供給用戶的使用接口和給程序員的編程接口。</

56、p><p>  所以,操作系統(tǒng)應(yīng)該具備這樣幾個(gè)主要功能:處理機(jī)管理,存儲(chǔ)器管理,設(shè)備管理,文件管理,用戶接口和程序接口。而隨著網(wǎng)絡(luò)的普及,現(xiàn)代操作系統(tǒng)一般都具備網(wǎng)絡(luò)功能。</p><p>  2.3.1 處理機(jī)管理</p><p>  在未引入線程的系統(tǒng)中,處理機(jī)的分配和運(yùn)行都是以進(jìn)程為基本單位,因而對(duì)處理機(jī)的管理可以歸納為對(duì)進(jìn)程的管理:創(chuàng)建和撤銷進(jìn)程(進(jìn)程控制),對(duì)

57、各個(gè)進(jìn)程的運(yùn)行進(jìn)行協(xié)調(diào)(進(jìn)程同步),進(jìn)實(shí)現(xiàn)進(jìn)程之間的信息交換(線程通信),按照一定的算法將處理機(jī)的處理時(shí)間分配給進(jìn)程。</p><p>  其中進(jìn)程同步包括“進(jìn)程互斥”和“進(jìn)程同步”,“進(jìn)程互斥”是指各個(gè)進(jìn)程在對(duì)臨界資源進(jìn)行訪問(wèn)時(shí),應(yīng)采用互斥方式,“進(jìn)程同步”是指相互合作去完成某項(xiàng)任務(wù)的進(jìn)程之間,必須遵循某種順序,操作系統(tǒng)中有同步機(jī)構(gòu)對(duì)它們的執(zhí)行次序加以協(xié)調(diào)。</p><p>  2.3.

58、2 存儲(chǔ)器管理</p><p>  存儲(chǔ)器管理管理的主要任務(wù)是為多道程序的運(yùn)行提供良好的環(huán)境,方便用戶使用存儲(chǔ)器,提高存儲(chǔ)器的利用率以及能從邏輯上擴(kuò)充內(nèi)存。主要功能包括:內(nèi)存分配、內(nèi)存保護(hù)、地址映射、內(nèi)存擴(kuò)充。</p><p>  其中,為了實(shí)現(xiàn)內(nèi)存分配,在內(nèi)存分配機(jī)制中應(yīng)該有這樣的設(shè)計(jì)和功能:用于實(shí)現(xiàn)內(nèi)存分配的數(shù)據(jù)結(jié)構(gòu),內(nèi)存分配功能,內(nèi)存回收功能。</p><p&g

59、t;  而內(nèi)存保護(hù)的的主要任務(wù)是保證讓每個(gè)程序都只能在屬于自己的內(nèi)存空間運(yùn)行,不能訪問(wèn)到別的程序的空間,更不能夠訪問(wèn)到操作系統(tǒng)的內(nèi)存空間。此時(shí),讓內(nèi)存保護(hù)得以實(shí)現(xiàn),必須設(shè)置合理的內(nèi)存保護(hù)機(jī)制。</p><p>  內(nèi)存映射功能主要是實(shí)現(xiàn)將程序的“邏輯地址”或“相對(duì)地址”映射為內(nèi)存的“物理地址”。</p><p>  內(nèi)存擴(kuò)充并非是擴(kuò)大物理內(nèi)存的實(shí)際容量,而是借助于虛擬存儲(chǔ)技術(shù),從邏輯上擴(kuò)充

60、內(nèi)存容量,使用戶能夠使用的內(nèi)存容量大于實(shí)際的物理內(nèi)存容量。內(nèi)存擴(kuò)充機(jī)制主要包括:請(qǐng)求調(diào)入功能和置換功能。</p><p>  2.3.3 設(shè)備管理</p><p>  設(shè)備管理用于管理計(jì)算機(jī)系統(tǒng)中所有的外圍設(shè)備,而設(shè)備管理的主要任務(wù)是:完成進(jìn)程提出的I/O請(qǐng)求;為進(jìn)程分配其所需要的I/O設(shè)備;提高CPU和I/O設(shè)備的利用率。</p><p>  為了實(shí)現(xiàn)上述任務(wù),

61、設(shè)備管理應(yīng)具備緩沖管理、設(shè)備分配、設(shè)備處理和虛擬設(shè)備等功能。</p><p>  緩沖管理集中要解決的矛盾是,CPU運(yùn)行的高速型和外圍設(shè)備的低速性。而隨著CPU速率的不斷提高,而I/O又具備一定的確定性,所以這個(gè)矛盾更加嚴(yán)重地降低了CPU的利用率。為了提高CPU的利用率,可以在I/O設(shè)備和CPU之間設(shè)置緩沖區(qū),用于實(shí)現(xiàn)提高CPU的利用率和系統(tǒng)吞吐量。</p><p>  設(shè)備分配的任務(wù)是根

62、據(jù)進(jìn)程的I/O請(qǐng)求和資源情況,按照某種分配策略,為進(jìn)程分配所需要的設(shè)備。如果在I/O設(shè)備和CPU之間還存在著設(shè)備控制器和I/O通道,還要未分配出去的設(shè)備分配對(duì)應(yīng)的控制器和通道。為了實(shí)現(xiàn)設(shè)備分配,系統(tǒng)中應(yīng)設(shè)置設(shè)備控制表、控制器控制表等數(shù)據(jù)結(jié)構(gòu),用于記錄設(shè)備及控制器的標(biāo)示符和狀態(tài),系統(tǒng)應(yīng)該以這些數(shù)據(jù)結(jié)構(gòu)的實(shí)時(shí)數(shù)據(jù)為依據(jù),了解制定設(shè)備當(dāng)前是否可用,是否忙碌,以供進(jìn)行設(shè)備分配。</p><p>  設(shè)備處理其實(shí)就是設(shè)備驅(qū)

63、動(dòng)程序,基本任務(wù)是用于實(shí)現(xiàn)CPU和設(shè)備控制器之間的通信,即由CPU向設(shè)備控制器發(fā)I/O命令,要求其完成指定的I/O操作;反之,由CPU接受從控制器發(fā)來(lái)的中斷請(qǐng)求,并迅速給予響應(yīng)和相應(yīng)的處理。</p><p>  2.3.4 文件管理</p><p>  在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,一般將程序和數(shù)據(jù)以文件的形式存儲(chǔ)在磁盤(pán)或者磁帶上,供所有的或者某些指定的用戶使用。為了達(dá)到這個(gè)目的,操作系統(tǒng)必須配置

64、文件管理機(jī)構(gòu),文件管理的主要任務(wù)是對(duì)用戶文件盒系統(tǒng)文件進(jìn)行管理,以方便用戶使用,同時(shí)需要保證文件的安全性。所以,文件管理的功能主要有:對(duì)文件存儲(chǔ)管理空間的管理、目錄管理、文件的讀/寫(xiě)管理、文件的共享與保護(hù)。</p><p>  為了實(shí)現(xiàn)文件存儲(chǔ)空間的管理,系統(tǒng)應(yīng)設(shè)置相應(yīng)的數(shù)據(jù)結(jié)構(gòu),用于記錄文件存儲(chǔ)空間的使用情況,以供分配存儲(chǔ)空間時(shí)作為參考。系統(tǒng)還應(yīng)具有對(duì)存儲(chǔ)空間進(jìn)行分配和回收的功能。為了提高存儲(chǔ)空間的利用率,通常

65、采用離散分配方式對(duì)存儲(chǔ)空間進(jìn)行分配,以減少外村零頭,以盤(pán)塊為基本分配單位,盤(pán)塊的大小通常為1—8KB。</p><p>  為了實(shí)現(xiàn)用戶能方便的在外存上找到自己的文件,通常由文件系統(tǒng)為每個(gè)文件建立一個(gè)目錄項(xiàng)。目錄項(xiàng)包括文件名、文件屬性、文件在磁盤(pán)上的物理位置等等描述文件的信息。而若干個(gè)目錄項(xiàng)又可以構(gòu)成一個(gè)目錄文件。目錄管理的主要任務(wù)是為每個(gè)文件建立目錄項(xiàng),并對(duì)所有的目錄項(xiàng)進(jìn)行有效的管理,以方便按名存取,即用戶只需

66、要提供文件名就可以對(duì)該文件進(jìn)行存取。</p><p>  文件的讀/寫(xiě)管理實(shí)際上是簡(jiǎn)化用戶對(duì)文件的操作,當(dāng)用戶想要打開(kāi)、添加、修改、刪除一個(gè)文件時(shí),操作系統(tǒng)先根據(jù)用戶給出的文件名去檢索文件目錄,從中獲得文件在外存的位置,然后利用讀/寫(xiě)指針,對(duì)文件進(jìn)行讀或?qū)憽?lt;/p><p>  文件的保護(hù)是系統(tǒng)為用戶的文件提供保護(hù),以達(dá)到這幾個(gè)目標(biāo):防止沒(méi)有權(quán)限的用戶存取文件,防止冒名頂替存取文件,防止以

67、不正確的方式使用文件。</p><p>  2.3.5 用戶接口</p><p>  用戶接口是提供給用戶使用的接口,用戶可以通過(guò)該接口取得操作系統(tǒng)的服務(wù)。設(shè)置用戶接口的目的是為了方便用戶直接或者間接地控制自己的作業(yè),用戶可以通過(guò)這個(gè)接口向作業(yè)發(fā)出命令以控制作業(yè)的運(yùn)行。用戶接口分為聯(lián)機(jī)用戶接口和脫機(jī)用戶接口,聯(lián)機(jī)用戶接口又分為命令行接口和圖形接口。</p><p>

68、;  命令行接口是由一組鍵盤(pán)操作命令組成,當(dāng)用戶在終端或者控制臺(tái)上每次鍵入一條命令后,系統(tǒng)便立即轉(zhuǎn)入命令解釋程序,對(duì)這條命令加以解釋并執(zhí)行該命令。</p><p>  圖形接口是為了解決用戶必須熟記各種命令的名字和格式的問(wèn)題而生的,其采用圖形化的操作界面,用非常容易識(shí)別的各種圖標(biāo)來(lái)將系統(tǒng)的各項(xiàng)功能、各種應(yīng)用程序和文件形象逼真地表現(xiàn)出來(lái),用戶不需要用鍵盤(pán)輸入命令,只需要用鼠標(biāo)點(diǎn)擊就能夠控制操作系統(tǒng)。</p&g

69、t;<p>  聯(lián)機(jī)用戶接口都能夠?qū)崿F(xiàn)用戶與進(jìn)程的實(shí)時(shí)交互,而脫機(jī)用戶接口則是為批處理作業(yè)的用戶提供的,故也可以稱作是批處理用戶接口。批處理作業(yè)的用戶不能直接與自己的作業(yè)交互作用,只能委托系統(tǒng)代替用戶對(duì)作業(yè)進(jìn)行控制和干預(yù)。</p><p>  2.3.6 程序接口</p><p>  程序接口是為用戶程序在執(zhí)行中訪問(wèn)系統(tǒng)資源而設(shè)置的,是用戶所編制的程序取得操作系統(tǒng)服務(wù)的唯一

70、途徑。</p><p>  程序接口的本質(zhì)是一組系統(tǒng)調(diào)用,每一個(gè)系統(tǒng)調(diào)用都是一個(gè)能完成特定功能的子程序,每當(dāng)應(yīng)用程序要求OS提供某種服務(wù)時(shí),便調(diào)用具有相應(yīng)功能的系統(tǒng)調(diào)用。</p><p>  早期版本的系統(tǒng)調(diào)用都是用匯編語(yǔ)言提供的, 只有在用匯編語(yǔ)言書(shū)寫(xiě)的程序中才能直接使用系統(tǒng)調(diào)用;但在高級(jí)語(yǔ)言以及C語(yǔ)言中,玩玩提供了與各系統(tǒng)調(diào)用一一對(duì)應(yīng)的庫(kù)函數(shù),這樣應(yīng)用程序就可以通過(guò)調(diào)用對(duì)應(yīng)的庫(kù)函數(shù)來(lái)來(lái)

71、使用系統(tǒng)調(diào)用。</p><p>  與早期操作系統(tǒng)系統(tǒng)調(diào)用不同的是,近幾年的操作系統(tǒng)中,系統(tǒng)調(diào)用本省已經(jīng)采用C語(yǔ)言進(jìn)行編寫(xiě),并以函數(shù)的形式提供,所以,在C語(yǔ)言編制的程序中,可以直接使用系統(tǒng)調(diào)用。</p><p>  第3章 32位保護(hù)模式介紹</p><p>  80386以上的X86處理器有兩種工作模式:實(shí)模式和保護(hù)模式。盡管實(shí)模式下的80386的功能要大大超過(guò)

72、先前處理器(8086/8088,80186,80286),但只有在保護(hù)模式下,80386才能真正發(fā)揮作用。</p><p>  3.1 32位保護(hù)模式簡(jiǎn)述</p><p>  32位保護(hù)模式相對(duì)于實(shí)模式的優(yōu)勢(shì)體現(xiàn)在這幾個(gè)方面:在保護(hù)模式下,80386處理器的32根地址線全部有效,可尋址達(dá)到4GB的物理地址空間;保護(hù)模式所獨(dú)有的存儲(chǔ)器分段管理機(jī)制和可選的存儲(chǔ)器分頁(yè)管理機(jī)制,前者為存儲(chǔ)器的共

73、享和保護(hù)提供了硬件支持,后者為實(shí)現(xiàn)虛擬存儲(chǔ)器提供了硬件支持;支持多任務(wù),在保護(hù)模式下,80386處理器給予系統(tǒng)開(kāi)發(fā)者極大便利,可以快速地進(jìn)行任務(wù)切換和保護(hù)任務(wù)環(huán)境;80386處理器有4個(gè)特權(quán)級(jí)和完善的特權(quán)檢查機(jī)制,既能高效的實(shí)現(xiàn)資源共享,又能保證代碼及數(shù)據(jù)的安全和保密,以及任務(wù)之間的隔離;在保護(hù)模式下可以用虛擬8086方式來(lái)執(zhí)行8086程序。</p><p>  3.1.1 存儲(chǔ)管理機(jī)制和地址轉(zhuǎn)換機(jī)制簡(jiǎn)介<

74、;/p><p>  為了對(duì)存儲(chǔ)器中的程序和數(shù)據(jù)實(shí)現(xiàn)保護(hù)和共享提供硬件支持,80386在保護(hù)模式下采用了擴(kuò)充的存儲(chǔ)器分段管理機(jī)制;為了對(duì)實(shí)現(xiàn)虛擬存儲(chǔ)器提供硬件支持,80386在保護(hù)模式下提供了可選的存儲(chǔ)器分頁(yè)管理機(jī)制。這些存儲(chǔ)管理機(jī)制有80386的存儲(chǔ)器管理部件MMU實(shí)現(xiàn)。</p><p>  由于本文實(shí)現(xiàn)的操作系統(tǒng)沒(méi)有使用更高級(jí)更復(fù)雜的分頁(yè)管理機(jī)制,所以在這里重點(diǎn)介紹與分段有關(guān)的地址轉(zhuǎn)換,不詳

75、細(xì)介紹分頁(yè)管理機(jī)制。</p><p>  保護(hù)模式下的虛擬存儲(chǔ)器由大小可變的存儲(chǔ)塊構(gòu)成,這樣的存儲(chǔ)塊稱為段。80386采用稱為描述符的數(shù)據(jù)來(lái)描述段的位置、大小、使用情況以及其他屬性。虛擬存儲(chǔ)器的地址(即“邏輯地址”)由指示描述符的“選擇子”和“偏移地址”兩部分構(gòu)成,這樣的地址集合稱為“虛擬地址空間”。</p><p>  很顯然,只有在物理存儲(chǔ)器中的程序才能運(yùn)行,只有在物理存儲(chǔ)器中的數(shù)據(jù)才

76、能訪問(wèn),一切的地址都要映射到物理地址,二維的虛擬地址(“選擇子”+“偏移地址”)必須轉(zhuǎn)換成為一維的物理地址(實(shí)際內(nèi)存的地址)。由于物理地址遠(yuǎn)小于虛擬地址,所以只有一部分虛擬地址空間能真正映射到物理存儲(chǔ)器。</p><p>  因?yàn)槊恳粋€(gè)任務(wù)都有一個(gè)虛擬地址空間,而為了避免多個(gè)并行任務(wù)的多個(gè)虛擬空間直接映射到一個(gè)物理地址空間,所以,采用線性地址空間隔離虛擬地址空間和物理地址空間。線性地址空間和物理地址空間對(duì)等,大小

77、一樣。</p><p>  如圖3-1所示。80386分兩步實(shí)現(xiàn)虛擬地址空間到物理地址空間的映射。第一步是通過(guò)虛擬地址中的“選擇子”在描述符表GDT中查詢得到段描述符,在段描述符中記載著這個(gè)段的段起始地址(在8086的實(shí)模式下,段起始地址是直接存儲(chǔ)在段寄存器中),再結(jié)合“偏移地址”計(jì)算得到線性地址。第二步是可選的,如果采用分頁(yè)機(jī)制,就用MMU來(lái)將線性地址映射為物理地址,從而尋址結(jié)束。所以,如果沒(méi)有采用分頁(yè)管理機(jī)制

78、,線性地址空間等于物理地址空間。</p><p>  3.1.2 保護(hù)機(jī)制</p><p>  為了支持多任務(wù),對(duì)各任務(wù)實(shí)施保護(hù)是必要的。保護(hù)機(jī)制必須有效地實(shí)現(xiàn)不同任務(wù)之間的保護(hù)和同一任務(wù)內(nèi)的保護(hù)</p><p>  3.1.2.1不同任務(wù)之間的保護(hù)</p><p>  不同任務(wù)之間的保護(hù)中的一個(gè)重要方面是應(yīng)用程序之間的保護(hù)。是通過(guò)把每個(gè)任

79、務(wù)放置在不同的虛擬地址空間的方法來(lái)實(shí)現(xiàn)任務(wù)與任務(wù)之間的隔離,達(dá)到應(yīng)用程序之間保護(hù)的目的。虛擬地址到物理地址的映射函數(shù)在每個(gè)任務(wù)中單獨(dú)定義,隨著任務(wù)的切換,映射函數(shù)也隨之切換,這樣的機(jī)制使得任務(wù)A和任務(wù)B擁有相同的虛擬地址空間,但是映射到物理空間后,就是兩塊獨(dú)立不相干的區(qū)域。這樣,兩個(gè)不同的任務(wù),盡管虛擬存儲(chǔ)單元地址相同,但實(shí)際的物理存儲(chǔ)單元地址不同。</p><p>  3.1.2.2同一任務(wù)內(nèi)的保護(hù)</p

80、><p>  實(shí)現(xiàn)在同一任務(wù)內(nèi)的保護(hù)需要達(dá)到那些目標(biāo)?怎樣實(shí)現(xiàn)在同一任務(wù)內(nèi)的保護(hù)?為什么要實(shí)現(xiàn)在同一任務(wù)內(nèi)的保護(hù)?實(shí)現(xiàn)在同一任務(wù)內(nèi)的保護(hù),主要目標(biāo)是區(qū)分不同的段的特權(quán)級(jí)。在一個(gè)任務(wù)內(nèi),可以定義四種執(zhí)行特權(quán)級(jí)別,用于限制對(duì)任務(wù)中段進(jìn)行訪問(wèn)。一般會(huì)按照不同的段中的數(shù)據(jù)和代碼的可信任程度,給予不同的段不同的特權(quán)級(jí)。例如:具有最高特權(quán)級(jí)別的數(shù)據(jù),只能由最可信任的代碼訪問(wèn);給不重要的數(shù)據(jù)段和代碼段分配比較低的特權(quán)級(jí)別;具有最低

81、特權(quán)級(jí)別的數(shù)據(jù),可以被任何特權(quán)級(jí)的代碼訪問(wèn)到。</p><p>  特權(quán)級(jí)的典型用法如圖3-2所示,把操作系統(tǒng)的核心放在0級(jí),操作系統(tǒng)的其余部分(操作系統(tǒng)外圍程序)放在1級(jí),中間軟件(數(shù)據(jù)庫(kù)和辦公軟件)放在2級(jí),用戶的應(yīng)用程序放在3級(jí)。這樣安排,使得在0級(jí)的操作系統(tǒng)核心有權(quán)利訪問(wèn)所有特權(quán)級(jí)中的所有數(shù)據(jù)段和代碼段,在1級(jí)的操作系統(tǒng)其余部分有權(quán)利訪問(wèn)除了0級(jí)意外的所有代碼段和數(shù)據(jù)段,而在3級(jí)中的應(yīng)用程序只能訪問(wèn)本任務(wù)

82、的數(shù)據(jù)段和代碼段。</p><p>  3.1.2.3實(shí)現(xiàn)“同一任務(wù)內(nèi)的保護(hù)”所依賴的機(jī)制</p><p>  在程序運(yùn)行中,32位保護(hù)模式依靠CPL(current privilege level)、DPL(descriptor privilege level)和RPL(requestor privilege level)三種數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)施任務(wù)內(nèi)的特權(quán)級(jí)保護(hù),這三種數(shù)據(jù)結(jié)構(gòu)如圖3-3所示

83、。</p><p>  這些數(shù)據(jù)結(jié)構(gòu)的具體解釋如下:</p><p>  當(dāng)前特權(quán)級(jí)CPL。當(dāng)前代碼段的選擇子中,最低2位為特權(quán)級(jí)CPL,這表示當(dāng)前正在運(yùn)行的程序的特權(quán)級(jí)。CPL是程序本身的性質(zhì)所決定的:如果是“操作系統(tǒng)和操作系統(tǒng)核心程序”(如存儲(chǔ)器管理程序、任務(wù)調(diào)度程序、訪問(wèn)控制程序),那么,特權(quán)級(jí)為0;如果是“操作系統(tǒng)外圍的系統(tǒng)程序”(如緩沖區(qū)分配程序、外設(shè)驅(qū)動(dòng)程序),那么,特權(quán)級(jí)為1

84、;如果是一些“應(yīng)用軟件”(如數(shù)據(jù)庫(kù)、辦公軟件),那么、特權(quán)級(jí)為2;如果是用戶程序,那么特權(quán)級(jí)為3。</p><p>  描述符特權(quán)級(jí)DPL。每個(gè)段的段描述符中,用描述符特權(quán)級(jí)DPL表示此段的特權(quán)級(jí)。程序運(yùn)行時(shí),數(shù)據(jù)段的DPL在每次被訪問(wèn)時(shí)受到檢查,以確定程序是否有權(quán)訪問(wèn)該數(shù)據(jù)段。</p><p>  請(qǐng)求特權(quán)級(jí)RPL。數(shù)據(jù)段的段選擇子中的最低2位為請(qǐng)求特權(quán)級(jí)RPL,數(shù)據(jù)段總是被代碼訪問(wèn)的,

85、此時(shí)RPL將受到檢測(cè),以確定此次訪問(wèn)是否合法。只有當(dāng)代碼段的CPL的級(jí)別不低于RPL的時(shí)候,才能是訪問(wèn)成功進(jìn)行。數(shù)據(jù)段中設(shè)置RPL是為了防止特權(quán)級(jí)低的程序訪問(wèn)特權(quán)級(jí)高的數(shù)據(jù)段。</p><p>  一般情況下,數(shù)據(jù)段選擇子中的RPL和此段描述符中的DPL是相等的,由于在程序運(yùn)行中,要訪問(wèn)數(shù)據(jù)時(shí),總是先裝入選擇子,再由選擇子找到段描述符,然后由段描述符找到對(duì)應(yīng)段,所以,提前在裝入選擇子這一環(huán)用RPL進(jìn)行特權(quán)級(jí)保護(hù)檢

86、查,使得保護(hù)機(jī)制更加快捷。當(dāng)一個(gè)程序訪問(wèn)數(shù)據(jù)段的時(shí)候,其CPL的級(jí)別必須高于或等于被訪問(wèn)段的DPL。例如,CPL為0的代碼段對(duì)任何特權(quán)級(jí)的數(shù)據(jù)段都可以訪問(wèn),而CPL為1的代碼段只能訪問(wèn)特權(quán)級(jí)為1、2、3的數(shù)據(jù)段。</p><p>  在程序運(yùn)行過(guò)程當(dāng)中,除了數(shù)據(jù)讀寫(xiě)操作時(shí)進(jìn)行界限檢查之外,當(dāng)遇到轉(zhuǎn)移指令JMP、中斷指令I(lǐng)NT、電泳指令CALL、和返回指令RET時(shí),可能因?yàn)樯婕暗讲煌亩?,所以也?huì)進(jìn)行界限檢查。如果

87、是段內(nèi)轉(zhuǎn)移,則保護(hù)模式會(huì)檢查這些指令的目標(biāo)地址是否超出了當(dāng)前代碼段的界限,如果是段間轉(zhuǎn)移,則會(huì)對(duì)目標(biāo)端的特權(quán)級(jí)進(jìn)行檢查,只有CPL級(jí)別低于或者等于目標(biāo)端的DPL時(shí),才能實(shí)現(xiàn)轉(zhuǎn)移,也就是說(shuō),轉(zhuǎn)移,總是往高級(jí)別或者相同級(jí)別的目標(biāo)段進(jìn)行。如此一來(lái),出現(xiàn)了CPL和DPL狀態(tài)不同的情況,這種情況產(chǎn)生在異常中斷和調(diào)用INT指令、CALL指令的時(shí)候,此時(shí),CPL改成DPL的值,CPL數(shù)值減小,級(jí)別提高。但是,當(dāng)執(zhí)行RET、IRET指令時(shí),情況和執(zhí)行C

88、ALL、INT指令相反,此時(shí),CPL的數(shù)值可能會(huì)增大,級(jí)別降低。</p><p>  最后,需要注意的是:</p><p>  DPL是“段描述符”提供的,每個(gè)段都對(duì)應(yīng)著一個(gè)DPL,而CPL和RPL是“選擇子”提供的。</p><p>  CPL對(duì)應(yīng)于代碼段,而RPL對(duì)應(yīng)于數(shù)據(jù)段</p><p>  一個(gè)代碼段處于運(yùn)行過(guò)程中,沒(méi)有發(fā)生段間轉(zhuǎn)移

89、時(shí),CPL總是等于DPL</p><p>  CPL為0時(shí),可以訪問(wèn)任何RPL級(jí)別的數(shù)據(jù)段,CPL為1時(shí),只能訪問(wèn)RPL為1、2、3的數(shù)據(jù)段。。。以此類推。</p><p>  3.2 分段管理機(jī)制</p><p>  上面講到存儲(chǔ)管理機(jī)制和虛擬地址映射物理地址機(jī)制,那在32位保護(hù)模式下,操作系統(tǒng)具體怎樣實(shí)現(xiàn)這些機(jī)制?這節(jié)的主要內(nèi)容就是:介紹保護(hù)模式下的段定義,以

90、及怎樣實(shí)現(xiàn)由“段選擇子”+“段內(nèi)偏移”構(gòu)成的“二維虛擬地址”轉(zhuǎn)換為“一維的線性地址”。</p><p>  3.2.1 段定義</p><p>  段是實(shí)現(xiàn)虛擬地址到線性地址轉(zhuǎn)換機(jī)制的基礎(chǔ)。在保護(hù)方式下,每個(gè)段由這三個(gè)參數(shù)定義:段基地址,段界限,段屬性。通俗點(diǎn)說(shuō),“段基地址”規(guī)定了這個(gè)段在“線性地址空間”中的開(kāi)始地址,“段界限”規(guī)定這個(gè)段的大小,值得注意的是,在80386保護(hù)模式下,段界

91、限僅僅由20位來(lái)表示,大家都知道,20位能表達(dá)的最大地址是1M,如果是以1B作為單位的話,一個(gè)段的最大地址范圍是1M*1B = 1MB,顯然無(wú)法滿足程序的需求,而且也體現(xiàn)不出保護(hù)模式相對(duì)于實(shí)模式的優(yōu)越性,為了解決這個(gè)問(wèn)題,在“段屬性”(定義段的三個(gè)元素之一)中用一位“粒度位”(用符號(hào)G標(biāo)記)來(lái)規(guī)定20位段界限的單位,如果G=0表示以1B作為單位,段大小的范圍為1B-1M;如果G=1表示以4KB為單位,段大小的范圍為4KB-4GB?!岸螌?/p>

92、性”規(guī)定了段的主要特性,例如上面提到的“粒度位”,以及段的特權(quán)級(jí),這里不詳細(xì)介紹。</p><p>  3.2.2 虛擬地址到線性地址的轉(zhuǎn)換機(jī)制</p><p>  由上一個(gè)小節(jié)可知,由“二維的虛擬地址”到“一維的線性地址”的轉(zhuǎn)換機(jī)制可由圖3-4所示。</p><p>  3.2.3 虛擬地址到線性地址的轉(zhuǎn)換機(jī)制所需要的數(shù)據(jù)結(jié)構(gòu)和寄存器</p>&

93、lt;p>  3.2.3.1段描述符</p><p>  上面講到三個(gè)參數(shù)可以定義一個(gè)段,這三個(gè)參數(shù)由一個(gè)8字節(jié) = 64位的數(shù)據(jù)結(jié)構(gòu)保存,這個(gè)數(shù)據(jù)結(jié)構(gòu)稱作“段描述符”(顧名思義),其中32位表示“段基地址”,20位表示“段界限”,剩下的12位表示“段屬性”。為了和上一代的機(jī)器兼容,32位的“段基地址”和20位的“段界限”并非連續(xù)存放,具體怎樣存放,“段屬性”中哪一位代表什么,限于論文篇幅,這里不詳細(xì)介紹。

94、</p><p>  3.2.3.2(全局和局部)段描述符表</p><p>  一個(gè)任務(wù)會(huì)涉及到多個(gè)段,每個(gè)段需要一個(gè)描述符來(lái)描述,為了方便管理和查詢,80386將描述符組織成線性表,由描述符組成的線性表稱作“描述符表”。</p><p>  在80386中一共有三種“描述符”表:全局描述符表GDT(Global Descriptor Table),局部描述符表L

95、DT(Local Descriptor Table),中斷描述符表IDT(Interrupt Descriptor Table)。在整個(gè)系統(tǒng)中,全局描述符表GDT和中斷描述符表IDT只有一張,局部描述符表由多張,每個(gè)任務(wù)可以有一張自己的LDT。</p><p>  每個(gè)描述符表本身形成一個(gè)特殊的數(shù)據(jù)段,這樣的特殊數(shù)據(jù)段最多可以包含8096個(gè)描述符。</p><p>  每個(gè)任務(wù)的“局部描述

96、符表LDT”含有該任務(wù)自己的代碼段、數(shù)據(jù)段、和堆棧段的描述符,也包含該任務(wù)所使用的一些“門(mén)描述符”,如:“任務(wù)門(mén)”和“調(diào)用門(mén)”門(mén)描述符。隨著任務(wù)的切換,系統(tǒng)當(dāng)前的“局部描述符表LDT”也隨之切換。</p><p>  “全局描述符表GDT”含有每一個(gè)任務(wù)都有可能或者可以訪問(wèn)的段的描述符,通常包括操作系統(tǒng)所使用的代碼段、數(shù)據(jù)段、堆棧段的描述符,也包含多種特殊數(shù)據(jù)段描述符,例如各個(gè)用于描述任務(wù)LDT的特殊數(shù)據(jù)段。在任

97、務(wù)切換時(shí),不切換GDT。</p><p>  通過(guò)LDT可以使各個(gè)任務(wù)私有的各個(gè)段與其他任務(wù)隔離,從而達(dá)到受保護(hù)的目的。通過(guò)GDT可以使各個(gè)任務(wù)都需要使用的段能夠被共享。</p><p>  3.2.3.3段選擇子</p><p>  由上面的內(nèi)容可知“虛擬地址”是“二維”的,那是哪兩個(gè)“維”呢?“虛擬地址”是由那兩個(gè)東西組成的呢?在實(shí)模式中,這兩個(gè)東西一個(gè)是保存在

98、段寄存器(CS,DS,SS。。)中的段地址,另一個(gè)是段內(nèi)偏移地址,此時(shí)線性地址 = (段寄存器)*16 + 段內(nèi)偏移。而在保護(hù)模式中,“段選擇子”代替了保存在段寄存器(CS,DS,SS。。)中的段地址。通俗點(diǎn)說(shuō),“段選擇子”是一個(gè)索引,一個(gè)指針,它可以幫助操作系統(tǒng)在“段描述符表”中查找到定義這個(gè)段的“段描述符”,從而得到“段描述符”中的“段基地址”,其實(shí)到了這個(gè)時(shí)候,這個(gè)“段描述符”中的“段基址地址”,就和實(shí)模式中的段寄存器(CS,DS

99、,SS。。)中的段地址有點(diǎn)相似了,但是不同點(diǎn)在于計(jì)算線性地址的方式,實(shí)模式中,線性地址 = (段寄存器)*16 + 段內(nèi)偏移,而保護(hù)模式中,線性地址 = 段基地址 + 偏移。</p><p>  “段選擇子”長(zhǎng)16位,第0位和第1位十請(qǐng)求特權(quán)級(jí)RPL(Request Privilege Level)用于特權(quán)檢查;第2位是引用描述符表指示位TI(Table Indirector),TI = 0指示從全局描述符表GD

100、T中讀取段描述符,TI = 1指示從局部描述符表LDT中讀取段描述符;第3至15位一共13位用來(lái)指示“描述符索引”,由于每個(gè)描述符在描述符表中占據(jù)8個(gè)字節(jié),所以,如果屏蔽掉段選擇子的低三位(即令低三位為0),剛好可以得到當(dāng)前描述符相對(duì)于第一個(gè)描述符的偏移地址,這或許是安排選擇子高13位作為“描述符索引”的原因。</p><p>  一共有13位作為選擇子的“描述符索引”,所以一個(gè)描述符表中,最多有8096個(gè)描述符

101、。</p><p>  所以,總結(jié)來(lái)說(shuō)就是,“二維的虛擬地址” = “選擇子:偏移地址”,“選擇子”+“段描述符表”得到“段描述符”,從“段描述符”得到“段基地址”,由“段基地址”和“偏移地址”就可以就算出線性空間中的“一維的線性地址”。</p><p>  3.2.3.4段描述符高速緩沖寄存器</p><p>  從上述敘述可知,在保護(hù)模式下,每一次由“虛擬地址”

102、映射為“線性地址”時(shí),都必須使用“選擇子”查詢“描述符表”來(lái)得到段描述符中的基地址。為了避免每一次存儲(chǔ)器訪問(wèn)時(shí),都要訪問(wèn)描述符表,從80286開(kāi)始,每個(gè)段寄存器都配有一個(gè)高速緩沖寄存器,稱之為“段描述符高速緩沖寄存器”或稱為“描述符投影寄存器”,這個(gè)寄存器的存在對(duì)程序員來(lái)說(shuō)是不可見(jiàn)的。</p><p>  其工作原理為:每當(dāng)把一個(gè)“選擇子”裝入到某個(gè)段寄存器時(shí),處理器自動(dòng)從描述符表中取出相應(yīng)的描述符,把描述符中的

103、信息裝入到對(duì)應(yīng)的高速緩沖寄存器中,此后在對(duì)該段訪問(wèn)時(shí),處理器都是用對(duì)應(yīng)高速緩沖寄存器中的描述符信息,而不用再?gòu)拿枋龇碇腥∶枋龇?。而絕大多數(shù)情況下,對(duì)存儲(chǔ)器的訪問(wèn)都是在“對(duì)應(yīng)選擇子”裝入到段寄存器之后進(jìn)行的,所以,使用段描述符高速緩沖寄存器可以得到很好的執(zhí)行效果。</p><p>  3.3 分段管理機(jī)制所依賴的兩類寄存器</p><p>  上面的內(nèi)容對(duì)80386的保護(hù)模式下的分段管理

104、機(jī)制做了詳細(xì)說(shuō)明,但是有幾點(diǎn)疑問(wèn),CPU靠什么來(lái)控制這些機(jī)制的實(shí)施?例如,怎么設(shè)置CPU,讓其運(yùn)行在實(shí)模式下或者保護(hù)模式下?還有,上面提到了可以保存8096個(gè)描述符的描述符表,這個(gè)表到底在內(nèi)存的哪里,CPU怎么找到保存這個(gè)表的特殊數(shù)據(jù)段?</p><p>  要回答這些問(wèn)題,必須搞明白的一點(diǎn)是,為了使得分段管理機(jī)制的實(shí)施,CPU必須知道人們到底想讓它“干什么”和“怎么干”。而通過(guò)設(shè)置“控制寄存器”,可以讓CPU知

105、道自己“走什么路”,按什么方式運(yùn)行;通過(guò)設(shè)置“系統(tǒng)地址寄存器”,可以給予CPU一些實(shí)施這個(gè)機(jī)制必須的數(shù)據(jù)。</p><p>  下面就對(duì)這兩類寄存器進(jìn)行詳細(xì)說(shuō)明。</p><p>  3.3.1 控制寄存器</p><p>  控制寄存器包含四個(gè)32位的寄存器,分別命名為CR0,CR1,CR2,CR3。</p><p>  CR0的第0位為

106、PE位,第31位為PG位,這兩個(gè)控制位控制分段和分頁(yè)管理機(jī)制,所以稱之為“保護(hù)控制位”。PE控制分段管理機(jī)制,PE = 0,處理器運(yùn)行于實(shí)模式,PE = 1,處理器運(yùn)行于保護(hù)模式。PG控制分頁(yè)管理機(jī)制,PG = 0,禁用分頁(yè)管理機(jī)制,此時(shí)“線性地址”等同于“物理地址”,PG = 1,啟用分頁(yè)管理機(jī)制,此時(shí)“線性地址”通過(guò)內(nèi)存中的MMU轉(zhuǎn)化為“物理地址”。CR0中的第1至4位為MP(算數(shù)存在位)、EM(模擬位)、TS(任務(wù)切換位)、ET(

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論