自考操作系統(tǒng)原理 第三章 處理器管理_第1頁
自考操作系統(tǒng)原理 第三章 處理器管理_第2頁
自考操作系統(tǒng)原理 第三章 處理器管理_第3頁
自考操作系統(tǒng)原理 第三章 處理器管理_第4頁
自考操作系統(tǒng)原理 第三章 處理器管理_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

處理器管理什么是多道程序設(shè)計讓多個計算問題同時裝入一個計算機系統(tǒng)的主存儲器并行執(zhí)行,這種程序設(shè)計技術(shù)稱為多道程序設(shè)計。這種計算機系統(tǒng)稱為多道程序設(shè)計系統(tǒng),簡稱為多道系統(tǒng)。采用多道程序設(shè)計技術(shù)要注意下面三方面問題:存儲保護:保證各道程序互不侵犯程序浮動:程序放在主存的任意區(qū)域都能正確執(zhí)行,甚至在執(zhí)行過程中改變存儲區(qū)都不受影響,這種技術(shù)稱為程序浮動。資源的分配和調(diào)度:競爭處理器、外圍設(shè)備為什么要采用多道程序設(shè)計程序的順序執(zhí)行假設(shè)一個程序由輸入、處理、輸出組成,分別用時t0,t1,t2輸入處理打印t0t1t2t0t1t2111222為什么要采用多道程序設(shè)計程序的并行執(zhí)行現(xiàn)代計算機中的硬件使得處理機與外設(shè)具備了并行工作的能力。輸入處理打印t0t1t2111222為什么要采用多道程序設(shè)計采用多道程序設(shè)計技術(shù)后,能提高整個系統(tǒng)的效率,具體表現(xiàn)為:提高了處理機利用率,從而提高單位時間的算題量充分利用外設(shè)資源發(fā)揮了處理器和外圍設(shè)備以及外圍設(shè)備之間的并行工作能力提高資源的利用率,增加了單位時間內(nèi)的算題量,從而提高了吞吐量采用多道程序設(shè)計應(yīng)注意的問題可能延長程序執(zhí)行時間兩道計算問題A和BA:計算50ms,打印100ms,計算50ms,打印100msB:計算50ms,輸入80ms,計算100ms,打印100ms如果兩道程序分別單獨執(zhí)行(順序)A執(zhí)行總共需要300ms,占用處理機100msB執(zhí)行總共需要330ms,占用處理機150ms處理機的利用率為

(100+150)/(300+330)=250/630=39.7%采用多道程序設(shè)計應(yīng)注意的問題兩道計算問題A和BA:計算50ms,打印100ms,計算50ms,打印100msB:計算50ms,輸入80ms,計算100ms,打印100ms輸入處理打印050150300400100180ABAB200AABB處理機的利用率為

