操作系統(tǒng)原理 第2版 實(shí)驗(yàn)與思考 第1-11章 硬件基礎(chǔ) - 操作系統(tǒng)安全_第1頁(yè)
操作系統(tǒng)原理 第2版 實(shí)驗(yàn)與思考 第1-11章 硬件基礎(chǔ) - 操作系統(tǒng)安全_第2頁(yè)
操作系統(tǒng)原理 第2版 實(shí)驗(yàn)與思考 第1-11章 硬件基礎(chǔ) - 操作系統(tǒng)安全_第3頁(yè)
操作系統(tǒng)原理 第2版 實(shí)驗(yàn)與思考 第1-11章 硬件基礎(chǔ) - 操作系統(tǒng)安全_第4頁(yè)
操作系統(tǒng)原理 第2版 實(shí)驗(yàn)與思考 第1-11章 硬件基礎(chǔ) - 操作系統(tǒng)安全_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

【實(shí)驗(yàn)與思考】熟悉計(jì)算機(jī)指令的執(zhí)行

1.實(shí)驗(yàn)背景

考慮一個(gè)簡(jiǎn)單的例子。假設(shè)一臺(tái)機(jī)器具有圖1-18中列出的所有特征,處理器包含一個(gè)稱為

累加器(AC)的數(shù)據(jù)寄存器,所有指令和數(shù)據(jù)長(zhǎng)度均為16位,使用16位的單元或字來組織存

儲(chǔ)器。指令格式中有4位是操作碼,因而最多有24=16種不同的操作碼(由1位十六進(jìn)制數(shù)字

表示)。操作碼定義了處理器執(zhí)行的操作。通過指令格式的余下12位,可直接訪問的存儲(chǔ)器尺

寸最大為212=4096(4K)個(gè)字(用3位十六進(jìn)制數(shù)字表示)。

03415

操作碼|地址

-(a)指令格式~~

0115

S|地址

(b)整數(shù)格式

程序計(jì)數(shù)器(PC)=指令的地址

指令寄存器(IR)=正被執(zhí)行的指令

素加器(AC)=臨時(shí)存儲(chǔ)

(c)內(nèi)部CPU寄存器

0001=從內(nèi)存中栽入AC

0010=將AC存儲(chǔ)到內(nèi)存

0101=從內(nèi)存中添加AC

<d)操作碼的部分清單

圖1-18一臺(tái)假想機(jī)器的特征

圖1-19描述了程序的部分執(zhí)行過程,顯示了存儲(chǔ)器和處理器寄存器的相關(guān)部分。給出的程

序片段把地址為940的存儲(chǔ)單元中的內(nèi)容與地址為941的存儲(chǔ)單元中的內(nèi)容相加,并將結(jié)果保

存在后一個(gè)單元中。這需要三條指令,可用三個(gè)取指階段和三個(gè)執(zhí)行階段來描述:

2操作系統(tǒng)原理(第2版)

存儲(chǔ)器CPU寄存器存儲(chǔ)器CPU寄存器

3001940、300IPC3001940301,PC

1AC

30159413015941>0003AC

3022941>1940IR302294111940IR

J

94000039400003-

94100029410002

步驟1步驟2

存儲(chǔ)器CPU寄存器存儲(chǔ)器CPU寄存器

3001940301|PC3001940302PC

3015941、0003AC3015941/0005AC

、5941IR30212941

3022941(5941

9400003940j0003、、?,J

9410002941|0002M

步驟3步驟4

存儲(chǔ)器CPU寄存器存儲(chǔ)器CPU寄存器

3001940302|PC3001940I303PC

J0005AC

30159410005AC3015941

3022941—?2941IR302294112941IR

9400003940IT。()3

94100029410005.

步驟5步驟6

圖1-19程序執(zhí)行的例子(存儲(chǔ)器和寄存器的內(nèi)容,以十六進(jìn)制表示)

(1)PC中包含第一條指令的地址300,該指令內(nèi)容(值為十六進(jìn)制數(shù)1940)被送入指令

寄存器IR中,PC增lo注意,該處理過程使用了存儲(chǔ)器地址寄存器(MAR)和存儲(chǔ)器緩沖寄

存器(MBR)。為簡(jiǎn)單起見,這里未顯示這些中間寄存器。

(2)IR中最初的4位(第一個(gè)十六進(jìn)制數(shù))表示需要加載AC,剩下的12位(后三個(gè)十

六進(jìn)制數(shù))表示地址為940。

(3)從地址為301的存儲(chǔ)單元中取下一條指令(5941),PC增1。

(4)AC中以前的內(nèi)容和地址為941的存儲(chǔ)單元中的內(nèi)容相加,結(jié)果保存在AC中。

(5)從地址為302的存儲(chǔ)單元中取下一條指令(2041),PC增1。

(6)AC中的內(nèi)容被存儲(chǔ)在地址為941的存儲(chǔ)單元中。

在該例中,為把地址為940的存儲(chǔ)單元中的內(nèi)容與地址為941的存儲(chǔ)單元中的內(nèi)容相加,

一共需要三個(gè)指令周期,每個(gè)指令周期都包含一個(gè)取指階段和一個(gè)執(zhí)行階段。若使用更復(fù)雜的

指令集,則需要的指令周期更少。大多數(shù)現(xiàn)代處理器都具有包含多個(gè)地址的指令,因此指令周

期可能涉及多次存儲(chǔ)器訪問。此外,除存儲(chǔ)器訪問外,指令還可用于I/O操作。

2.工具/準(zhǔn)備工作

在開始本實(shí)驗(yàn)之前,請(qǐng)回顧教科書的相關(guān)內(nèi)容。

需要準(zhǔn)備一臺(tái)運(yùn)行鏈接因特網(wǎng)的計(jì)算機(jī)。

3.實(shí)驗(yàn)內(nèi)容與步驟

第1章硬件基礎(chǔ)3

步驟1:如圖1-18所示,假設(shè)處理器還有兩條I/O指令:

0011=從I/O中載入AC

0111=把人<2保存到1/0中

此時(shí),使用12位地址標(biāo)識(shí)一個(gè)特殊的外部設(shè)備。請(qǐng)給出以下程序的執(zhí)行過程(按照?qǐng)D1-19

的格式,繪圖并黏貼如下):

(1)從設(shè)備5中載入AC。

(2)加入內(nèi)存單元940的內(nèi)容。

(3)把AC保存到設(shè)備6中。

假設(shè)從設(shè)備5中取到的下一個(gè)值為3,內(nèi)存單元940單元中的值為2o

繪圖黏貼于此

步驟2:前面用6步描述了圖1-19所示程序的執(zhí)行情況,請(qǐng)用MAR和MBR擴(kuò)充這一描述。

答:_____________________________________________________________________________

