freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計算機操作系統(tǒng)第3章-文庫吧

2025-04-20 16:15 本頁面


【正文】 某種事件發(fā)生被中止在處理機上的執(zhí)行時,為了以后該進程能在被打斷處恢復執(zhí)行,需要保護當前進程的 CPU現(xiàn)場(或稱進程上下文)。 PCB 中設(shè)有專門的 CPU現(xiàn)場保護結(jié)構(gòu),以存儲退出執(zhí)行時的進程現(xiàn)場數(shù)據(jù)。 總之,進程控制塊 PCB 是系統(tǒng)感知進程存在的唯一實體。通過對 PCB 的操作,給進程分配資源、調(diào)度進程執(zhí)行、釋放進程所占有的各種資源;而完成進程所要求功能的程序段的有關(guān)地址,以及程序段在進程過程中因某種原因被停止執(zhí)行后的現(xiàn)場信息也都在 PCB 中。 由于 PCB 中包含有較多的信息,因此,一個 PCB表往往要占據(jù)較大的存儲空間(一般占幾百到幾千個字節(jié))。在有的系統(tǒng)中,為了減少 PCB對內(nèi)存的占用量,只允許 PCB中最常用的部分,如 CPU現(xiàn)場保護、進程描述信息、控制信息等常駐內(nèi)存。 PCB 結(jié)構(gòu)中的其他部分則存放于外存之中,待該進程將要執(zhí)行時與其他數(shù)據(jù)一起裝入內(nèi)存。 近年來,面向?qū)ο蠹夹g(shù)已被用于操作系統(tǒng)設(shè)計。在面向?qū)ο蟮牟僮飨到y(tǒng)中,進程的描述將采用其他方式。 進程上下文 本節(jié)介紹包括程序段和數(shù)據(jù)集在內(nèi)的上下文的概念。 進程上下文實際上是進程執(zhí)行活動全過程的靜態(tài)描述。具體地說,進程上下文包括計算機系統(tǒng)中與執(zhí)行該進程有關(guān)的各種寄存器的值、程序段在經(jīng)過編譯之后形成的機器指令代碼集(或稱正文段)、數(shù)據(jù)集及各種堆棧值和 PCB結(jié)構(gòu) (圖 )。這里,有關(guān)寄存器和棧區(qū)的內(nèi)容是重要的。例如,沒有程序計數(shù)器 PC和程序狀態(tài)寄存器 PS, CPU將無法知道下條待執(zhí)行指令的地址和控制有關(guān)操作。從 CPU是活動的觀點來靜態(tài)地看一個進程時,必須把有關(guān)寄存器和棧區(qū)的內(nèi)容也包括在其中。無論在何種系統(tǒng)中,進程上下文的各部分都必須按一定的規(guī)則有機地組合起來以便于執(zhí)行。 圖 進程上下文結(jié)構(gòu) 進程上下文可按一定的執(zhí)行層次組合,例如用戶級上下文、系統(tǒng)級上下文等。顯然,一個進程的執(zhí)行是在該進程的上下文中執(zhí)行,而當系統(tǒng)調(diào)度新進程占有處理機時,新老進程的上下文發(fā)生轉(zhuǎn)換。 在 UNIX System Ⅴ 中,進程上下文由用戶級上下文、寄存器上下文以及系統(tǒng)級上下文組成。用戶級上下文由進程的用戶程序段部分編譯而成的用戶正文段、用戶數(shù)據(jù)、用戶棧等組成。而寄存器上下文則由程序寄存器 PC、處理機狀態(tài)字寄存器 PS、棧指針和通用寄存器的值組成。其中 PC給出 CPU 將要執(zhí)行的下條指令的虛地址; PS給出機器與該進程相關(guān)聯(lián)時的硬件狀態(tài),例如當前執(zhí)行模式、能否執(zhí)行特權(quán)指令等;棧指針指向下一項的當前地址,而通用寄存器則用于不同執(zhí)行模式之間的參數(shù)傳遞等。 進程的系統(tǒng)級上下文又分為靜態(tài)部分與動態(tài)部分。這里的動態(tài)部分不是指程序的執(zhí)行,而是指在進入和退出不同的上下文層次時,系統(tǒng)為各層上下文中相關(guān)聯(lián)的寄存器值所保存和恢復的記錄。 系統(tǒng)級上下文的靜態(tài)部分包括 PCB 結(jié)構(gòu)( UNIX系統(tǒng)中的 PCB結(jié)構(gòu)被分為 proc結(jié)構(gòu)和 user結(jié)構(gòu)兩部分)、將進程虛地址空間映射到物理空間用的有關(guān)表格和核心棧。這里,核心棧主要用來裝載進程中所使用系統(tǒng)調(diào)用的調(diào)用序列。 系統(tǒng)級上下文的動態(tài)部分是與寄存器上下文相關(guān)聯(lián)的。進程上下文的層次概念也主要體現(xiàn)在動態(tài)部分中,即系統(tǒng)級上下文的動態(tài)部分可看成是一些數(shù)量變化的層次組成。其變化規(guī)則滿足先進后出的堆棧方式,每個上下文層次在棧中各占一項。 UNIX System Ⅴ 的進程上下文組成如圖 。 圖 UNIX System Ⅴ 進程上下文組成 進程空間 任一進程,都有一個自己的地址空間,把該空間稱為進程空間或虛空間。進程空間的大小只與處理機的位數(shù)有關(guān)。在 UNIX以及 Linux等操作系統(tǒng)中,進程空間還被劃分為用戶空間和系統(tǒng)空間兩大部分。 在進程空間被劃分為兩大部分后,用戶程序在用戶空間內(nèi)執(zhí)行,而操作系統(tǒng)內(nèi)核程序則在進程的系統(tǒng)空間內(nèi)執(zhí)行。 為防止用戶程序訪問系統(tǒng)空間,造成訪問出錯,系統(tǒng)通過程序狀態(tài)寄存器等設(shè)置不同的執(zhí)行模式,即用戶模式和系統(tǒng)模式來進行保護。 進程狀態(tài)及其轉(zhuǎn)換 進程狀態(tài) 一個進程的生命期可以劃分為一組狀態(tài),這些狀態(tài)刻劃了整個進程。系統(tǒng)根據(jù) PCB 結(jié)構(gòu)中的狀態(tài)值控制進程。在進程的生命期內(nèi),一個進程至少具有三種基本狀態(tài),它們是:執(zhí)行狀態(tài)、等待狀態(tài)和就緒狀態(tài)。 處于就緒狀態(tài)的進程已經(jīng)得到除 CPU之外的其他資源,只要由調(diào)度得到處理機,便可立即投入執(zhí)行。 在有些系統(tǒng)中,為了有效地利用內(nèi)存,就緒狀態(tài)又可進一步分為內(nèi)存就緒狀態(tài)和外存就緒狀態(tài)。在這樣的系統(tǒng)中,只有處于內(nèi)存就緒狀態(tài)的進程在得到處理機后才能立即投入執(zhí)行。而處于外存就緒狀態(tài)的進程只有先成為內(nèi)存就緒狀態(tài)后,才可能被調(diào)度執(zhí)行。這種方式明顯地提高了內(nèi)存的利用效率,但反過來也增加了系統(tǒng)開銷和系統(tǒng)復雜性。 在單 CPU系統(tǒng)中,任一時刻處于執(zhí)行狀態(tài)的進程只能有一個。只有處于就緒狀態(tài)的進程經(jīng)調(diào)度選中之后才可進入執(zhí)行狀態(tài)。 在某些操作系統(tǒng)中,一個進程在其生命期內(nèi)的執(zhí)行過程中,總要涉及到用戶程序和操作系統(tǒng)內(nèi)核程序兩部分。因此,進程的執(zhí)行狀態(tài)又可進一步劃分為用戶執(zhí)行狀態(tài)和系統(tǒng)執(zhí)行狀態(tài)。劃分用戶態(tài)和系統(tǒng)態(tài)最主要的原因是要把用戶程序和系統(tǒng)程序區(qū)分開來,以利于程序的共享和保護。顯然,這也是以增加系統(tǒng)復雜度和系統(tǒng)開銷為代價的。 進程因等待某個事件發(fā)生而放棄處理機進入等待狀態(tài)。顯然,等待狀態(tài)可根據(jù)等待事件的種類而進一步劃分為不同的子狀態(tài),例如內(nèi)存等待、設(shè)備等待、文件等待和數(shù)據(jù)等待等。這樣做的好處是系統(tǒng)控制簡單,發(fā)現(xiàn)和喚醒相應(yīng)的進程較為容易。但系統(tǒng)中設(shè)置過多的狀態(tài)又會造成系統(tǒng)參數(shù)和狀態(tài)轉(zhuǎn)換過程的增加。 進程狀態(tài)轉(zhuǎn)換 進程的狀態(tài)反映進程執(zhí)行過程的變化。這些狀態(tài)隨著進程的執(zhí)行和外界條件發(fā)生變化和轉(zhuǎn)換。那么,是什么樣的條件使得進程各狀態(tài)發(fā)生轉(zhuǎn)換呢?示圖給出了三個基本狀態(tài),即就緒狀態(tài)、執(zhí)行狀態(tài)與等待狀態(tài)之間的轉(zhuǎn)換關(guān)系。 事實上,進程的狀態(tài)轉(zhuǎn)換是一個非常復雜的過程。從一個狀態(tài)到另一個狀態(tài)的轉(zhuǎn)換除了要使用不同的控制過程(將在下節(jié)中講述),有時還要借助于硬件觸發(fā)器才能完成。例如,在 UNIX 系統(tǒng)中,從系統(tǒng)態(tài)到用戶態(tài)的轉(zhuǎn)換要借助硬件觸發(fā)器完成。 進程狀態(tài)轉(zhuǎn)換圖 進 程 控 制 進程和處理機管理的一個重要任務(wù)是進程控制。所謂進程控制,就是系統(tǒng)使用一些具有特定功能的程序段來創(chuàng)建、撤消進程以及完成進程各狀態(tài)間的轉(zhuǎn)換,從而達到多進程高效率并發(fā)執(zhí)行和協(xié)調(diào)、實現(xiàn)資源共享的目的。一般地,把系統(tǒng)態(tài)下執(zhí)行的某些具有特定功能的程序段稱為原語。原語可分為兩類:一類是機器指令級的,其特點是執(zhí)行期間不允許中斷。另一類是功能級的,其特點是作為原語的程序段不允許并發(fā)執(zhí)行。這兩類原語都在系統(tǒng)態(tài)下執(zhí)行,且都是為了完成某個系統(tǒng)管理所需要的功能和被高層軟件所調(diào)用。 顯然,系統(tǒng)在創(chuàng)建、撤消一個進程以及要改變進程的狀態(tài)時,都要調(diào)用相應(yīng)的程序段來完成這些功能。那么,這些程序段是不是原語呢?如果它們不是原語,則由上述原語的定義可知,這些程序段是允許并發(fā)執(zhí)行的。然而,如果不加控制和管理地讓這些控制進程狀態(tài)轉(zhuǎn)換及創(chuàng)建和撤消進程的程序段并發(fā)執(zhí)行,則會使得其執(zhí)行結(jié)果失去封閉性和可再現(xiàn)性,從而達不到進程控制的目的。反過來,如果對這些程序段采用下面章節(jié)中所述的控制方法使其在并發(fā)執(zhí)行過程中也能完成進程控制任務(wù)的話,將會大大增加系統(tǒng)的開銷和復雜度。因此,在操作系統(tǒng)中,通常把進程控制用程序段做成原語。用于進程控制的原語有:創(chuàng)建原語、撤消原語、阻塞原語、喚醒原語等。 進程創(chuàng)建與撤消 1. 進程創(chuàng)建 (1) 由系統(tǒng)程序模塊統(tǒng)一創(chuàng)建,例如在批處理系統(tǒng)中,由操作系統(tǒng)的作業(yè)調(diào)度程序為用戶作業(yè)創(chuàng)建相應(yīng)的進程以完成用戶作業(yè)所要求的功能。 (2) 由父進程創(chuàng)建,例如在層次結(jié)構(gòu)的系統(tǒng)中,父進程創(chuàng)建子進程以完成并行工作。 由系統(tǒng)統(tǒng)一創(chuàng)建的進程之間的關(guān)系是平等的,它們之間一般不存在資源繼承關(guān)系。而在父進程創(chuàng)建的進程之間則存在隸屬關(guān)系,且互相構(gòu)成樹型結(jié)構(gòu)的家族關(guān)系。屬于某個家族的一個進程可以繼承其父進程所擁有的資源。另外,無論是哪一種方式創(chuàng)建進程,在系統(tǒng)生成時,都必須由操作系統(tǒng)創(chuàng)建一部分承擔系統(tǒng)資源分配和管理工作的系統(tǒng)進程。 無論是系統(tǒng)創(chuàng)建方式還是父進程創(chuàng)建方式,都必須調(diào)用創(chuàng)建原語來實現(xiàn)。 2. 進程撤消 以下幾種情況導致進程被撤消: (1) 該進程已完成所要求的功能而正常終止。 (2) 由于某種錯誤導致非正常終止。 (3) 祖先進程要求撤消某個子進程。 無論哪一種情況導致進程被撤消,進程都必須釋放它所占用的各種資源和 PCB 結(jié)構(gòu)本身,以利于資源的有效利用。另外,當一個祖先進程撤消某個子進程時,還需審查該子進程是否還有自己的子孫進程,若有的話,還需撤消其子孫進程的 PCB結(jié)構(gòu)和釋放它們所占有的資源。 撤消原語首先檢查 PCB進程鏈或進程家族,尋找所要撤消的進程是否存在。如果找到了所要撤消的進程的 PCB結(jié)構(gòu),則撤消原語釋放該進程所占有的資源之后,把對應(yīng)的 PCB結(jié)構(gòu)從進程鏈或進程家族中摘下并返回給 PCB空隊列。如果被撤消的進程有自己的子進程,則撤消原語先撤消其子進程的 PCB結(jié)構(gòu)并釋放子進程所占用的資源之后,再撤消當前進程的 PCB結(jié)構(gòu)和釋放其資源。 進程的阻塞與喚醒 進程的創(chuàng)建原語和撤消原語完成了進程從無到有,從存在到消亡的變化。被創(chuàng)建后的進程最初處于就緒狀態(tài),然后經(jīng)調(diào)度程序選中后進入執(zhí)行狀態(tài)。這里主要介紹實現(xiàn)進程的執(zhí)行狀態(tài)到等待狀態(tài),又由等待狀態(tài)到就緒狀態(tài)轉(zhuǎn)換的兩種原語,即阻塞原語與喚醒原語。 阻塞原語在一個進程期待某一事件發(fā)生,但發(fā)生條件尚不具備時,被該進程自己調(diào)用來阻塞自己。阻塞原語在阻塞一個進程時,由于該進程正處于執(zhí)行狀態(tài),故應(yīng)先中斷處理機和保存該進程的 CPU現(xiàn)場。然后將被阻塞進程置“阻塞”狀態(tài)后插入等待隊列中,再轉(zhuǎn)進程調(diào)度程序選擇新的就緒進程投入運行。阻塞原語的實現(xiàn)過程如圖。 這里,轉(zhuǎn)進程調(diào)度程序是很重要的,否則,處理機將會出現(xiàn)空轉(zhuǎn)而浪費資源。 阻塞原語圖 當?shù)却犃兄械倪M程所等待的事件發(fā)生時,等待該事件的所有進程都將被喚醒。喚醒一個進程有兩種方法:一種是由系統(tǒng)進程喚醒。另一種是由事件發(fā)生進程喚醒。當由系統(tǒng)進程喚醒等待進程時,系統(tǒng)進程統(tǒng)一控制事件的發(fā)生并將“事件發(fā)生”這一消息通知等待進程。從而使得該進程因等待事件已發(fā)生而進入就緒隊列。由事件發(fā)生進程喚醒時,事件發(fā)生進程和被喚醒進程之間是合作關(guān)系。因此,喚醒原語既可被系統(tǒng)進程調(diào)用,也可被事件發(fā)生進程調(diào)用。稱調(diào)用喚醒原語的進程為喚醒進程。喚醒原語首先將被喚醒進程從相應(yīng)的等待隊列中摘下,將被喚醒進程置為就緒狀態(tài)之后,送入就緒隊列。在把被喚醒進程送入就緒隊列之后,喚醒原語既可以返回原調(diào)用程序,也可以轉(zhuǎn)向進程調(diào)度,以便讓調(diào)度程序有機會選擇一個合適的進程執(zhí)行。如圖: 喚醒原語圖 進 程 互 斥 資源共享所引起的制約 進程的并發(fā)執(zhí)行不僅僅是用戶程序的執(zhí)行開始時間的隨機性和提高資源利用率的結(jié)果,也是資源有限性導致資源的競爭與共享對進程的執(zhí)行過程進行制約所造成的。 1. 臨界區(qū) 在描述一個程序或算法時,總是認為存在一個偽處理機,可以按程序或算法所規(guī)定的步驟來執(zhí)行該程序或算法的。但是,事實上,在實際的系統(tǒng)中則往往不是這樣。一般說來,即使在程序中所描述的一條語句,也是由多條執(zhí)行指令構(gòu)成的。例如,各種程序中經(jīng)常出現(xiàn)的賦值語句: X=X+1; 在用匯編語言書寫時,就變成: LOADA, X ADDIA, 1 STOREA, X 等三條語句,這里 A代表累加器。根據(jù)系統(tǒng)的設(shè)計和要求,在這三條語句的執(zhí)行期間,也有可能發(fā)生中斷或調(diào)度,從而使得與當前進程無關(guān)的程序得以執(zhí)行。為了保證程序執(zhí)行最終結(jié)果的正確性,必須對并發(fā)執(zhí)行的各進程進行制約,以控制它們的執(zhí)行速度和對資源的競爭。在進程的概念一節(jié)中已經(jīng)介紹了進程中兩相鄰語句可并發(fā)執(zhí)行的三個條件。是否有一種更為簡單的辦法來檢查出需要對程序的哪些部分進行制約才能保證其執(zhí)行結(jié)果的正確性呢?這里來看下面的例子。 設(shè)有兩個計算進程P A,P B共享內(nèi)存M S。其中 M S分為三個領(lǐng)域,即系統(tǒng)區(qū)、進程工作區(qū)和數(shù)據(jù)區(qū)。這里數(shù)據(jù)區(qū)被劃分大小相等的塊,每個塊中既可能放有數(shù)據(jù),也有可能未放有數(shù)據(jù)。系統(tǒng)區(qū)主要是堆棧S,其中存放那些空數(shù)據(jù)塊的地址。 多進程共享內(nèi)存棧區(qū)示例圖 當進程P A或P B要求空數(shù)據(jù)塊時,從堆棧最頂部( top指針所指的位置)取出所需數(shù)據(jù)塊。當進程P A或P B釋放數(shù)據(jù)塊時,則把所釋放數(shù)據(jù)塊的地址放入堆棧頂部。令 getspace 為取空數(shù)據(jù)塊過程,release(ad)為釋放數(shù)據(jù)塊過程。這里, ad為待釋放數(shù)據(jù)塊的地址。如果堆棧S非空的話,進程P A或P B是可以用任
點擊復制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1