(100+150)/400=250/400=62.5%A總共花費300msB總共花費350ms,比單道時多花20ms采用多道程序設(shè)計應(yīng)注意的問題并行道數(shù)和系統(tǒng)效率不成正比首先,主存空間限制同時裝入的程序數(shù)量其次,外設(shè)的數(shù)量也是制約條件第三,多個程序同時要求同一資源多道程序能提高資源使用效率,增加單位時間的算題量,但對于單個問題來說,從算題開始到全部完成計算的時候可能要延長。確定并行道數(shù)時,應(yīng)綜合考慮系統(tǒng)的資源配置和用戶對資源的需求。進程的定義程序是具有獨立功能的一組指令或一組語句的集合,或者說是指出處理器執(zhí)行操作的步驟。程序的執(zhí)行必須依賴于一個實體---數(shù)據(jù)集。把一個程序在一個數(shù)據(jù)集上的一次執(zhí)行稱為一個進程。程序是靜態(tài)的文本,進程是動態(tài)的過程,進程包括程序和程序處理的對象(數(shù)據(jù)集)。為什么要引入進程提高資源的利用率把一個計算問題分成n個獨立執(zhí)行的程序模塊,例如輸入進程、打印進程、處理進程,進程間可以并行工作,提高系統(tǒng)的利用率正確描述程序的執(zhí)行情況假設(shè)有編譯程序P,將c語言的源文件編譯為目標文件,使用P編譯a.c和b.c,兩個并行編譯a.c編譯b.ct0t1第1條指令第n條指令,暫停第1條指令如何描述t1時刻P程序的狀態(tài)呢?正在等待I/O操作完成?還是開始編譯b.c?引入進程后,P為a.c服務(wù)時的進程稱為Pa,P為b.c服務(wù)時的進程稱為Pb。Pa的狀態(tài)是等待I/O,Pb的狀態(tài)是開始執(zhí)行為什么要引入進程在操作系統(tǒng)中,尤其是采用了多道程序設(shè)計的系統(tǒng)中,引入進程是非常重要的。通常把進程分成系統(tǒng)進程和用戶進程兩大類。把完成操作系統(tǒng)功能的進程稱為系統(tǒng)進程,完成用戶功能的進程稱為用戶進程。進程的屬性動態(tài)性多個不同的進程可以包含相同的程序把一個能被多個用戶同時調(diào)用的程序稱為可再入的程序。可再入程序必須是純代碼的,在執(zhí)行中自身不變。一個可再入的程序要求調(diào)用者提供工作區(qū),以保證程序以同樣的方式為各用戶服務(wù)。編譯程序和操作系統(tǒng)都是可再入的程序。進程可以并發(fā)執(zhí)行可重入代碼(Reentrycode),也叫純代碼(Purecode)是一種允許多個進程同時訪問的代碼可重入就是,一個函數(shù)沒有執(zhí)行完成,由于外部因素或內(nèi)部調(diào)用,又一次進入該函數(shù)執(zhí)行??芍厝氪a,必須保證資源的互不影響的使用,比如全局變量,系統(tǒng)資源等??芍厝胱詈唵蔚睦斫饩褪侨魏巫兞慷际蔷植孔兞?。可重入指函數(shù)在運行過程中,被中斷打斷后,待返回時仍然能夠正常運行。這就需要在編寫代碼時注意全局變量和公用資源的使用進程的基本狀態(tài)進程有三種基本調(diào)度狀態(tài)就緒狀態(tài)(ready):進程已獲得除處理機外的所需資源,只要分配處理器就可執(zhí)行。運行狀態(tài)(running):進程已獲得處理機,正在執(zhí)行。等待/阻塞狀態(tài)(blocking):進程在運行過程中,因等待某一事件(如等待某一輸入輸出操作完成)而暫停的狀態(tài)稱為阻塞狀態(tài),運行等待就緒選中落選等待某一事件等待的時間發(fā)生進程的三個特性動態(tài)性:執(zhí)行過程中狀態(tài)不斷發(fā)生變化并發(fā)性:進程可同時執(zhí)行,輪流占用處理器異步性:執(zhí)行速度不可預(yù)知進程控制塊為了標識進程,記錄各個進程執(zhí)行時的情況,操作系統(tǒng)在創(chuàng)建進程時為每個進程設(shè)置一個進程控制塊(ProcessControlBlock,簡稱PCB)。不同的操作系統(tǒng),進程控制塊記錄信息的內(nèi)容與數(shù)量是不相同的。一般情況下,進程控制塊應(yīng)包含四類信息進程名/編號進程狀態(tài)等待原因進程程序存放位置進程數(shù)據(jù)存放位置通用寄存器內(nèi)容程序狀態(tài)字寄器內(nèi)容控制寄存器內(nèi)容進程優(yōu)先級隊列指針標識信息說明信息現(xiàn)場信息管理信息進程的創(chuàng)建和撤銷每個進程都有生命周期,即從創(chuàng)建到消亡。進程的創(chuàng)建當系統(tǒng)為一個程序分配了一個工作區(qū)和建立了一個進程控制塊后就創(chuàng)建了一個進程。進程控制塊是進程存在的標識,一個剛被創(chuàng)建的進程其初始狀態(tài)是就緒態(tài)。進程的創(chuàng)建和撤銷進程的撤銷當一個進程完成了特定任務(wù)后,系統(tǒng)收回這個進程所占的工作區(qū)和取消其進程控制塊,就撤銷了該進程。操作系統(tǒng)中往往設(shè)計一些能完成特定功能且不可中斷的過程,這些不可中斷的過程稱為原語。用于進程控制的原語有:創(chuàng)建原語:為一個程序分配一個工作區(qū)和建立一個進程控制塊,并設(shè)置該進程為就緒狀態(tài)。撤銷原語:一個進程完成工作后,收回它的工作區(qū)和進程控制塊阻塞原語:進程運行過程中發(fā)生等待事件,把進程改為等待態(tài)喚醒原語:當進程等待的事件發(fā)生時,把進程的狀態(tài)改為就緒態(tài)進程隊列的鏈接為了便于管理,經(jīng)常把處于相同狀態(tài)的進程鏈接在一起,稱為進程隊列。進程隊列可以用進程控制塊的鏈接來形成,同一進程隊列中,通過進程控制塊中的隊列指針聯(lián)系起來。鏈接方式有兩種:單向鏈接和雙向鏈接。進程隊列的鏈接PCBAPCBBPCBC進程A進程B進程C隊首指針0單向鏈接PCBAPCBBPCBC進程A進程B進程C隊首指針0雙向鏈接0向后指針向前指針進程隊列的鏈接一個剛被創(chuàng)建的進程,初始狀態(tài)為“就緒態(tài)”,置于就緒隊列中。如果一個進程被選中占用處理機,就從就緒隊列中退出轉(zhuǎn)換為“運行態(tài)”。運行過程中可能因為等待I/O傳輸,進入等待隊列。IO傳輸結(jié)束,進程又退出等待隊列進入就緒隊列。一個進程從所在隊列中退出稱為出隊,進入指定的隊列中稱為入隊,系統(tǒng)負責進程入隊和出隊的工作稱為隊列管理。出隊過程-隊首進程出隊PCBAPCBBPCBC進程A進程B進程C隊首指針00PCBBPCBC進程B進程C隊首指針001、把A進程的后續(xù)進程B的向前指針改為02、把A進程的向后指針(PCBB地址)送人隊首指針單元出隊過程-非隊首非隊尾進程出隊PCBAPCBBPCBC進程A進程B進程C隊首指針001、把B進程的向后指針送入A進程的向后指針。2、把B進程的向前指針送入C進程的向前指針。PCBAPCBC進程A進程C隊首指針00出隊過程-隊尾進程出隊PCBAPCBBPCBC進程A進程B進程C隊首指針001、把B進程的向后指針改為02、把C進程的向前指針送入隊首指針。PCBAPCBB進程A進程B隊首指針00UNIX系統(tǒng)中的進程UNIX不區(qū)分系統(tǒng)進程和用戶進程,UNIX的進程既可以執(zhí)行用戶程序,又可以執(zhí)行用戶程序。UNIX的進程在執(zhí)行用戶程序時在用戶態(tài)執(zhí)行,執(zhí)行操作系統(tǒng)程序時在核心態(tài)執(zhí)行。UNIX進程的組成UNIX的進程由三部分組成進程控制塊正文段:可供多個進程共享的程序數(shù)據(jù)段:進程執(zhí)行時的非共享程序和程序執(zhí)行時用到的數(shù)據(jù)UNIX的進程控制塊為了節(jié)省進程控制塊所占的主存空間,UNIX把每個進程控制塊分成兩部分進程基本控制塊:常駐主存,記錄了進程調(diào)度時必須使用的一些信息,進程基本控制塊的數(shù)據(jù)結(jié)構(gòu)稱為proc結(jié)構(gòu)進程擴充控制塊:非常駐主存,進程不占用處理器時,不會對這部分內(nèi)容進行查詢。這部分內(nèi)容被存放在磁盤上(稱為“對換區(qū)”的存儲區(qū)域),它隨著用戶程序和數(shù)據(jù)裝入或調(diào)出主存,它的數(shù)據(jù)結(jié)構(gòu)稱為user結(jié)構(gòu)。進程基本控制塊進程基本控制塊proc結(jié)構(gòu)的主要信息:標識信息:包括用戶標識和進程標識進程非常駐主存部分的信息:通過這些信息可以找到進程的非常駐部分有關(guān)進程調(diào)度的信息:狀態(tài)、標志、優(yōu)先級其他信息進程擴充控制塊進程控制塊的信息標識現(xiàn)場保護主存管理文件讀寫系統(tǒng)調(diào)用進程控制與管理每個進程都有一個專用的user區(qū),存放進程擴充控制塊。僅當占用處理器的進程核心態(tài)運行時才能訪問自己的user區(qū)。正文段在UNIX中把可供多個進程共享的程序稱為進程的正文段。正文段是可再入程序,它由不可被修改的程序和常數(shù)組成。為了管理可共享的正文段,UNIX設(shè)置了一張正文表text。X_caddrX_iptrp_addrp_textpproc[]p_spt磁盤文件fileinodetext[]X_count請求正文段正文段主存頁表數(shù)據(jù)段進程執(zhí)行時的非共享程序和程序執(zhí)行時用到的數(shù)據(jù)。UNIX的數(shù)據(jù)段劃分為三部分用戶棧區(qū):進程在用戶態(tài)的工作區(qū)用戶數(shù)據(jù)區(qū)系統(tǒng)工作區(qū)核心棧:進程在核心態(tài)的工作區(qū)user區(qū):存放進程擴充控制塊UNIX進程狀態(tài)UNIX系統(tǒng)中,進程按狀態(tài)鏈入進程隊列中,同一隊列中的進程用進程基本塊中的p_link鏈接在一起。在UNIX系統(tǒng)中,進程有如下幾種狀態(tài):運行狀態(tài)進程正占據(jù)處理器運行,當進程執(zhí)行用戶程序時在用戶態(tài)運行;發(fā)生中斷或者請求系統(tǒng)調(diào)用時就要執(zhí)行系統(tǒng)程序,而轉(zhuǎn)入核心態(tài)運行。就緒狀態(tài)占用處理器一段時間,被剝奪處理器,該進程便處于就緒態(tài)。該進程可能被保留在主存中,也有可能被換出到磁盤”對換區(qū)“中。睡眠后被喚醒,處于就緒態(tài)UNIX進程狀態(tài)睡眠狀態(tài)為了等待某事件讓出處理機便進入睡眠狀態(tài),進程睡眠時可能駐留在內(nèi)存,也有可能被換到磁盤”對換區(qū)“中。創(chuàng)建狀態(tài)使用系統(tǒng)調(diào)用fork創(chuàng)建進程,創(chuàng)建過程中,處于變遷階段的狀態(tài)稱為創(chuàng)建狀態(tài),創(chuàng)建狀態(tài)是進程的初始態(tài),最終會變?yōu)榫途w態(tài)。僵死狀態(tài)進程消亡前的暫時狀態(tài),進程可以調(diào)用exit終止自己,進程終止時變處于僵死狀態(tài),它是進程的最后狀態(tài),不會發(fā)生轉(zhuǎn)換。回收資源時,進程就消亡。UNIX進程樹系統(tǒng)啟動后,首先把UNIX的核心程序裝入主存。核心程序完成自身初始化工作后,創(chuàng)建系統(tǒng)的第一個進程-0號進程。0號進程始終在核心態(tài)運行,功能是進程進程調(diào)度和讓進程在主存與磁盤上進行交換,故也稱0號進程為交換進程。0號進程創(chuàng)建1號進程,1號進程被稱為初始化進程。1號進程在用戶態(tài)運行。1號進程為每個用戶創(chuàng)建一個login進程,分別處理各用戶的登錄過程。若用戶注冊登錄成功,login進程為用戶創(chuàng)建shell進程。UNIX的進程樹被創(chuàng)建的進程稱為創(chuàng)建者的子進程。0號進程和1號進程是進程簇的老祖宗,系統(tǒng)運行期永不消亡。Shell進程是每個終端用戶服務(wù)的進程的祖先。進程的創(chuàng)建在UNIX中,除了0號和1號進程,其他進程總是使用系統(tǒng)調(diào)用fork來創(chuàng)建進程,形成父子關(guān)系。父進程和子進程可以并發(fā)執(zhí)行,子進程可以共享父進程的正文段和已打開的文件。由fork創(chuàng)建的子進程是其父進程的一個映像,除了進程的狀態(tài)、標識、與時間有關(guān)的控制項以外,全部復制父進程的proc、user、棧和數(shù)據(jù)區(qū)。Shell進程while(true){

read_command(command,paras);//接收用戶輸入的命令

n=fork();//創(chuàng)建子進程(用來執(zhí)行用戶輸入的命令)

if(n){

wait(status);//如果n不是0,shell進程等待

}else{//如果n是0exec(command,paras,0);//子進程執(zhí)行接收的命令

exit(status);//子進程終止

}}既包含shell進程的代碼也有其子進程的代碼i=newproc();//創(chuàng)建子進程,返回0if(i){return0;}else{return子進程id;}父fork()while(true){