4.實(shí)驗(yàn)總結(jié)

5.教師實(shí)驗(yàn)評(píng)價(jià)

4操作系統(tǒng)原理(第2版)

【實(shí)驗(yàn)與思考】熟悉操作系統(tǒng)實(shí)例

在本節(jié)”實(shí)驗(yàn)與思考”中,我們來熟悉幾個(gè)主流的操作系統(tǒng)實(shí)例,以幫助讀者熟悉現(xiàn)代操作

系統(tǒng)的設(shè)計(jì)原理和實(shí)現(xiàn)問題。

請(qǐng)記錄:在下列空格中,填寫3個(gè)概念中的一個(gè):內(nèi)核、shell或者文件系統(tǒng)。

①表現(xiàn)為用戶界面,把用戶的需求翻譯為系統(tǒng)活動(dòng)。

②在用戶之間管理和分配資源。

③提供命令解釋。

④以層次化的結(jié)構(gòu)組織和存儲(chǔ)數(shù)據(jù)。

⑤進(jìn)行內(nèi)存管理。

⑥組成部分是文件和目錄。

⑦管理硬盤、磁帶機(jī)、打印機(jī)、終端、通信線路和其他設(shè)備。

1.Windows系統(tǒng)

MS-DOS是微軟公司最早成功應(yīng)用于個(gè)人計(jì)算機(jī)上的著名操作系統(tǒng),1985年,微軟公司在

MS-DOS基礎(chǔ)上推出WindowsoWindows/DOS于1993年被WindowsNT替代。和以往的Windows

版本相比,WindowsNT有著類似的圖形界面,但內(nèi)核設(shè)計(jì)更加完善。WindowsNT針對(duì)32位計(jì)

算機(jī)設(shè)計(jì),包含了內(nèi)核和執(zhí)行體以及一系列面向?qū)ο蟮奶卣?。此后,Windows操作系統(tǒng)不斷推

出新版本。Windows8是WindowsNT之后又一次重要革新,是可用于個(gè)人計(jì)算機(jī)、便攜式計(jì)算

機(jī)、平板計(jì)算機(jī)、家庭影院等硬件設(shè)備上的跨平臺(tái)操作系統(tǒng)。Windows8基于微軟的Metro設(shè)計(jì)

語(yǔ)言對(duì)觸屏設(shè)備進(jìn)行了優(yōu)化,這些優(yōu)化主要體現(xiàn)在操作系統(tǒng)平臺(tái)和用戶接口上,并帶來了更好

的用戶體驗(yàn)。在Windows8推出前,Windows的內(nèi)核和執(zhí)行體一直延續(xù)了類似的結(jié)構(gòu)。Windows

8從根本上改變了操作系統(tǒng)的內(nèi)核結(jié)構(gòu),尤其是線程管理和虛擬內(nèi)存管理。

2015年7月29日,微軟發(fā)布了Windows10正式版,這是一個(gè)跨平臺(tái)及設(shè)備應(yīng)用的操作系

統(tǒng),有家庭、專業(yè)、企業(yè)、教育、移動(dòng)、移動(dòng)企業(yè)和物聯(lián)網(wǎng)核心等七個(gè)發(fā)行版本,分別面向不

同用戶和設(shè)備。

2021年6月24日,微軟發(fā)布了Windows11桌面端操作系統(tǒng),應(yīng)用于計(jì)算機(jī)和平板電腦等

設(shè)備。Windows11提供了許多創(chuàng)新功能,增加了新版開始菜單和輸入邏輯等,支持混合工作環(huán)

境,側(cè)重于在靈活多變的體驗(yàn)中提高最終用戶的工作效率。2022年5月19日,微軟宣布Windows

11可以廣泛部署,這意味著任何擁有符合Windows11最低配置要求的PC都能夠安裝該系統(tǒng)。

Windows的內(nèi)核是用C語(yǔ)言編寫的,但其設(shè)計(jì)原理與面向?qū)ο笤O(shè)計(jì)密切相關(guān)。面向?qū)ο蠓?/p>

法簡(jiǎn)化了進(jìn)程間資源和數(shù)據(jù)的共享,便于保護(hù)資源免受未經(jīng)許可的訪問。

類似于其他操作系統(tǒng),Windows分別有面向應(yīng)用和操作系統(tǒng)核心的軟件,后者包括在內(nèi)核

模式下運(yùn)行的執(zhí)行體、內(nèi)核、設(shè)備驅(qū)動(dòng)器和硬件抽象層。在內(nèi)核模式下運(yùn)行的軟件可以訪問系

統(tǒng)數(shù)據(jù)和硬件,在用戶模式下運(yùn)行的其他軟件則不能訪問系統(tǒng)數(shù)據(jù)(見圖2-12)。

第1章硬件基礎(chǔ)5

Lsass=本地安全認(rèn)證服務(wù)器

POS1X=可移植操作系統(tǒng)接口

GDI=圖形設(shè)備接口

DLL=動(dòng)態(tài)鏈接庫(kù)

圖2-12Windows內(nèi)核體系結(jié)構(gòu)

Windows的體系結(jié)構(gòu)是高度模塊化的。每個(gè)系統(tǒng)函數(shù)由一個(gè)操作系統(tǒng)部件管理,操作系統(tǒng)

的其余部分和所有應(yīng)用程序通過相應(yīng)的部件使用標(biāo)準(zhǔn)接口來訪問這個(gè)函數(shù)。關(guān)鍵的系統(tǒng)數(shù)據(jù)只

能通過相應(yīng)的函數(shù)訪問。從理論上講,任何模塊都可以移動(dòng)、升級(jí)或替換,而不需要重寫整個(gè)

