- 操作系統(tǒng)(第3版)
- 羅宇等編著
- 4185字
- 2018-12-29 03:45:07
1.1 什么是操作系統(tǒng)
眾所周知,處理機(jī)、主存、磁盤、終端、網(wǎng)卡等硬件資源通過主板連接構(gòu)成了看得見、摸得著的計(jì)算機(jī)硬件系統(tǒng)。為了能使這些硬件資源高效地、盡可能并行地被用戶程序使用,也為了給用戶程序提供易用的訪問這些硬件的方法,我們必須為計(jì)算機(jī)配備操作系統(tǒng)軟件。操作系統(tǒng)的工作就是管理計(jì)算機(jī)的處理機(jī)、主存、外設(shè)等硬件資源,提供存放于存儲(chǔ)設(shè)備的文件等邏輯資源,并組織用戶任務(wù)(如以進(jìn)程形式)使用這些資源。
操作系統(tǒng)是一種系統(tǒng)軟件,是軟、硬資源的控制中心,它以盡量合理有效的方法組織單個(gè)或多個(gè)用戶以多任務(wù)方式共享計(jì)算機(jī)的各種資源。
1.1.1 計(jì)算機(jī)系統(tǒng)的軟件構(gòu)成
計(jì)算機(jī)系統(tǒng)的軟件層次及構(gòu)成如圖1.1所示。