read_command(command,paras);n=fork();

if(n){

父要執(zhí)行的代碼

}else{

子要執(zhí)行的代碼

}}父進程while(true){

read_command(command,paras);n=fork();

if(n){

父要執(zhí)行的代碼

}else{

子要執(zhí)行的代碼

}}子進程fork返回給父進程的是子進程的標識號i=newproc();//返回1if(i){return0;}else{return子進程id;}子forkfork返回給子進程的是0Fork()在看Linux源代碼時,遇到的fork()函數(shù)實在是太奇怪了,調(diào)用一次,竟然會對子進程和父進程分別返回兩個不同的值,令人費解,一個函數(shù)怎么會有兩個返回值呢。

fork()并不是進行進程切換,而是復制一個當前進程。舉例來說,假如初始進程號為100,當進入fork()系統(tǒng)調(diào)用后,操作系統(tǒng)就把100號進程一模一樣地復制出來一個新的進程101號。所謂一模一樣,是指100號進程與101號進程所包含的任何信息,例如變量的值,空間分配,特別是正在執(zhí)行的語句等等都相同。這時你的一套代碼便同時在這兩個進程中執(zhí)行,就象一個EXE文件被同時執(zhí)行了兩次一樣。由于兩個進程下一步要執(zhí)行的語句都是從fork()返回,這時操作系統(tǒng)就特意讓100號進程中的fork()返回101,而101號進程中的fork()返回0,這樣一套代碼就能夠分辨清楚到底是處在哪個進程中了。進程的終止UNIX為每個用戶創(chuàng)建的第一個進程是shell進程。Shell進程forkwaitexec父進程子進程exit子進程終止Shell進程UNIX進程的換進換出為了讓處理器上運行的進程能夠快速的存取與它有關(guān)的信息,該進程的所有信息全部放在主存中。但是,一個進程讓出處理器時,如果主存空間緊張,就可以把該進程的大部分信息(常駐主存部分除外)送到磁盤的對換區(qū)中。主存中有足夠的空間時,又可以把對換區(qū)中處于就緒狀態(tài)的進程裝入主存。在UNIX中經(jīng)常要發(fā)生進程在主存與磁盤間的轉(zhuǎn)換,這項工作稱為進程的換進換出。換進換出工作由0號進程完成。換進換出策略正在使用處理器的進程放在主存。不占用處理器的進程可以被換出先換睡眠進程再換就緒進程”就緒且換出“狀態(tài)的進程被換進主存按在對換區(qū)駐留時間的長短直至全部換進,或者主存空間不夠且沒有進程可換出UNIX進程的睡眠與喚醒UNIX進程在執(zhí)行時由于申請資源得不到滿足或者等待某事件而進入睡眠狀態(tài),待資源可以滿足或等待的事情發(fā)生才被喚醒。進程喚醒后轉(zhuǎn)為就緒態(tài),如果此時處于磁盤對換區(qū),則它仍保留在對換區(qū)中處于就緒且換出狀態(tài)。UNIX進程的睡眠進程總是從”核心態(tài)運行“變成”在主存睡眠“。一個進程需要睡眠時,調(diào)用sleep使其進程睡眠狀態(tài),且將其鏈入睡眠隊列。當sleep程序讓一個進程進入睡眠狀態(tài)后,sleep需要判斷runin標志,若有,表示磁盤有進程要換進,但交換進程在睡眠,當前的進程進入睡眠態(tài),便成了可換出的進程。Sleep要喚醒交換進程,清除runin標志。UNIX進程的喚醒調(diào)用wakeup程序喚醒等待的進程,被喚醒的進程退出睡眠隊列,狀態(tài)修改為就緒。在主存睡眠被喚醒的進程進入就緒隊列,在磁盤對換區(qū)睡眠的進程被喚醒后仍保留在對換區(qū),進入就緒且換出隊列。如果在對換區(qū)有進程被喚醒,wakeup程序要檢查runout標志,若有,表示交換進程沒找到可換進的進程而在睡眠,現(xiàn)在有進程處于就緒態(tài)了,喚醒交換進程,以使對換區(qū)中的進程有機會被換進主存。什么是中斷一個進程占用處理機運行時,由于自身或外界的原因使運行被打斷,讓操作系統(tǒng)處理所出現(xiàn)的事件,到適當?shù)臅r候再讓被打斷的進程繼續(xù)運行。稱這個進程在運行中被“中斷”了,引起中斷的事件稱為中斷源,對出現(xiàn)的事件進行處理的程序稱為中斷處理程序。中斷源為了獲得CPU服務(wù)而向CPU發(fā)出的請求信息,稱為中斷請求CPU檢測到中斷請求信號轉(zhuǎn)向中斷處理子程序的過程叫做中斷響應(yīng)。被中斷的主程序的位置稱為斷點中斷處理子程序做的事情叫做中斷處理。中斷處理子程序結(jié)束后返回被中斷的位置的過程叫做中斷返回。中斷類型從中斷事件的性質(zhì)來說,可以分成以下兩大類:強迫性中斷事件:不是正在運行的程序所期待的,由于外部的請求或者意外事故而迫使正在運行的進程被打斷。自愿性中斷事件:正在運行的進程所期望的中斷事件,是正在運行的進程執(zhí)行一條“訪管指令”請求系統(tǒng)調(diào)用所引起的中斷。自愿性中斷也稱訪管中斷。中斷請求各種外部中斷請求信號通過中斷控制器匯集到CPU。中斷控制器就是在一個計算機系統(tǒng)中專門用來管理中斷的器件,它的功能是接收外部中斷源的中斷請求中斷控制器對中斷請求進行處理后(排優(yōu))再向CPU發(fā)出中斷請求,然后則由CPU響應(yīng)中斷并進行處理。中斷響應(yīng)CPU檢測到中斷請求信號轉(zhuǎn)向中斷處理子程序的過程叫做中斷響應(yīng)。檢查有沒有中斷請求若有,暫停現(xiàn)行進程,保護被中斷進程的斷點啟動操作系統(tǒng)的中斷處理程序檢查是否有中斷內(nèi)部中斷可以CPU由內(nèi)部邏輯電路直接提出中斷字寄存器中斷字寄存器初值為0,有中斷發(fā)生時,根據(jù)具體事件將相應(yīng)的位置置1中斷裝置只要檢查中斷字寄存器就能知道是否有中斷發(fā)生。保護斷點每個處理器設(shè)置一個用來存放當前運行進程的PSW的寄存器,稱為程序狀態(tài)字寄存器。程序狀態(tài)字包含三部分內(nèi)容程序基本狀態(tài)指令地址:下一條指令地址條件碼:條件碼目態(tài)/管態(tài)等待/計算中斷碼中斷屏蔽位啟動中斷處理程序根據(jù)中斷類型碼,查詢中斷向量表,得到中斷處理程序地址。CPU轉(zhuǎn)而執(zhí)行中斷處理子程序。中斷過程當前PSWCPU中斷請求堆棧中斷碼:01當前PSW中斷碼:01查中斷向量表獲得中斷處理程序地址中斷類型中斷處理程序入口程序01處理01號中斷的程序的PSW02…處理02號中斷的程序的PSW..保護斷點,把斷點PSW壓入堆棧處理01號中斷的PSW中斷處理操作系統(tǒng)的中斷處理程序?qū)χ袛嗍录M行處理,中斷處理程序主要工作有如下幾方面:保護被中斷進程現(xiàn)場通用寄存器、控制寄存器、舊PSW內(nèi)容保存到進程控制塊中分析中斷原因查詢舊的PSW中的中斷碼,分析具體的中斷原因處理發(fā)生的中斷交給相應(yīng)的子程序處理中斷優(yōu)先級和中斷屏蔽中斷裝置按照預(yù)定的順序響應(yīng)同時出現(xiàn)的中斷事件,這個預(yù)定的順序稱為“中斷優(yōu)先級”。中斷裝置先響應(yīng)優(yōu)先級高的,再響應(yīng)優(yōu)先級低的。中斷處理程序在處理的過程中,又響應(yīng)了另一個中斷事件,會形成多重嵌套處理。如果希望在一個中斷處理程序沒有結(jié)束前,不響應(yīng)其他中斷事件,或者只響應(yīng)比當前級別高的中斷事件,采用中斷屏蔽技術(shù)。有些中斷是不可屏蔽的,例如自愿性中斷。UNIX系統(tǒng)的中斷技術(shù)UNIX把可能出現(xiàn)的事件分成兩大類:中斷事件:出現(xiàn)的事件與正在運行的程序無關(guān)異常情況:出現(xiàn)的事件與正在運行的程序有關(guān)處理器狀態(tài)字UNIX用一個32位組成的字作為處理器狀態(tài)字ps,類似于PSW中斷響應(yīng)保護斷點程序計數(shù)器里的舊pc和處理器狀態(tài)字寄存器的舊ps保存。轉(zhuǎn)到中斷處理程序按事件查處理程序入口表,取出處理程序地址(新pc),送到程序計數(shù)器,再取到處理器狀態(tài)字(新ps)送到處理器狀態(tài)字寄存器中斷屏蔽如果出現(xiàn)了異常情況(0級),不管當前ps中的中斷優(yōu)先級是多少,都要響應(yīng)。0級以外的事件,不響應(yīng)比當前ps級別低的請求中斷處理過程對異常情況進行處理時,處理器的中斷優(yōu)先級一般不改變,而在對中斷情況進程處理時,可以修改處理器的中斷優(yōu)先級。對異常情況的處理在進程的核心棧進行,對于中斷事件的處理,則在系統(tǒng)的中斷棧上進行?,F(xiàn)場保護舊pc和舊ps、通用寄存器內(nèi)容保存到中斷進程的核心棧中中斷處理過程分析處理異常情況處理過程在核心態(tài)發(fā)生異常,表示系統(tǒng)程序出了問題,等待系統(tǒng)管理員維護在用戶態(tài)發(fā)生異常,分析是否是請求系統(tǒng)調(diào)用,若是,按系統(tǒng)調(diào)用處理;否則交給用戶自己處理中斷事件處理原則對于I/O中斷先判斷來自哪個設(shè)備,分析中斷原因。如果是正常結(jié)束,則喚醒等待此設(shè)備的進程中斷處理過程恢復現(xiàn)場如果在核心態(tài)被中斷的,則完成中斷處理后把保存在該進程核心棧中的現(xiàn)場信息(pc,ps,通用寄存器)送回處理器,繼續(xù)執(zhí)行被中斷進程。如果是在用戶態(tài)運行時被中斷,檢查有無優(yōu)先級更高的進程就緒,如有,調(diào)度其運行;若無,恢復現(xiàn)場,讓被中斷的進程繼續(xù)。處理器的兩級調(diào)度在批處理操作系統(tǒng)控制下的作業(yè)稱為批處理作業(yè),若干個用戶作業(yè)組成的作業(yè)流成批進入計算機系統(tǒng),且把他們存放在磁盤的專用區(qū)域中等待處理。磁盤上用來存放作業(yè)信息的專用區(qū)域稱為輸入井,輸入井中等待處理的作用稱為后備作業(yè)。把從輸入井中選擇后備作業(yè)裝入主存的工作稱為作業(yè)調(diào)度。作業(yè)進入主存后,創(chuàng)建了多個進程,進程初始狀態(tài)為“就緒”,從就緒進程中選擇一個進程占用處理器的工作稱為進程調(diào)度。批處理作業(yè)調(diào)度算法批處理系統(tǒng)應(yīng)該怎樣從輸入井中選擇作業(yè)裝入主存呢?設(shè)計調(diào)度算法的原則公平性:對用戶公平平衡使用資源:盡可能使系統(tǒng)的資源都處于忙碌極大的流量:在單位時間內(nèi)盡可能為更多的作業(yè)服務(wù)作業(yè)調(diào)度必要條件系統(tǒng)現(xiàn)有的尚未分配的資源可以滿足被選作業(yè)的資源要求批處理作業(yè)調(diào)度算法作業(yè)的周轉(zhuǎn)時間假定作業(yè)i進入輸入井的時間為Si,若它被選中執(zhí)行,得到計算結(jié)果的時間為Ei,那么這個作業(yè)的周轉(zhuǎn)時間為