系統(tǒng)或其標(biāo)準(zhǔn)應(yīng)用程序編程接口(APD。

Windows利用一組受環(huán)境子系統(tǒng)保護(hù)的通用內(nèi)核模式構(gòu)件,為多操作系統(tǒng)特性編寫的應(yīng)用

程序提供支持。每個(gè)子系統(tǒng)在執(zhí)行時(shí)都包括一個(gè)獨(dú)立的進(jìn)程,該進(jìn)程包含共享的數(shù)據(jù)結(jié)構(gòu)、優(yōu)

先級(jí)和需要實(shí)現(xiàn)特定功能的執(zhí)行對(duì)象的句柄。首個(gè)這類應(yīng)用程序啟動(dòng)時(shí),Windows會(huì)話管理器

會(huì)啟動(dòng)上述進(jìn)程。子系統(tǒng)進(jìn)程作為系統(tǒng)用戶運(yùn)行,因此執(zhí)行體會(huì)保護(hù)其地址空間免受普通用戶

進(jìn)程的影響。

受保護(hù)子系統(tǒng)提供圖形或命令行用戶界面,為用戶定義操作系統(tǒng)的外觀。另外,每個(gè)受保

護(hù)的子系統(tǒng)都會(huì)為特定的操作環(huán)境提供API,這表明為那些特定操作環(huán)境創(chuàng)建的應(yīng)用程序在

Windows下不用改變即可運(yùn)行,原因是它們所看到的操作系統(tǒng)接口與編寫它們時(shí)的接口相同。

請(qǐng)記錄:Windows操作系統(tǒng)的主要優(yōu)點(diǎn)是什么?

答:_____________________________________________________________________________

6操作系統(tǒng)原理(第2版)

2.UNIX系統(tǒng)

UNIX操作系統(tǒng)最初是在貝爾實(shí)驗(yàn)室開發(fā)的,1970年在PDP-7上開始運(yùn)行。貝爾實(shí)驗(yàn)室和

其他地方關(guān)于UNIX的工作,產(chǎn)生了一系列的UNIX版本。第一個(gè)里程碑式的成果是把UNIX

系統(tǒng)從PDP-7上移植到了PDP-11計(jì)算機(jī)上,首次暗示UNIX將成為所有計(jì)算機(jī)上的操作系統(tǒng)。

另一個(gè)里程碑式的成果是用C語(yǔ)言重寫了UNIX,而以往人們認(rèn)為,操作系統(tǒng)這樣需要處理時(shí)

間限制事件的復(fù)雜系統(tǒng),必須完全用匯編語(yǔ)言編寫。如今所有UNIX實(shí)現(xiàn)都是用C語(yǔ)言編寫的。

1974年,UNIX系統(tǒng)首次出現(xiàn)在一本技術(shù)期刊中,這引發(fā)了人們對(duì)該系統(tǒng)的興趣,隨后UNIX

向商業(yè)機(jī)構(gòu)和大學(xué)提供了許可證。首個(gè)在貝爾實(shí)驗(yàn)室外使用的版本是1976年的第6版,隨后于

1978年發(fā)行的第7版是大多數(shù)現(xiàn)代UNIX系統(tǒng)的先驅(qū)。最重要的非AT&T系統(tǒng)是加州大學(xué)伯克

利分校開發(fā)的UNIXBSD,它最初在PDP機(jī)上運(yùn)行,后來在VAX機(jī)上運(yùn)行。AT&T繼續(xù)開發(fā)并

改進(jìn)這一系統(tǒng),1982年,貝爾實(shí)驗(yàn)室將UNIX的多個(gè)AT&T變體合并成為了一個(gè)系統(tǒng),即商業(yè)

版的UNIXSystemIII。后來又增加了很多功能組件,形成了UNIXSystemV。

(1)描述。

圖2-13概述了UNIX的體系結(jié)構(gòu)。底層硬件被操作系統(tǒng)軟件包圍,通常稱操作系統(tǒng)為系統(tǒng)

內(nèi)核,以強(qiáng)調(diào)它與用戶和應(yīng)用程序的隔離。我們主要關(guān)注UNIX內(nèi)核,但UNIX也擁有許多可

視為系統(tǒng)一部分的用戶服務(wù)和接口,包括命令解釋器、其他接口軟件和C編譯器部分(編譯器、

匯編器和加載器),它們的外層由用戶應(yīng)用程序和到C編譯器的用戶接口組成。

圖2-14深入描述了內(nèi)核。用戶程序既可直接調(diào)用操作系統(tǒng)服務(wù),也可通過庫(kù)程序調(diào)用操作

系統(tǒng)服務(wù)。系統(tǒng)調(diào)用接口是內(nèi)核和用戶的邊界,它允許高層軟件使用特定的內(nèi)核函數(shù)。另一方

面,操作系統(tǒng)包含直接與硬件交互的原子例程。在這兩個(gè)接口之間,系統(tǒng)被劃分為兩個(gè)主要部

分:一個(gè)關(guān)心進(jìn)程控制,另一個(gè)關(guān)心文件管理和I/O。進(jìn)程控制子系統(tǒng)負(fù)責(zé)內(nèi)存管理、進(jìn)程的調(diào)

度和分發(fā)、進(jìn)程的同步及進(jìn)程間的通信。文件系統(tǒng)按字符流或塊的形式在內(nèi)存和外部設(shè)備間交

換數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)交換需要用到各種設(shè)備驅(qū)動(dòng)程序。面向塊的傳送使用磁盤高速緩存方法:在

用戶地址空間和外部設(shè)備之間,插入了內(nèi)存中的一個(gè)系統(tǒng)緩沖區(qū)。

第1章硬件基礎(chǔ)7

傳統(tǒng)UNIX系統(tǒng)主要是指SystemVRelease3(SVR3)、4.3BSD及更早的版本。關(guān)于傳統(tǒng)

UNIX可以表述為:它被設(shè)計(jì)成在單一處理器上運(yùn)行,缺乏保護(hù)數(shù)據(jù)結(jié)構(gòu)免受多個(gè)處理器同時(shí)訪

問的能力;它的內(nèi)核不通用,只支持一種文件系統(tǒng)、進(jìn)程調(diào)度策略和可執(zhí)行文件格式。傳統(tǒng)UNIX

的內(nèi)核不可擴(kuò)展,不能重用代碼。因此,增加不同UNIX版本的功能時(shí),必須添加許多新代碼,

因此其內(nèi)核非常大,且不是模塊化的。

(2)現(xiàn)代UNIX系統(tǒng)。

隨著UNIX的不斷發(fā)展,出現(xiàn)了很多具有不同功能的不同版本。因此,人們開始希望得到

具有現(xiàn)代操作系統(tǒng)特征和模塊化結(jié)構(gòu)的全新版本。典型的現(xiàn)代UNIX內(nèi)核具有如圖2-15所示,

它有一個(gè)以模塊化方式編寫的小核心軟件,該軟件可提供許多操作系統(tǒng)進(jìn)程需要的功能和服務(wù);

每個(gè)外部圓圈表示相應(yīng)的功能及以多種方式實(shí)現(xiàn)的接口.

下面給出現(xiàn)代UNIX系統(tǒng)的一些例子。

①SystemVRelease4(SVR4)O由AT&T和Sun共同開發(fā)的SVR4結(jié)合了SVR3、4.3BSD、

MicrosoftXenixSystemV和SunOS的特點(diǎn),幾乎完全重寫了SystemV的內(nèi)核,形成了一個(gè)整

潔且復(fù)雜的版本。這一版本的新特性包括實(shí)時(shí)處理支持、進(jìn)程調(diào)度類、動(dòng)態(tài)分配數(shù)據(jù)結(jié)構(gòu)、虛