圖1.1 計(jì)算機(jī)系統(tǒng)的軟件層次及構(gòu)成
當(dāng)用戶在計(jì)算機(jī)中安裝操作系統(tǒng)時(shí),如圖1.1所示的操作系統(tǒng)內(nèi)核、命令解釋器、編輯器、編譯器、各種庫(kù)程序,甚至數(shù)據(jù)庫(kù)管理器、Web服務(wù)器等都從安裝介質(zhì)復(fù)制到了計(jì)算機(jī)系統(tǒng)的磁盤上。
無(wú)論是安裝UNIX、Linux還是Windows操作系統(tǒng),命令解釋器都是必不可少的一個(gè)程序,用戶通過它來(lái)使用計(jì)算機(jī)系統(tǒng)。如果沒有它,用戶就無(wú)法操作計(jì)算機(jī),無(wú)法輸入命令讓計(jì)算機(jī)去執(zhí)行(注意,在窗口界面中,用戶通過與命令解釋器對(duì)應(yīng)的程序管理器,如Windows的explorer.exe來(lái)使用計(jì)算機(jī))。在現(xiàn)代操作系統(tǒng)實(shí)現(xiàn)中,命令解釋器程序沒有作為操作系統(tǒng)內(nèi)核的組成部分,但它在使用計(jì)算機(jī)過程中是不可缺少的,用戶在終端輸入的命令就是由命令解釋器程序接收并解釋執(zhí)行的。其他的操作系統(tǒng)內(nèi)核層之上的程序則是根據(jù)計(jì)算機(jī)的定位(服務(wù)器或工作站)而選擇安裝的。如果將計(jì)算機(jī)定位成程序開發(fā)用的工作站,那么用戶必須安裝編輯器進(jìn)行程序編輯,并安裝編譯器進(jìn)行程序編譯。如果把計(jì)算機(jī)作為一個(gè)網(wǎng)絡(luò)上的Web服務(wù)器,那么必須安裝Web服務(wù)器程序。無(wú)論是用戶自編的普通C語(yǔ)言程序還是數(shù)據(jù)庫(kù)應(yīng)用程序,都在操作系統(tǒng)安裝并運(yùn)行后開發(fā)或安裝。這些在操作系統(tǒng)內(nèi)核層之上的程序,不管是命令解釋器、Web服務(wù)器或用戶自編的程序,都是通過操作系統(tǒng)提供的進(jìn)程機(jī)制來(lái)運(yùn)行的。
從狹義上看,操作系統(tǒng)只包含如圖1.1所示的操作系統(tǒng)內(nèi)核,它是一個(gè)非常重要的系統(tǒng)程序,管理著系統(tǒng)中所有的公共資源,并提供實(shí)現(xiàn)程序運(yùn)行的進(jìn)程機(jī)制。由于操作系統(tǒng)內(nèi)核工作的重要性、特殊性,它必須在一種特殊的保護(hù)狀態(tài)下運(yùn)行,以免受到用戶層程序的干擾和破壞,它提供一組稱為系統(tǒng)調(diào)用的接口,供上層程序調(diào)用,從而保證操作系統(tǒng)內(nèi)核在特殊保護(hù)狀態(tài)下運(yùn)行的需求,并且滿足上層程序?qū)ο到y(tǒng)資源的申請(qǐng)、使用、釋放以及進(jìn)程的創(chuàng)建、結(jié)束等諸多功能的需求。
圖1.1中的各種庫(kù)程序?qū)嶋H上就是一些可以重用的、公用的子程序,它們提供形形色色的功能。系統(tǒng)提供這些庫(kù)程序是為了方便用戶編程,用戶不必為了實(shí)現(xiàn)一個(gè)通用的功能再重寫上述庫(kù)程序代碼,而只要引用庫(kù)程序中的函數(shù)即可。庫(kù)程序可以看成一些通用的、公共的程序集合,利用內(nèi)核提供的簡(jiǎn)單的資源管理功能實(shí)現(xiàn)復(fù)雜的復(fù)合功能。這些通用的公共程序之所以不放到操作系統(tǒng)內(nèi)核中去實(shí)現(xiàn),是因?yàn)樗鼈儾簧婕跋到y(tǒng)公共資源的管理,也是為了控制內(nèi)核的大小。
1.1.2 操作系統(tǒng)作為特殊子程序
從圖1.1可以看出,操作系統(tǒng)內(nèi)核位于計(jì)算機(jī)硬件之上。操作系統(tǒng)內(nèi)核為用戶層程序提供系統(tǒng)調(diào)用(又稱廣義指令)功能。系統(tǒng)調(diào)用與普通函數(shù)調(diào)用相似,可以看成是特殊的公共子程序,因?yàn)檫@些程序提供了一些可以被任意用戶層程序調(diào)用的公共功能,所以用戶不需要再編寫實(shí)現(xiàn)這些功能的程序,只要調(diào)用操作系統(tǒng)內(nèi)核提供的相應(yīng)“系統(tǒng)調(diào)用”即可。但是,要特別注意系統(tǒng)調(diào)用的特殊性,即系統(tǒng)調(diào)用處理程序運(yùn)行在一種特殊的保護(hù)狀態(tài)下。在這種狀態(tài)下,程序可以執(zhí)行一些特權(quán)指令,訪問用戶層程序訪問不到的系統(tǒng)存儲(chǔ)空間。系統(tǒng)調(diào)用之所以具有這樣的特殊性,是因?yàn)橄到y(tǒng)調(diào)用處理程序涉及系統(tǒng)共享資源的操作。
舉例來(lái)說,求的值是許多用戶程序都要做的工作,可以把它作為一個(gè)公共子程序?qū)崿F(xiàn)。那么它需要作為系統(tǒng)調(diào)用在操作系統(tǒng)內(nèi)核實(shí)現(xiàn)嗎?回答是否定的。雖然計(jì)算
需要許多條機(jī)器指令來(lái)實(shí)現(xiàn),但因?yàn)樗簧婕跋到y(tǒng)的共享資源,只對(duì)輸入變量x進(jìn)行操作,因此可以把它作為數(shù)學(xué)函數(shù)庫(kù)中的子程序來(lái)實(shí)現(xiàn)。
以前的計(jì)算機(jī)都使用軟盤,許多基于Intel x86的個(gè)人計(jì)算機(jī)都使用NEC的PD765軟盤驅(qū)動(dòng)器(簡(jiǎn)稱軟驅(qū)),該軟驅(qū)支持16條命令,可以通過對(duì)軟驅(qū)控制部件中的寄存器置不同的值來(lái)執(zhí)行初始化、移動(dòng)磁頭、讀/寫數(shù)據(jù)等命令。其中,最基本的命令是讀/寫命令,需要13個(gè)參數(shù),如磁盤塊地址、每個(gè)磁盤的扇區(qū)數(shù)、物理介質(zhì)中所用的記錄模式、扇區(qū)間距等。當(dāng)操作完成時(shí),軟驅(qū)控制部件中的狀態(tài)寄存器中有一堆狀態(tài)位,由驅(qū)動(dòng)程序判定是正常完成還是異常結(jié)束。在啟動(dòng)讀/寫命令前還需要判定軟驅(qū)電機(jī)是否已啟動(dòng),若未啟動(dòng)還需要先啟動(dòng)電機(jī)。如果這些操作都交給用戶編程實(shí)現(xiàn),不僅復(fù)雜,而且每個(gè)用戶都要重復(fù)編程,多個(gè)用戶使用時(shí)還會(huì)引起混亂。因此,操作系統(tǒng)給用戶提供一個(gè)簡(jiǎn)單的統(tǒng)一的文件操作界面,即軟盤上包含多個(gè)文件,每個(gè)文件可以按照讀/寫方式打開,然后進(jìn)行讀/寫,最后關(guān)閉文件。用戶無(wú)需知道電機(jī)如何啟動(dòng)、如何讀/寫數(shù)據(jù),也不需要知道要讀/寫的數(shù)據(jù)放在軟盤的哪個(gè)扇區(qū),只需要知道讀/寫哪個(gè)文件的哪一段數(shù)據(jù)即可,利用這個(gè)簡(jiǎn)單的文件操作界面就可以與軟盤進(jìn)行數(shù)據(jù)交換。這個(gè)文件操作界面由操作系統(tǒng)的系統(tǒng)調(diào)用實(shí)現(xiàn),因?yàn)檐涷?qū)不是某個(gè)用戶的私有資源,軟盤上的文件可以供多個(gè)用戶訪問,涉及到軟驅(qū)和文件的管理數(shù)據(jù)都應(yīng)該受到保護(hù),所以文件操作以操作系統(tǒng)內(nèi)核系統(tǒng)調(diào)用形式實(shí)現(xiàn)。
1.1.3 操作系統(tǒng)作為資源管理者
計(jì)算機(jī)由處理機(jī)、主存、輔存、終端設(shè)備、網(wǎng)絡(luò)設(shè)備等硬件資源組成。處理機(jī)提供程序執(zhí)行能力;主存、輔存提供程序和數(shù)據(jù)的存儲(chǔ)能力;終端設(shè)備提供人機(jī)交互能力;網(wǎng)絡(luò)設(shè)備提供機(jī)間通信能力。這些硬件資源要能被計(jì)算機(jī)用戶高效地使用,必須有適合每種硬件資源特點(diǎn)的資源分配和使用機(jī)制。
為使硬件資源充分發(fā)揮作用,必須允許多用戶或單用戶以多任務(wù)方式同時(shí)使用計(jì)算機(jī),以便讓不同的資源由不同的用戶任務(wù)同時(shí)使用,減少資源的閑置時(shí)間。例如,當(dāng)一個(gè)用戶任務(wù)將文件內(nèi)容從磁盤往主存的緩沖區(qū)讀出時(shí),另一個(gè)用戶任務(wù)可以讓自己的程序在處理機(jī)上運(yùn)行。這樣,處理機(jī)、主存、磁盤同時(shí)工作,也就提高了資源利用率。
要讓每種資源被多用戶任務(wù)充分利用,就需要研究每種資源的特點(diǎn)。對(duì)于單處理機(jī)來(lái)說,它只能執(zhí)行一個(gè)指令流。如果多個(gè)用戶任務(wù)都要使用它,那只有讓多個(gè)用戶任務(wù)的程序分時(shí)地在處理機(jī)上運(yùn)行,也就是說,處理機(jī)交替地運(yùn)行多個(gè)用戶任務(wù)中的程序。這意味著,操作系統(tǒng)要合理調(diào)度多用戶任務(wù)使用處理機(jī)。存儲(chǔ)設(shè)備為程序和數(shù)據(jù)提供存放空間,只要多個(gè)用戶的程序和數(shù)據(jù)按照規(guī)定的位置存放,互不交叉占用,它們是可以共存的,操作系統(tǒng)要做的事就是管理存儲(chǔ)空間,把適用的空間分配給用戶的程序和數(shù)據(jù)使用,當(dāng)用戶任務(wù)訪問這些程序和數(shù)據(jù)時(shí)要能夠找到它們。
針對(duì)不同資源特點(diǎn),資源管理包含兩種資源共享使用的方法:“時(shí)分”和“空分”。
① 時(shí)分就是由多個(gè)用戶進(jìn)程分時(shí)地使用該資源,除了上述的處理機(jī)外,還有很多其他的資源也必須分時(shí)地使用,如外設(shè)控制器、網(wǎng)卡等,這些控制部件包含了控制I/O的邏輯,必須分時(shí)地使用。
② 空分是針對(duì)存儲(chǔ)資源而言,存儲(chǔ)資源的空間可以被多個(gè)用戶進(jìn)程共同以分割的方式占用。
在時(shí)分共享使用的資源當(dāng)中,有如下兩種不同的使用方法:
① 獨(dú)占式使用。獨(dú)占表示某用戶任務(wù)占用該資源后,執(zhí)行對(duì)資源的多個(gè)操作,使用一個(gè)完整的周期。例如,如果多用戶任務(wù)使用打印機(jī),那么對(duì)打印機(jī)的獨(dú)占式使用是指多用戶任務(wù)一定是分時(shí)地使用該打印機(jī)的,每個(gè)用戶任務(wù)使用打印機(jī)時(shí),執(zhí)行了多條打印指令,打印了一個(gè)完整的對(duì)象(如完整的文件)。這里,每個(gè)用戶任務(wù)要執(zhí)行多條打印指令,為了不讓多條打印指令在執(zhí)行過程中被別的打印任務(wù)中斷,用戶任務(wù)需要在執(zhí)行打印指令前申請(qǐng)獨(dú)占該打印機(jī)資源,執(zhí)行完所有打印指令后再釋放。
② 分時(shí)式共享使用。這種共享使用是指用戶任務(wù)占用該資源無(wú)需使用一個(gè)邏輯上的完整周期。例如,對(duì)處理機(jī)的使用,用戶任務(wù)隨時(shí)都可以被剝奪CPU,只要運(yùn)行現(xiàn)場(chǎng)保存好了,下次該用戶任務(wù)再次占用CPU時(shí)就可以繼續(xù)運(yùn)行。再如,對(duì)磁盤的輸入/輸出,當(dāng)一個(gè)用戶任務(wù)讓磁盤執(zhí)行一條I/O請(qǐng)求后,其他用戶任務(wù)又可向磁盤發(fā)I/O請(qǐng)求,系統(tǒng)并不要求某個(gè)用戶任務(wù)的幾個(gè)I/O請(qǐng)求之間不能插入其他用戶任務(wù)的I/O請(qǐng)求。
操作系統(tǒng)應(yīng)針對(duì)不同的資源類型,實(shí)現(xiàn)不同的資源分配和使用策略,并為資源分配、釋放、使用提供相應(yīng)的系統(tǒng)調(diào)用接口。
1.1.4 操作系統(tǒng)提供程序并發(fā)運(yùn)行機(jī)制
用戶可使用計(jì)算機(jī)進(jìn)行科學(xué)計(jì)算、數(shù)據(jù)管理、通信、控制等工作。要實(shí)現(xiàn)所述的這些任務(wù),必須執(zhí)行相應(yīng)的程序。用戶使用處理機(jī)來(lái)執(zhí)行程序,用程序驅(qū)動(dòng)外部設(shè)備來(lái)進(jìn)行數(shù)據(jù)交換,驅(qū)動(dòng)網(wǎng)絡(luò)設(shè)備來(lái)進(jìn)行通信。用戶的意圖必須由程序及程序的輸入?yún)?shù)表示出來(lái),為了實(shí)現(xiàn)用戶意圖,必須讓實(shí)現(xiàn)相應(yīng)功能的程序執(zhí)行;為了能讓程序執(zhí)行,需要由操作系統(tǒng)給程序及程序數(shù)據(jù)安排存放空間;為了能提高資源利用率,增加并發(fā)度,還必須能讓多個(gè)用戶程序能分時(shí)占用處理機(jī);為了能夠讓一個(gè)程序還沒運(yùn)行完就讓另一個(gè)程序占用CPU運(yùn)行,就必須保存上一個(gè)程序的運(yùn)行現(xiàn)場(chǎng)。因此,必須要對(duì)實(shí)現(xiàn)各種用戶意圖的各個(gè)程序的執(zhí)行過程進(jìn)行描述和控制。
說明程序執(zhí)行的狀態(tài)、現(xiàn)場(chǎng)、標(biāo)識(shí)等各種信息,有選擇地調(diào)度某個(gè)程序占用CPU運(yùn)行,這些工作必須由操作系統(tǒng)完成,這也是為了實(shí)現(xiàn)程序?qū)PU的分時(shí)使用。
操作系統(tǒng)一般用進(jìn)程機(jī)制來(lái)實(shí)現(xiàn)程序的執(zhí)行。
進(jìn)程是指運(yùn)行當(dāng)中的程序,也就是指程序針對(duì)于某一數(shù)據(jù)集合的執(zhí)行過程。操作系統(tǒng)的進(jìn)程調(diào)度程序決定CPU在各執(zhí)行程序間的切換。操作系統(tǒng)為用戶提供進(jìn)程創(chuàng)建和結(jié)束等的系統(tǒng)調(diào)用功能,使用戶能夠創(chuàng)建新進(jìn)程以運(yùn)行新的程序。操作系統(tǒng)在系統(tǒng)初始化后,會(huì)為每個(gè)可能的系統(tǒng)用戶創(chuàng)建第一個(gè)用戶進(jìn)程,用戶的其他進(jìn)程則可以由先前生成的用戶進(jìn)程通過“進(jìn)程創(chuàng)建”系統(tǒng)調(diào)用陸續(xù)創(chuàng)建,以完成用戶的各種任務(wù)。
在支持交互使用計(jì)算機(jī)的系統(tǒng)中,用戶的第一個(gè)進(jìn)程往往運(yùn)行命令解釋器程序(對(duì)于圖形窗口終端用戶而言,就是具有窗口界面的程序管理器,如Windows操作系統(tǒng)的explorer.exe),這個(gè)程序會(huì)從終端獲得用戶輸入的命令(或用戶單擊執(zhí)行程序圖標(biāo)的信息),再進(jìn)行相應(yīng)的處理,可能會(huì)調(diào)用操作系統(tǒng)的“創(chuàng)建進(jìn)程”系統(tǒng)調(diào)用,創(chuàng)建新進(jìn)程去運(yùn)行實(shí)現(xiàn)命令功能的程序。例如,在Linux操作系統(tǒng)控制的終端上輸入:
$ cp /home/ly/test.c /home/wq/hello.c
那么,這一行字符串會(huì)由命令解釋器程序獲得,它會(huì)創(chuàng)建一個(gè)子進(jìn)程,由子進(jìn)程去運(yùn)行cp實(shí)用程序,由cp實(shí)用程序建立一個(gè)新文件/home/wq/hello.c,并把/home/ly/test.c文件的內(nèi)容讀出來(lái),寫入hello.c中。
- 會(huì)聲會(huì)影X5視頻剪輯高手速成
- Python Artificial Intelligence Projects for Beginners
- PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)
- 深度學(xué)習(xí)中的圖像分類與對(duì)抗技術(shù)
- Arduino &樂高創(chuàng)意機(jī)器人制作教程
- 大數(shù)據(jù)技術(shù)與應(yīng)用
- 西門子變頻器技術(shù)入門及實(shí)踐
- Visual FoxPro數(shù)據(jù)庫(kù)基礎(chǔ)及應(yīng)用
- 計(jì)算機(jī)與信息技術(shù)基礎(chǔ)上機(jī)指導(dǎo)
- 計(jì)算機(jī)組網(wǎng)技術(shù)
- 生物3D打印:從醫(yī)療輔具制造到細(xì)胞打印
- PowerMill 2020五軸數(shù)控加工編程應(yīng)用實(shí)例
- Unreal Development Kit Game Design Cookbook
- Windows 7故障與技巧200例
- 網(wǎng)站規(guī)劃與網(wǎng)頁(yè)設(shè)計(jì)