Ti=Ei–Si平均周轉(zhuǎn)時間

先來先服務(wù)算法先來先服務(wù)算法按照作業(yè)進入輸入井的先后次序來挑選作業(yè),先入井的作業(yè)優(yōu)先被挑選。注意:先入井的不一定被選中,只有滿足必要條件的作業(yè)才能被選中。例如一作業(yè),先進井,但是所需資源不滿足(或不完全滿足),這個作業(yè)會被推遲,而在它之后的作業(yè)可能被選中。09年7月題在單道批處理系統(tǒng)中,有五個作業(yè)進入輸入井的時間及需要執(zhí)行的時間如下表所示,并約定當這五個作業(yè)全部進入輸入井后立即進行調(diào)度,忽略調(diào)度的時間開銷。寫出采用先來先服務(wù)調(diào)度算法時的調(diào)度次序和作業(yè)平均周轉(zhuǎn)時間。作業(yè)號進入輸入井時間需執(zhí)行時間(分鐘)開始執(zhí)行時間(分鐘)結(jié)束執(zhí)行時間(分鐘)周轉(zhuǎn)時間(分鐘)110:004010:4011:2080210:103011:2011:50100310:202011:5012:10110410:302512:1012:35125510:401012:3512:45125調(diào)度次序:1-2-3-4-5平均周轉(zhuǎn)時間為(80+100+110+125+125)/5=108分鐘08年4月題在單道批處理系統(tǒng)中,有五個作業(yè)進入輸入井的時間及需要執(zhí)行的時間如下表所示,并約定第一個作業(yè)進入輸入井后立即進行調(diào)度,忽略調(diào)度的時間開銷。寫出采用先來先服務(wù)調(diào)度算法時的調(diào)度次序和作業(yè)平均周轉(zhuǎn)時間。作業(yè)號進入輸入井時間需執(zhí)行時間(分鐘)開始執(zhí)行時間(分鐘)結(jié)束執(zhí)行時間(分鐘)周轉(zhuǎn)時間(分鐘)A10:0642B10:1830C10:3024D10:3628E10:4212例:考慮資源的先來先服務(wù)算法作業(yè)入井時間計算時間主存要求A10.14215B10.33060C10.52450D10.62410E10.71220入主存時間開始時間結(jié)束時間周轉(zhuǎn)時間10.110.110.80.710.310.811.3111.311.712.11.610.611.311.71.111.312.112.31.6有一個多道程序設(shè)計系統(tǒng),設(shè)供用戶使用的主存空間為100KB,作業(yè)調(diào)度和進程調(diào)度均采用先來先服務(wù)算法,作業(yè)序列如表,假設(shè)第一道作業(yè)進入輸入井后立刻開始調(diào)度調(diào)度次序:A-B-D-C-E平均周轉(zhuǎn)時間為(0.7+1.0+1.6+1.1+1.6)/5=1.2小時08年7月題設(shè)有用戶使用的主存空間200KB,現(xiàn)有一作業(yè)序列如下表所示,若采用多道程序設(shè)計技術(shù),忽略調(diào)度的時間開銷,并假定10:40開始調(diào)度,寫出采用先來先服務(wù)調(diào)度算法時的調(diào)度次序和作業(yè)平均周轉(zhuǎn)時間。作業(yè)入井時間計算時間(分鐘)主存要求(KB)入主存時間開始時間結(jié)束時間周轉(zhuǎn)時間110:005035210:203080310:301090410:352035510:401520先來先服務(wù)總結(jié)有一定公平性,容易實現(xiàn)可能使計算時間短的作業(yè)長時間等待計算時間短的作業(yè)優(yōu)先算法優(yōu)先選擇計算時間短且資源能得到滿足的作業(yè),這種算法能降低作業(yè)的平均周轉(zhuǎn)時間,提高系統(tǒng)的吞吐能力。09年7月題在單道批處理系統(tǒng)中,有五個作業(yè)進入輸入井的時間及需要執(zhí)行的時間如下表所示,并約定當這五個作業(yè)全部進入輸入井后立即進行調(diào)度,忽略調(diào)度的時間開銷。寫出采用最短執(zhí)行時間優(yōu)先算法時的調(diào)度次序和作業(yè)平均周轉(zhuǎn)時間。作業(yè)號進入輸入井時間需執(zhí)行時間(分鐘)開始執(zhí)行時間(分鐘)結(jié)束執(zhí)行時間(分鐘)周轉(zhuǎn)時間(分鐘)110:004012:0512:45165210:103011:3512:05115310:202010:5011:1050410:302511:1011:3565510:401010:4010:5010調(diào)度順序:5-3-4-2-1平均周轉(zhuǎn)時間為(165+115+50+65+10)/5=81分鐘08年4月題在單道批處理系統(tǒng)中,有五個作業(yè)進入輸入井的時間及需要執(zhí)行的時間如下表所示,并約定第一個作業(yè)進入輸入井后立即進行調(diào)度,忽略調(diào)度的時間開銷。寫出采用最短執(zhí)行時間優(yōu)先算法時的調(diào)度次序和作業(yè)平均周轉(zhuǎn)時間。作業(yè)號進入輸入井時間需執(zhí)行時間(分鐘)開始執(zhí)行時間(分鐘)結(jié)束執(zhí)行時間(分鐘)周轉(zhuǎn)時間(分鐘)A10:0642B10:1830C10:3024D10:3628E10:4212例:考慮資源的計算時間短算法作業(yè)入井時間計算時間主存要求A10.14215B10.33060C10.52450D10.62410E10.71220入主存時間開始時間結(jié)束時間周轉(zhuǎn)時間10.110.110.80.710.310.811.3111.311.912.31.810.611.311.71.111.311.711.91.2有一個多道程序設(shè)計系統(tǒng),設(shè)供用戶使用的主存空間為100KB,作業(yè)調(diào)度采用計算時間短的作業(yè)優(yōu)先算法,進程調(diào)度仍按照進入主存的順序依次調(diào)度,作業(yè)序列如表,假設(shè)第一道作業(yè)進入輸入井后立刻開始調(diào)度調(diào)度次序:A-B-D-E-C平均周轉(zhuǎn)時間為(0.7+1+1.8+1.1+1.2)/5=1.16小時08年7月題設(shè)有用戶使用的主存空間200KB,現(xiàn)有一作業(yè)序列如下表所示,若采用多道程序設(shè)計技術(shù),忽略調(diào)度的時間開銷,并假定10:40開始調(diào)度,寫出采用計算時間短的作用優(yōu)先調(diào)度算法時的調(diào)度次序和作業(yè)平均周轉(zhuǎn)時間。作業(yè)入井時間計算時間(分鐘)主存要求(KB)入主存時間開始時間結(jié)束時間周轉(zhuǎn)時間110:005035210:203080310:301090410:352035510:401520計算時間短作業(yè)優(yōu)先算法總結(jié)采用計算時間端的作業(yè)優(yōu)先算法能使平均周轉(zhuǎn)時間最小。需要注意的問題:該算法以用戶估算的作業(yè)時間為準。進入輸入井時間早,但是計算時間長的作業(yè)等待時間長響應(yīng)比高者優(yōu)先算法響應(yīng)比高者優(yōu)先算法綜合考慮等待時間和計算時間等待時間響應(yīng)比=