擬內(nèi)存管理、虛擬文件系統(tǒng)和可搶占的內(nèi)核。SVR4為商業(yè)UNIX的部署提供了統(tǒng)一平臺(tái),是最

重要的UNIX變體,它合并了以往UNIX系統(tǒng)中的大多數(shù)重要特征,可運(yùn)行于從32位微處理器

到超級(jí)計(jì)算機(jī)的任何處理器上。

8操作系統(tǒng)原理(第2版)

圖2-15現(xiàn)代UNIX內(nèi)核

②BSDoUNIX的BSD(BerkeleySoftwareDistribution)系列在操作系統(tǒng)設(shè)計(jì)原理的演化

中意義重大。4.XBSD廣泛用于高校,是許多商業(yè)UNIX產(chǎn)品的基礎(chǔ),大多數(shù)UNIX的增強(qiáng)功能

首先都出現(xiàn)在BSD版中。

4.4BSD是伯克利最后發(fā)布的BSD版本,隨后其設(shè)計(jì)和實(shí)現(xiàn)小組被解散。它是4.3BSD的重

要升級(jí),包含了一個(gè)新的虛存系統(tǒng),改變了內(nèi)核結(jié)構(gòu),增強(qiáng)了一系列其他特性。應(yīng)用最廣且文

檔最好的BSD版本是FreeBSD。FreeBSD常用于互聯(lián)網(wǎng)的服務(wù)器、防火墻和許多嵌入式系統(tǒng)中。

③Solaris10oSolaris是Sun基于SVR4的UNIX版本,它具有SVR4的所有特征和許多更

高級(jí)的特征,如完全可搶占、多線程內(nèi)核,完全支持SMP及文件系統(tǒng)的面向?qū)ο蠼涌凇olaris

是使用最為廣泛且最成功的商用UNIX版本。

請(qǐng)記錄:

請(qǐng)通過網(wǎng)絡(luò)搜索對(duì)UNIX操作系統(tǒng)做進(jìn)一步的深入了解,并簡(jiǎn)單闡述你對(duì)UNIX操作系統(tǒng)

的認(rèn)識(shí)和看法(主要優(yōu)點(diǎn))。

答:_________________________________________________________________________________

3.Linux系統(tǒng)

Linux最初是IBMPC(Intel80386)上所用的一個(gè)UNIX變體,它由芬蘭的計(jì)算機(jī)科學(xué)專

業(yè)學(xué)生LinusTorvalds編寫。1991年,Torvalds在因特網(wǎng)上公布了最早的Linux版本,此后很多

人通過網(wǎng)上合作為L(zhǎng)inux的發(fā)展做出了貢獻(xiàn)。由于Linux免費(fèi)且源代碼公開,很快成為了Sun

第1章硬件基礎(chǔ)9

和IBM公司的工作站和其他UNIX工作站的替代操作系統(tǒng)。如今Linux已成為功能全面的UNIX

系統(tǒng),可在包括IntelPentium和Ilanium、Motorola/IBMPowerPC的所有平臺(tái)上運(yùn)行。

Linux是由免費(fèi)軟件基金贊助的免費(fèi)軟件包。FSF的目標(biāo)是推出與平臺(tái)無關(guān)的穩(wěn)定軟件,這

種軟件必須免費(fèi)、高質(zhì),并為用戶團(tuán)體所接受。FSF的GNU項(xiàng)目為軟件開發(fā)者提供了工具,GNU

PublicLicense(GPL)是FSF正式認(rèn)可的標(biāo)志。Torvalds在開發(fā)內(nèi)核時(shí)使用了GNU工具,后來

他在GPL下發(fā)布了這個(gè)內(nèi)核。因此,我們今天所見的Linux發(fā)行版是FSF的GNU項(xiàng)目、Torvald

的個(gè)人努力及世界各地很多合作者共同開發(fā)的產(chǎn)品。

除了由很多個(gè)人程序員使用外,Linux已滲透到了業(yè)界,這主要是由于Linux內(nèi)核的質(zhì)量很

高。很多天才的程序員共同造就了這一在技術(shù)上給人留下深刻印象的產(chǎn)品;Linux高度模塊化且

易于配置,因此很容易在各種不同的硬件平臺(tái)上顯示出最佳的性能;另外,由于可以獲得源代

碼,銷售商可以調(diào)整應(yīng)用程序和使用方法,以滿足其特定的要求。

(1)模塊結(jié)構(gòu)。

大多數(shù)UNIX內(nèi)核都是單體的。單體內(nèi)核指在一大塊代碼中包含所有的操作系統(tǒng)功能,并

作為單個(gè)進(jìn)程運(yùn)行,具有唯一的地址空間。內(nèi)核中的所有功能部件可以訪問所有的內(nèi)部數(shù)據(jù)結(jié)

構(gòu)和例程。若對(duì)典型單體操作系統(tǒng)的任何部分進(jìn)行了改變,則變化生效前,所有模塊和例程都

須重新鏈接、重新安裝,再重新啟動(dòng)系統(tǒng)。因此,任何修改(如增加一個(gè)新的設(shè)備驅(qū)動(dòng)程序或

文件系統(tǒng)函數(shù))都很困難,Linux中的這個(gè)問題尤其尖銳。

盡管Linux未采用微內(nèi)核的方法,但由于其特殊的模塊結(jié)構(gòu),因而也具有很多微內(nèi)核方法

的優(yōu)點(diǎn)。Linux是由很多模塊組成的,這些模塊可由命令自動(dòng)加載和卸載。這些相對(duì)獨(dú)立的塊稱

為可加載模塊(loadablemodule),實(shí)質(zhì)上,模塊就是內(nèi)核在運(yùn)行時(shí)可以鏈接或斷開鏈接的對(duì)象

文件。一個(gè)模塊通常實(shí)現(xiàn)一些特定的功能,如一個(gè)文件系統(tǒng)、一個(gè)設(shè)備驅(qū)動(dòng)或內(nèi)核上層的一些

特征。盡管模塊可以因?yàn)楦鞣N目的而創(chuàng)建內(nèi)核線程,但其自身不作為進(jìn)程或線程執(zhí)行。當(dāng)然,

模塊會(huì)代表當(dāng)前進(jìn)程在內(nèi)核模式下執(zhí)行。因此,雖然Libux被認(rèn)為是單體內(nèi)核,但其模塊結(jié)構(gòu)

克服了開發(fā)和發(fā)展內(nèi)核過程中所遇到的困難。

(2)內(nèi)核組件。

圖2-16給出了基于IA-64體系結(jié)構(gòu)(如Intel的Itanium)的Linux內(nèi)核的主要組件。圖中顯

示了運(yùn)行在內(nèi)核上的一些進(jìn)程。每個(gè)方框表示一個(gè)進(jìn)程,每條帶箭頭的曲線表示一個(gè)正在執(zhí)行

