熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 操作系統 >> 正文

操作系統:進程管理進程控制[2]

2013-11-15 15:57:23  來源: 操作系統 
       進程的阻塞與喚醒

   引起進程阻塞和喚醒的事件

  ) 請求系統服務

  ) 啟動某種操作

  ) 新數據尚未到達

  ) 無新工作可做

   進程阻塞過程

  正在執行的進程當發現上述某事件時由於無法繼續執行於是進程便通過調用阻塞原語block把自己阻塞可見進程的阻塞是進程自身的一種主動行為進入block過程後由於此時該進程還處於執行狀態所以應先立即停止執行把進程控制塊中的現行狀態由執行改為阻塞並將PCB插入阻塞隊列如果系統中設置了因不同事件而阻塞的多個阻塞隊列則應將本進程插入到具有相同事件的阻塞(等待)隊列最後轉調度程序進行重新調度將處理機分配給另一就緒進程並進行切換亦即保留被阻塞進程的處理機狀態(在PCB中)再按新進程的PCB中的處理機狀態設置CPU的環境

   進程喚醒過程

  當被阻塞進程所期待的事件出現時如I/O完成或其所期待的數據已經到達則由有關進程(比如用完並釋放了該I/O設備的進程)調用喚醒原語wakeup( )將等待該事件的進程喚醒喚醒原語執行的過程是首先把被阻塞的進程從等待該事件的阻塞隊列中移出將其PCB中的現行狀態由阻塞改為就緒然後再將該PCB插入到就緒隊列中

   進程的掛起與激活

   進程的掛起

  當出現了引起進程掛起的事件時比如用戶進程請求將自己掛起或父進程請求將自己的某個子進程掛起系統將利用掛起原語suspend( )將指定進程或處於阻塞狀態的進程掛起掛起原語的執行過程是首先檢查被掛起進程的狀態若處於活動就緒狀態便將其改為靜止就緒對於活動阻塞狀態的進程則將之改為靜止阻塞為了方便用戶或父進程考查該進程的運行情況而把該進程的PCB復制到某指定的內存區域最後若被掛起的進程正在執行則轉向調度程序重新調度

   進程的激活過程

  當發生激活進程的事件時例如父進程或用戶進程請求激活指定進程若該進程駐留在外存而內存中已有足夠的空間時則可將在外存上處於靜止就緒狀態的進程換入內存這時系統將利用激活原語active( )將指定進程激活激活原語先將進程從外存調入內存檢查該進程的現行狀態若是靜止就緒便將之改為活動就緒若為靜止阻塞便將之改為活動阻塞假如采用的是搶占調度策略則每當有新進程進入就緒隊列時應檢查是否

  要進行重新調度即由調度程序將被激活進程與當前進程進行優先級的比較如果被激活進程的優先級更低就不必重新調度否則立即剝奪當前進程的運行把處理機分配給剛被激活的進程

——返回教材目錄

了解更多計算機相關基礎課程視頻

[]  []  


From:http://tw.wingwit.com/Article/program/czxt/201311/24271.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.