計算時間采用響應(yīng)比高者優(yōu)先算法進行調(diào)度時,必須先計算輸入井中資源能得到滿足的所有作業(yè)的響應(yīng)比,選最高的優(yōu)先裝入主存。例某單道程序設(shè)計系統(tǒng)中有三個作業(yè)A,B,C,它們到達輸入井的時間和需要的計算時間如表所示,當這三個作業(yè)全部到達輸入井后,若系統(tǒng)以響應(yīng)比高者優(yōu)先調(diào)度算法選擇作業(yè),寫出調(diào)度順序和平均周轉(zhuǎn)時間。作業(yè)名到達輸入井時間計算時間(小時)開始時間結(jié)束時間周轉(zhuǎn)時間A8:501.59:5411:242小時34分B9:000.49:309:5454分C9:301.011:2412:242小時54分9點30分的響應(yīng)比:A:40/90=4/9

B:30/24=5/4C:0/60=09點54分的響應(yīng)比:A:64/90=32/45

C:24/60=2/505年7月題作業(yè)名到達輸入井時間計算時間(小時)開始時間結(jié)束時間周轉(zhuǎn)時間J18.02.0J28.30.5J38.50.1J49.00.4優(yōu)先級調(diào)度算法為每個作業(yè)確定一個優(yōu)先級,資源滿足且優(yōu)先級高的作業(yè)優(yōu)先被選取,同優(yōu)先級的按照先來先服務(wù)進行調(diào)度。優(yōu)先級的確定用戶提出操作系統(tǒng)綜合考慮均衡調(diào)度算法根據(jù)作業(yè)對資源的要求進行分類,作業(yè)調(diào)度從各類作業(yè)中去挑選,盡可能讓使用不同資源的作業(yè)同時執(zhí)行。進程調(diào)度算法一個進程讓出處理器由另一個進程占用處理器的過程稱為進程切換,進程切換是由進程狀態(tài)的變化引起的。