的線程。內(nèi)核本身包括一組相互關(guān)聯(lián)的組件,箭頭表示主要的關(guān)聯(lián)。底層的硬件也是一個(gè)組件

集,箭頭表示硬件組件被哪個(gè)內(nèi)核組件使用或控制。當(dāng)然,所有內(nèi)核組件都在CPU上執(zhí)行,但

為了簡(jiǎn)潔起見,圖中未顯示它們之間的關(guān)系。

主要內(nèi)核組件的簡(jiǎn)要介紹如下:

?信號(hào):內(nèi)核使用信號(hào)來向進(jìn)程提供信息。例如,使用信號(hào)來告知進(jìn)程出現(xiàn)了某些錯(cuò)誤(如

被零除錯(cuò)誤)。

10操作系統(tǒng)原理(第2版)

圖2-16Linux內(nèi)核組件

?系統(tǒng)調(diào)用:進(jìn)程通過系統(tǒng)調(diào)用來請(qǐng)求系統(tǒng)服務(wù)。系統(tǒng)調(diào)用有幾百個(gè),大致分為6類:文

件系統(tǒng)、進(jìn)程、調(diào)度、進(jìn)程間通信、套接字(網(wǎng)絡(luò))和其他。

?進(jìn)程和調(diào)度器:創(chuàng)建、管理、調(diào)度進(jìn)程。

?虛存:為進(jìn)程分配和管理虛存。

?文件系統(tǒng):為文件、目錄和其他文件相關(guān)對(duì)象提供一個(gè)全局的分層命名空間,并提供文

件系統(tǒng)函數(shù)。

?網(wǎng)絡(luò)協(xié)議:為用戶的TCP/IP協(xié)議套件提供套接字接口。

?字符設(shè)備驅(qū)動(dòng):管理向內(nèi)核一次發(fā)送/接收1字節(jié)數(shù)據(jù)的設(shè)備,如終端、調(diào)制解調(diào)器和打

印機(jī)。

?塊設(shè)備驅(qū)動(dòng):管理以塊為單位向內(nèi)核發(fā)送/接收數(shù)據(jù)的設(shè)備,如各種形式的外存(磁盤、

CD-ROM等)。

?網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng):管理網(wǎng)卡和通信端口,即管理連接到網(wǎng)橋或路由的網(wǎng)絡(luò)設(shè)備。

?陷阱和錯(cuò)誤:處理CPU產(chǎn)生的陷阱和錯(cuò)誤,如內(nèi)存錯(cuò)誤。

?物理內(nèi)存:管理實(shí)際內(nèi)存中的內(nèi)存頁(yè)池,并為虛存分配內(nèi)存頁(yè)。

?中斷:處理來自外設(shè)的中斷。

請(qǐng)記錄:

請(qǐng)列舉Linux操作系統(tǒng)的主要組成部分。Linux操作系統(tǒng)的主要優(yōu)點(diǎn)是什么?

答:_____________________________________________________________________________

4.安卓(Android)系統(tǒng)

安卓(Android)操作系統(tǒng)是為觸屏移動(dòng)設(shè)備(如智能手機(jī)、平板電腦)設(shè)計(jì)的基于Linux

第1章硬件基礎(chǔ)II

的操作系統(tǒng),也是最流行的手機(jī)操作系統(tǒng),當(dāng)然,這只是安卓系統(tǒng)強(qiáng)勢(shì)增長(zhǎng)的原因之一。從更

廣泛的層面上來看,操作系統(tǒng)應(yīng)能在任何含有電子芯片的硬件設(shè)備上使用,而不僅僅是在服務(wù)

器和個(gè)人主機(jī)上使用,安卓系統(tǒng)恰恰很好地體現(xiàn)了這一點(diǎn),也正因?yàn)槿绱?,安卓系統(tǒng)成為了“物

聯(lián)網(wǎng)”操作系統(tǒng)的標(biāo)桿,它能把傳感器和應(yīng)用更好地聯(lián)系起來,構(gòu)建更多、更好的智能設(shè)備。

最初的安卓操作系統(tǒng)由Android公司開發(fā),隨后該公司于2005年被谷歌公司收購(gòu)。最早的

商業(yè)版本Android1.0于2008年發(fā)布。2007年,開放手機(jī)聯(lián)盟(OHA)成立。創(chuàng)立之初,OHA

的成員共有84家公司,它們共同為手機(jī)設(shè)備制定了公開標(biāo)準(zhǔn)。安卓操作系統(tǒng)的發(fā)布由OHA負(fù)

責(zé),開源性是安卓操作系統(tǒng)成功的關(guān)鍵因素。

(1)軟件體系結(jié)構(gòu)。

安卓是一個(gè)包括操作系統(tǒng)內(nèi)核、中間件和關(guān)鍵應(yīng)用的軟件棧。圖2-17顯示了安卓的軟件體

系結(jié)構(gòu)。因此,安卓應(yīng)視為一個(gè)完整的軟件棧,而非單個(gè)操作系統(tǒng)。從某種意義上講,安卓是

一種嵌入式Linux,但它所提供的功能并不是一個(gè)簡(jiǎn)單的嵌入式內(nèi)核就可以做到的。

應(yīng)用

(Home)[撥號(hào)程序)IM)(瀏覽器](相機(jī))(報(bào)警)(計(jì)算器)

(聯(lián)系人J國(guó)撥號(hào)(電子由泊日歷)(媒體播放罌)(相珊)(時(shí)鐘j(.)

應(yīng)用框架

活動(dòng)管理器Window*管理器)內(nèi)容提供商通知管理器)

包管理器電話管理器資源管理器XMPP服務(wù))

系統(tǒng)庫(kù)Android運(yùn)行時(shí)

面管理器]媒體框架)

SQLite核心庫(kù)

OperGlJESFreeTvpeLibWebCoreDalvik虛擬機(jī)

Linux內(nèi)核

顯示驅(qū)動(dòng)相機(jī)驅(qū)動(dòng)藍(lán)牙驅(qū)動(dòng)

USB驅(qū)動(dòng)鍵盤驅(qū)動(dòng)WiFi驅(qū)動(dòng)

實(shí)現(xiàn):

應(yīng)用、應(yīng)用框架:Java

系統(tǒng)庫(kù)、Android運(yùn)行時(shí):C和C++

Linux內(nèi)核:C

圖2-17安卓軟件體系結(jié)構(gòu)

安卓系統(tǒng)的內(nèi)核與Linux的內(nèi)核非常相似但不完全相同。變化之一是安卓系統(tǒng)中沒有不適

合在移動(dòng)設(shè)備環(huán)境中應(yīng)用的驅(qū)動(dòng),這使得安卓的內(nèi)核更小。此外,安卓系統(tǒng)針對(duì)移動(dòng)設(shè)備環(huán)境

