1.4.2 操作系統(tǒng)功能的實(shí)現(xiàn)模型
操作系統(tǒng)本身是一組程序,像其他程序一樣也在處理器上執(zhí)行,那么,操作系統(tǒng)程序是否組織成進(jìn)程?它是如何控制和怎樣執(zhí)行的呢?下面來討論這個問題。從操作系統(tǒng)的執(zhí)行方式來看,可以把它分成:非進(jìn)程內(nèi)核模型、OS功能(函數(shù))在用戶進(jìn)程內(nèi)執(zhí)行的模型和OS功能(函數(shù))作為獨(dú)立進(jìn)程執(zhí)行的模型3種。
1.非進(jìn)程內(nèi)核模型
許多老式操作系統(tǒng)的實(shí)現(xiàn)采用非進(jìn)程內(nèi)核模型,即操作系統(tǒng)的功能都不組織成進(jìn)程來實(shí)現(xiàn),如 圖1-2所示,該模型包括一個較大的操作系統(tǒng)內(nèi)核程序,進(jìn)程的執(zhí)行在內(nèi)核之外。當(dāng)中斷發(fā)生時,當(dāng)前運(yùn)行進(jìn)程的上下文現(xiàn)場信息將被保存,并把控制權(quán)傳遞給操作系統(tǒng)內(nèi)核。操作系統(tǒng)具有自己的內(nèi)存區(qū)和系統(tǒng)堆棧區(qū),用于控制過程調(diào)用和返回。它將在核心態(tài)執(zhí)行相應(yīng)的操作,并根據(jù)中斷的類型和具體的情況,或者是恢復(fù)被中斷進(jìn)程的現(xiàn)場并讓它繼續(xù)執(zhí)行,或是轉(zhuǎn)向進(jìn)程調(diào)度指派另一個就緒進(jìn)程運(yùn)行。
圖1-2 非內(nèi)核進(jìn)程模型
2.OS功能在用戶進(jìn)程內(nèi)執(zhí)行的模型
小型機(jī)和工作站操作系統(tǒng)(如UNIX等)往往采用OS的所有功能在用戶進(jìn)程內(nèi)執(zhí)行的模型,如圖1-3所示,在這種實(shí)現(xiàn)模型中,大部分操作系統(tǒng)功能組織成一組例行程序供用戶程序調(diào)用,認(rèn)為操作系統(tǒng)例程與用戶進(jìn)程是上下文相關(guān)的,操作系統(tǒng)的地址空間被包含在用戶進(jìn)程的地址空間中;因而,操作系統(tǒng)例行程序也在用戶進(jìn)程的上下文環(huán)境中執(zhí)行。圖1-4給出了OS的所有功能在用戶進(jìn)程內(nèi)執(zhí)行的模型中的進(jìn)程映像,它既包含進(jìn)程控制塊、用戶堆棧、容納用戶程序和數(shù)據(jù)的地址空間等,還包括操作系統(tǒng)內(nèi)核的程序、數(shù)據(jù)和系統(tǒng)堆棧區(qū)。
當(dāng)發(fā)生一次中斷或系統(tǒng)調(diào)用后,處理器狀態(tài)將被置成內(nèi)核模式,控制從用戶進(jìn)程手中被剝奪并傳遞給操作系統(tǒng)例行程序。此時,發(fā)生了模式切換,模式上下文(現(xiàn)場)信息被保存,但是進(jìn)程上下文切換并沒有發(fā)生,操作系統(tǒng)仍在該用戶進(jìn)程中執(zhí)行,提供單獨(dú)的內(nèi)核堆棧用于管理進(jìn)程在核心態(tài)下執(zhí)行時的調(diào)用和返回,操作系統(tǒng)例行程序和數(shù)據(jù)放在共享地址空間,且被所有用戶進(jìn)程共享。
圖1-3 OS 的功能在用戶進(jìn)程內(nèi)執(zhí)行的模型
圖1-4 OS 的所有功能在用戶進(jìn)程內(nèi)執(zhí)行模型的進(jìn)程映像
當(dāng)操作系統(tǒng)例程完成了工作之后,如果讓當(dāng)前進(jìn)程繼續(xù)運(yùn)行的話,就可以做一次模式切換來恢復(fù)執(zhí)行原先被中斷的用戶進(jìn)程。這種技術(shù)提供了不必要通過進(jìn)程上下文切換就可以中斷用戶進(jìn)程來調(diào)用操作系統(tǒng)例行程序的手段。如果發(fā)生進(jìn)程切換,控制就被傳遞給操作系統(tǒng)的進(jìn)程切換例行程序,由它來實(shí)現(xiàn)進(jìn)程切換操作,把當(dāng)前進(jìn)程的狀態(tài)置為非運(yùn)行狀態(tài),而指派另一個就緒進(jìn)程來占有處理器運(yùn)行。需要指出的是,一些系統(tǒng)中進(jìn)程切換例行程序是在當(dāng)前進(jìn)程中執(zhí)行的,而另一些系統(tǒng)則不是。
3.OS功能作為獨(dú)立進(jìn)程執(zhí)行的模型
OS 功能作為獨(dú)立進(jìn)程執(zhí)行的模型把操作系統(tǒng)組織成一組系統(tǒng)進(jìn)程、即操作系統(tǒng)功能是這些系統(tǒng)進(jìn)程集合運(yùn)行的結(jié)果,這些系統(tǒng)進(jìn)程也稱為服務(wù)器或服務(wù)器進(jìn)程,于是與用戶進(jìn)程或其他服務(wù)器進(jìn)程之間構(gòu)成了Client/Server 關(guān)系,Windows 2000/XP采用了這種結(jié)構(gòu)。如圖1-5所示,除了極少部分功能在內(nèi)核模式下運(yùn)行,大部分操作系統(tǒng)功能被組織在一組分離的獨(dú)立進(jìn)程內(nèi)實(shí)現(xiàn),這組進(jìn)程在用戶模式下運(yùn)行,而進(jìn)程切換例行程序的執(zhí)行仍然在進(jìn)程之外。
圖1-5 OS 功能作為獨(dú)立進(jìn)程執(zhí)行的模型
這一實(shí)現(xiàn)模型有很多優(yōu)點(diǎn)。首先,它采用了模塊化的操作系統(tǒng)實(shí)現(xiàn)方法,模塊之間具有最少和簡潔的接口。其次,大多數(shù)操作系統(tǒng)功能被組織成獨(dú)立的進(jìn)程,有利于操作系統(tǒng)的實(shí)現(xiàn)、配置和擴(kuò)充,如性能監(jiān)控程序用來記錄各種資源的利用率和系統(tǒng)中用戶進(jìn)程的執(zhí)行速度,由于這些程序并不提供給進(jìn)程特別的服務(wù),僅僅被操作系統(tǒng)調(diào)用,把它設(shè)計(jì)成一個服務(wù)器進(jìn)程,便可賦予一定的優(yōu)先級,夾在其他進(jìn)程中運(yùn)行。最后,這一結(jié)構(gòu)在多處理器和多計(jì)算機(jī)的環(huán)境下非常有效,一些操作系統(tǒng)服務(wù)可指派到專門處理器上執(zhí)行,有利于系統(tǒng)性能的改進(jìn)。