(1)一個進程從運行態(tài)變成等待態(tài)

(2)一個進程從運行態(tài)變成就緒態(tài)

(3)一個進程從等待態(tài)變成就緒態(tài)

(4)一個進程完成工作后被撤銷一個進程狀態(tài)發(fā)生變化或工作結(jié)束后,都要由進程調(diào)度重新分配處理器。進程調(diào)度程序就要按照某種調(diào)度算法從就緒隊列中選擇一個進程占用處理器先來先服務(wù)算法按照進程進入就緒隊列的先后次序選擇可占用處理器的進程。一個進程一旦占用處理器就一直運行下去,直至完成工作,或者等待某個事件才會讓出處理器。先來先服務(wù)算法可能會使進程等待分配處理器的平均時間較長。例1:用先來先服務(wù)算法計算進程平均等待時間進程需要處理器的時間(ms)開始運行時間(相對)結(jié)束運行時間(相對)等待時間A3030B3363C246306有三個計算型的進程A,B,C依次緊接著進入就緒隊列,它們的優(yōu)先級和需要處理器的時間如下表所示:例2:用先來先服務(wù)算法計算進程平均等待時間進程需要處理器的時間(ms)開始運行時間(相對)結(jié)束運行時間(相對)等待時間A3273027B3242724C240240有三個計算型的進程C,B,A依次緊接著進入就緒隊列,它們的優(yōu)先級和需要處理器的時間如下表所示:10年4月題有五個計算型的進程P1、P2、P3、P4、P5依次緊接著進入就緒隊列,它們的優(yōu)先級和需要處理器的時間如下表所示,約定當所有進程均進入就緒隊列后才開始調(diào)度,且忽略進程進入就緒隊列和進行調(diào)度所花費的時間。寫出采用采用“先來先服務(wù)調(diào)度算法”的進程調(diào)度次序及進程平均等待時間進程需處理器的時間(分鐘)優(yōu)先級開始運行時間(相對)結(jié)束運行時間(相對)等待時間(分鐘)Pl86P211P373P425P552最高優(yōu)先級調(diào)度算法對每個進程給出一個優(yōu)先級,進程調(diào)度總是讓當時具有最高優(yōu)先級的進程先使用處理器。如果一個進程占用處理器時,來了一個比它優(yōu)先級高的進程,如何處理?非搶占式:不管是否有更高級的進程就緒,只要當前占用處理器的進程沒有讓出處理器(結(jié)束、等待),它總能占用處理器運行,直至它讓出處理器,才重新調(diào)度。搶占式:嚴格保證任何時刻最高優(yōu)先級的進程運行,某一進程占用處理器,有一個更高優(yōu)先級的進程就緒,進程調(diào)度程序就要剝奪正在運行的進程的處理器使用權(quán)。適用于實時操作系統(tǒng)。如何確定優(yōu)先級

優(yōu)先級可以固定也可以變化,一般可根據(jù)使用資源的情況、任務(wù)的緊急程度、等待使用處理器的時間、系統(tǒng)效率等。為了調(diào)度方便,就緒隊列中的進程可按優(yōu)先級從大到小排列,有進程就緒時,根據(jù)優(yōu)先級插入隊列的適當位置,這樣進程調(diào)度總是把處理器分配給就緒隊列中的第一個進程優(yōu)先級調(diào)度算法可以和先來先服務(wù)算法混合使用,相同優(yōu)先級的進程可以使用先來先服務(wù)算法10年4月題有五個計算型的進程P1、P2、P3、P4、P5依次緊接著進入就緒隊列,它們的優(yōu)先級和需要處理器的時間如下表所示,約定當所有進程均進入就緒隊列后才開始調(diào)度,且忽略進程進

溫馨提示

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

評論

0/150

提交評論