提高了內(nèi)核的功能。

安卓系統(tǒng)依賴Linux內(nèi)核來提供核心的系統(tǒng)服務(wù),如安全、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)

議棧和驅(qū)動(dòng)模型。內(nèi)核也扮演硬件和軟件中間的抽象層角色,以使安卓系統(tǒng)能使用Linux系統(tǒng)

支持的大多數(shù)硬件驅(qū)動(dòng)。

12操作系統(tǒng)原理(第2版)

(2)系統(tǒng)體系結(jié)構(gòu)。

從應(yīng)用開發(fā)者的角度來看,如圖2-18所示的安卓系統(tǒng)體系結(jié)構(gòu)是圖2-17所示軟件體系結(jié)構(gòu)

的簡(jiǎn)化抽象。

從這個(gè)角度來看,安卓包含了如下幾層:

(1)應(yīng)用和框架:應(yīng)用開發(fā)者最關(guān)心這一層及訪問低層服務(wù)的API。

(2)BinderIPC:Binder進(jìn)程間通信機(jī)制允許應(yīng)用框架打破進(jìn)程的界限來訪問安卓系統(tǒng)服

務(wù)代碼,從而允許系統(tǒng)的高層框架API與安卓的系統(tǒng)服務(wù)進(jìn)行交互。

(3)安卓系統(tǒng)服務(wù):框架中大部分能夠調(diào)用系統(tǒng)服務(wù)的接口都向開發(fā)者開放,以便開發(fā)者

能夠使用底層的硬件和內(nèi)核功能。安卓系統(tǒng)服務(wù)分為兩部分:媒體服務(wù)處理播放和錄制媒體文

件,系統(tǒng)服務(wù)處理應(yīng)用所需要的系統(tǒng)功能。

(4)硬件抽象層(HAL):提供調(diào)用核心層設(shè)備驅(qū)動(dòng)的標(biāo)準(zhǔn)接口,以便上層代碼不需要關(guān)

心具體驅(qū)動(dòng)和硬件的實(shí)現(xiàn)細(xì)節(jié)。安卓的HAL與標(biāo)準(zhǔn)Linux中的HAL基本一致。

(5)Linux內(nèi)核:己被裁剪到滿足移動(dòng)環(huán)境的需求。

請(qǐng)記錄:

請(qǐng)簡(jiǎn)述,安卓操作系統(tǒng)的主要優(yōu)點(diǎn)是什么?

答:_____________________________________________________________________________

第1章硬件基礎(chǔ)13

5.實(shí)驗(yàn)總結(jié)

6.教師實(shí)驗(yàn)評(píng)價(jià)

14操作系統(tǒng)原理(第2版)

【實(shí)驗(yàn)與思考】Windows進(jìn)程的“一生”

i.背景知識(shí)

Windows所創(chuàng)建的每個(gè)進(jìn)程都從調(diào)用CreateProcess()API函數(shù)開始,該函數(shù)的任務(wù)是在對(duì)象

管理器子系統(tǒng)內(nèi)初始化進(jìn)程對(duì)象。每一進(jìn)程都以調(diào)用ExilProcessO或TerminaleProcess()API函

數(shù)終止。通常應(yīng)用程序的框架負(fù)責(zé)調(diào)用ExitProcess()函數(shù)。對(duì)于C++運(yùn)行庫(kù)來說,這一調(diào)用

發(fā)生在應(yīng)用程序的main。函數(shù)返回之后。

(1)創(chuàng)建進(jìn)程。

CreateProcessO調(diào)用的核心參數(shù)是可執(zhí)行文件運(yùn)行時(shí)的文件名及其命令行。表3-6列出了每

個(gè)參數(shù)的類型和名稱。

表3-6CreateProcessO函數(shù)的參數(shù)

參數(shù)名稱使用目的

LPCTSTRIpApplivationName全部或部分地指明包括可執(zhí)行代碼的EXE文件的文件名

LPCTSTRIpCommandLine向可執(zhí)行文件發(fā)送的參數(shù)

LPSECURIITY.ATTRIBUTES返回進(jìn)程句柄的安全屬性。主要指明這?句柄是否應(yīng)該由其他

IpProcessAttributes子進(jìn)程所繼承

LPSECURIITY_ATTRIBUTES

返回進(jìn)程的主線程的句柄的安全屬性

IpThreadAttributes

BOOLblnheritHandle一種標(biāo)志,告訴系統(tǒng)允許新進(jìn)程繼承創(chuàng)建者進(jìn)程的句柄

DWORDdwCreationFlage特殊的創(chuàng)建標(biāo)志(如CREATE_SUSPENDED)的位標(biāo)記

LPVOIDIpEnvironmcnt向新進(jìn)程發(fā)送的一套環(huán)境變量;如為null值則發(fā)送調(diào)用者環(huán)境

LPCTSTRIpCurrentDirectory新進(jìn)程的啟動(dòng)目錄

STARTUPINFOIpStartupInfoSTARTUPINFO結(jié)構(gòu),包括新進(jìn)程的輸入和輸出配置的詳情

LPPROCESS.INFORMATION

調(diào)用的結(jié)果塊;發(fā)送新應(yīng)用程序的進(jìn)程和主線程的句柄和ID

IpProcessInfbrmation

可以指定第一個(gè)參數(shù),即應(yīng)庠程序的名稱,其中包括相對(duì)于當(dāng)前進(jìn)程的當(dāng)前目錄的全路徑

或者利用搜索方法找到的路徑;IpCommandLine參數(shù)允許調(diào)用者向新應(yīng)用程序發(fā)送數(shù)據(jù);接下

來的三個(gè)參數(shù)與進(jìn)程和它的主線程以及返回的指向該對(duì)象的句柄的安全性有關(guān)。

然后是標(biāo)志參數(shù),用以在dwCreationFlags參數(shù)中指明系統(tǒng)應(yīng)該給予新進(jìn)程什么行為。經(jīng)常

使用的標(biāo)志是CREATE_SUSPNDED,告訴主線程立刻暫停。當(dāng)準(zhǔn)備好時(shí),應(yīng)該使用

ResumeThread()API來啟動(dòng)進(jìn)程。另一個(gè)常用的標(biāo)志是CREATE_NEW_CONSOLE,告訴新進(jìn)

程啟動(dòng)自己的控制臺(tái)窗口,而不是利用父窗口。這一參數(shù)還允許設(shè)置進(jìn)程的優(yōu)先級(jí),用以向系

統(tǒng)指明,相對(duì)于系統(tǒng)中所有其他的活動(dòng)進(jìn)程來說,給此進(jìn)程多少CPU時(shí)間。

第1章硬件基礎(chǔ)15

接著是CreateProcess()函數(shù)調(diào)用所需要的三個(gè)通常使用缺省值的參數(shù)。第一個(gè)參數(shù)是

IpEnvironment參數(shù),指明為新進(jìn)程提供的環(huán)境;第二個(gè)參數(shù)是IpCurrentDirectory,可用于向主

創(chuàng)進(jìn)程發(fā)送與缺省目錄不同的新進(jìn)程使用的特殊的當(dāng)前目錄;第三個(gè)參數(shù)是STARTUPINFO數(shù)

據(jù)結(jié)構(gòu)所必需的,用于在必要時(shí)指明新應(yīng)用程序的主窗口的外觀。

CreateProcess()的最后一個(gè)參數(shù)是用于新進(jìn)程對(duì)象及其主線程的句柄和ID的返回值緩沖

區(qū)。以PROCESS」NFORMATION結(jié)構(gòu)中返回的句柄調(diào)用CloseHandle()API函數(shù)是重要的,因

為如果不將這些句柄關(guān)閉的話,有可能危及主創(chuàng)進(jìn)程終止之前的任何未釋放的資源。

(2)正在運(yùn)行的進(jìn)程。

如果一個(gè)進(jìn)程擁有至少一個(gè)執(zhí)行線程,則為正在系統(tǒng)中運(yùn)行的進(jìn)程。通常,這種進(jìn)程使用

主線程來指示它的存在。當(dāng)主線程結(jié)束時(shí),調(diào)用ExitProcess()API函數(shù),通知系統(tǒng)終止它所擁有

的所有正在運(yùn)行、準(zhǔn)備運(yùn)行或正在掛起的其他線程。當(dāng)進(jìn)程正在運(yùn)行時(shí),可以查看它的許多特

性,其中少數(shù)特性也允許加以修改。

首先可查看的進(jìn)程特性是系統(tǒng)進(jìn)程標(biāo)識(shí)符(P1D),可利用GetCurrentProcessId()API函數(shù)來

查看,與GetCurrenlProcess。相似,對(duì)該函數(shù)的調(diào)用不能失敗,但返回的PID在整個(gè)系統(tǒng)中都

可使用。其他的可顯示當(dāng)前進(jìn)程信息的API函數(shù)還有GetStartupInfo()和

GetProcessShutdownParameters()>可給出進(jìn)程存活期內(nèi)的配置詳情。

通常,一個(gè)進(jìn)程需要它的運(yùn)行期環(huán)境的信息。例如API函數(shù)GetModuleFileName()和

GetCommandLine(),可以給出用在CreateProcess。中的參數(shù)以啟動(dòng)應(yīng)用程序。在創(chuàng)建應(yīng)用程序

時(shí)可使用的另一個(gè)API函數(shù)是IsDebuggerPresent()。

可利用API函數(shù)GetGuiResourcesO來查看進(jìn)程的GUI資源。此函數(shù)既可返回指定進(jìn)程中

的打開的GUI對(duì)象的數(shù)目,也可返回指定進(jìn)程中打開的USER對(duì)象的數(shù)目。進(jìn)程的其他性能信

息可通過GetProcessIoCounters()、GetProcessPriorityBoost()、GetProcessTimes()和

GetProcessWorkingSetSizeOAPI得到。以上這幾個(gè)API函數(shù)都只需要具有

PROCESS_QUERY_INFORMATION訪問權(quán)限的指向所感興趣進(jìn)程的句柄。

另一個(gè)可用于進(jìn)程信息查詢的API函數(shù)是GetProcessVersionO。此函數(shù)只需感興趣進(jìn)程的

PID(進(jìn)程標(biāo)識(shí)號(hào))。本實(shí)驗(yàn)的程序清單3-2中列出了這一API函數(shù)與GetVersionEx()的共同作

用,可確定運(yùn)行進(jìn)程的系統(tǒng)的版本號(hào)。

(3)終止進(jìn)程。

所有進(jìn)程都是以調(diào)用ExitProcess()或者TerminateProcess()函數(shù)結(jié)束的。但最好使用前者而

不要使用后者,因?yàn)檫M(jìn)程是在完成了它的所有的關(guān)閉“職責(zé)”之后以正常的終止方式來調(diào)用前

者的。而外部進(jìn)程通常調(diào)用后者即突然終止進(jìn)程的進(jìn)行,由于關(guān)閉時(shí)的途徑不太正常,有可能

引起錯(cuò)誤的行為。

TerminateProcess()API函數(shù)只要打開帶有PROCESS_TERMINATE訪問權(quán)的進(jìn)程對(duì)象,就

可以終止進(jìn)程,并向系統(tǒng)返回指定的代碼。這是一種“野蠻”的終止進(jìn)程的方式,但是有時(shí)卻

是需要的。

16操作系統(tǒng)原理(第2版)

如果開發(fā)人員確實(shí)有機(jī)會(huì)來設(shè)計(jì)“謀殺”(終止別的進(jìn)程的進(jìn)程)和“受害”進(jìn)程(被終止

的進(jìn)程)時(shí),應(yīng)該創(chuàng)建一個(gè)進(jìn)程間通訊的內(nèi)核對(duì)象一一如一個(gè)互斥程序一一這樣一來,“受害”

進(jìn)程只在等待或周期性地測(cè)試它是否應(yīng)該終止。

2.工具/準(zhǔn)備工作

在開始本實(shí)驗(yàn)之前,請(qǐng)回顧教科書的相關(guān)內(nèi)容。

需要準(zhǔn)備一臺(tái)運(yùn)行Windows操作系統(tǒng)的計(jì)算機(jī),且該計(jì)算機(jī)中需安裝VisualC++。

3.實(shí)驗(yàn)內(nèi)容與步驟

本節(jié)“實(shí)驗(yàn)與思考”的目的是:

(1)通過創(chuàng)建進(jìn)程、觀察正在運(yùn)行的進(jìn)程和終止進(jìn)程的程序設(shè)計(jì)和調(diào)試操作,進(jìn)一步熟悉

操作系統(tǒng)的進(jìn)程概念,理解Windows進(jìn)程的“一生”。

(2)通過閱讀和分析實(shí)驗(yàn)程序,學(xué)習(xí)創(chuàng)建進(jìn)程、觀察進(jìn)程和終止進(jìn)程的程序設(shè)計(jì)方法。

請(qǐng)回答:

Windows所創(chuàng)建的每個(gè)進(jìn)程都是以調(diào)用API函數(shù)開始和

以調(diào)用或API函數(shù)終止。

(1)當(dāng)前進(jìn)程對(duì)象信息的獲取。

操作系統(tǒng)將當(dāng)前運(yùn)行的行的應(yīng)用程序看作是進(jìn)程對(duì)象。利用系統(tǒng)提供的惟一的稱為句柄

(HANDLE)的號(hào)碼,就可與進(jìn)程對(duì)象交互。這一號(hào)碼只對(duì)當(dāng)前進(jìn)程有效。

本實(shí)驗(yàn)表示了一個(gè)簡(jiǎn)單的進(jìn)程句柄的應(yīng)用。在系統(tǒng)中運(yùn)行的任何進(jìn)程都可調(diào)用

GetCurrentProcess()API函數(shù)和GetCurrentProcessId(),GetCurrentProcess()函數(shù)可返回標(biāo)識(shí)進(jìn)程本

身的句柄,GetCurrentProcessId()函數(shù)可返回進(jìn)程標(biāo)識(shí)號(hào)。然后就可在Windows需要該進(jìn)程的有

關(guān)情況時(shí),利用這一句柄或進(jìn)程標(biāo)識(shí)號(hào)來獲取。

步驟1:在C++開發(fā)環(huán)境中輸入程序3-1.cpp,

清單3-1通過句柄或進(jìn)程標(biāo)識(shí)號(hào)獲取當(dāng)前進(jìn)程信息。

#include<windows.h>

#include<iostream>

intmain(){

//從當(dāng)前進(jìn)程中提取句柄

HANDLEhProcessThis=::GetCurrentProcess();

//提取當(dāng)前進(jìn)程的ID號(hào)

DWORDdwIdThis=::GetCurrentProcessId();

//獲得這?進(jìn)程所需的操作系統(tǒng)版本

DWORDdwVerReq=::GetProcessVersion(dwIdThis);

WORDwMajorReq=(WORD)(dwVerReq?16);//右移16位

第1章硬件基礎(chǔ)17

WORDwMinorReq=(WORD)(dwVerReq&Oxffff);

std::cout?”當(dāng)前進(jìn)程標(biāo)識(shí)號(hào):dwIdThis?",所需的操作系統(tǒng)版本:”

<<wMajorReq<<"."?wMinorReq?std::endl;

//設(shè)置版本信息的數(shù)據(jù)結(jié)構(gòu),以便保存操作系統(tǒng)的版本信息

OSVERSIONINFOEXosvix;

::ZeroMemory(&osvixzsizeof(osvix));

osvix.dwOSVersionInfoSize=sizeof(osvix);

//提取當(dāng)前操作系統(tǒng)的版本信息

::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvix));

std::cout當(dāng)前操作系統(tǒng)版本:osvix.dwMajorVersion?"."

<<osvix.dwMinorVersion<<std::endl;

//請(qǐng)求內(nèi)核提供該進(jìn)程所屬的優(yōu)先權(quán)類

DWORDdwPriority=::GetPriorityClass(hProcessThis);

//發(fā)出消息,為用戶描述該類

std::cout<<"Currentprocesspriority:";

switch(dwPriority)

(

caseHIGH_PRIORITY_CLASS:std::cout?"高”;break;

caseNORMAL_PRIORITY_CLASS:std::cout?“普通”;break;

caseIDLE_PRIORITY_CLASS:std::cout?"空閑”;break;

caseREALTIME_PRIORITY_CLASS:std::cout?”實(shí)時(shí)“;break;

default:std::cout?"未矢口";break;

}

std::cout?std::endl;

getchar();//僅僅為了讓窗口停下來,以便觀察

return0;

}

清單3-1中列出的是一種獲得進(jìn)程句柄的方法。對(duì)于進(jìn)程句柄可進(jìn)行的惟一有用的操作是

在API調(diào)用時(shí),將其作為參數(shù)發(fā)還給系統(tǒng),正如清單3-1中對(duì)GetPriorityClass。API函數(shù)的調(diào)用

那樣。在這種情況下,系統(tǒng)向進(jìn)程對(duì)象內(nèi)“窺視”,以決定其優(yōu)先級(jí),然后將此優(yōu)先級(jí)返回給應(yīng)

用程序。

OpenProcess()和CreateProcess。API函數(shù)也可以用于提取進(jìn)程句柄。前者提取的是已經(jīng)存

在的進(jìn)程的句柄,而后者創(chuàng)建一個(gè)新進(jìn)程,并將其句柄提供出來。

步驟2:編譯源程序。

你采用的編譯方法是(寫出編程軟件):_____________________________________________

18操作系統(tǒng)原理(第2版)

步驟3:運(yùn)行可執(zhí)行文件。(請(qǐng)直接找到可執(zhí)行文件(如3-l.exe),右鍵一以管理員身份運(yùn)

行,下同)。

運(yùn)行結(jié)果:_______________________________________________________________________

步驟4:通過改編程序,增加第二次進(jìn)程優(yōu)先級(jí)的輸出。功能要求如下,在進(jìn)程運(yùn)行期間,

打開任務(wù)管理器,找到當(dāng)前進(jìn)程,右鍵一一設(shè)置優(yōu)先級(jí),然后更改當(dāng)前進(jìn)程的優(yōu)先級(jí),完成優(yōu)

先級(jí)設(shè)置后,使進(jìn)程執(zhí)行第二次輸出優(yōu)先級(jí)的代碼,觀察結(jié)果。

請(qǐng)問在任務(wù)管理器觀察到的當(dāng)前進(jìn)程的進(jìn)程名(映像名稱)是:

進(jìn)程標(biāo)識(shí)號(hào)是:___________________________________________________________________

請(qǐng)描述這次的運(yùn)行結(jié)果:__________________________________________________________

步驟5:改編程序,在第二次進(jìn)程優(yōu)先級(jí)輸出前,用編程的方式修改進(jìn)程優(yōu)先級(jí)。改變優(yōu)先

級(jí)的API函數(shù)SetPriorityClass()的調(diào)用方法如下:

::SetPriorityClass(進(jìn)程句柄,進(jìn)程優(yōu)先級(jí))

其中進(jìn)程優(yōu)先級(jí)使用的是優(yōu)先級(jí)類中的成員,如HIGH_PRIORITY_CLASSo

給出更改進(jìn)程優(yōu)先級(jí)的代碼:

運(yùn)行結(jié)果:_______________________________________________________________________

通過上述三次運(yùn)行結(jié)果,觀察進(jìn)程標(biāo)識(shí)號(hào)有什么規(guī)律?是同一個(gè)進(jìn)程嗎?為什么?

知識(shí)點(diǎn)回顧:

@獲取當(dāng)前進(jìn)程的API:____________________________________________________

②獲取當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào)(PID)的API:

③獲得進(jìn)程所需的操作系統(tǒng)版本的API:

④獲得進(jìn)程優(yōu)先級(jí)的API:__________________________________________________

⑤設(shè)置進(jìn)程優(yōu)先級(jí)的API:_________________

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論