程序控制的一些概念:
程序控制是程序管理中最基本的功能。建立、終止、可負責程序執行中的狀態轉換。
程序控制一般是由os的核心中的原語來實現的。
原語(primitive)是由若干條指令組成的,用於完成一定功能的乙個過程。
它與一般過程的區別在於:它們是「原子操作(action operation)」。即不可分割、不允許中斷、常駐記憶體。
程序圖(process graph) 程序圖是用於描述乙個程序的家族關係的有向樹。
程序的阻塞與喚醒
1.引起程序阻塞和喚醒的事件
•請求系統服務(如請求列印服務)
•啟動某種操作(如i/o操作)
•新資料尚未到達
•無新工作可做(某些特定功能的系統程序、如傳送程序)
2.程序阻塞過程
無法繼續執行,呼叫阻塞原語block把自己阻塞,是主動行為。
•立即停止執行
•pcb中的現行狀態由「執行」改為「阻塞」 並將pcb插入相應阻塞佇列
•轉排程程式進行重新排程,將處理機分配給另一就緒程序並進行切換
(保留被阻塞程序的處理機狀態(在pcb中),再按新程序的pcb中的處理機狀態設定cpu的環境)。
3.程序喚醒過程
當被阻塞程序所期待的事件出現時,將等待該事件的程序喚醒。(如i/o完成)
喚醒原語執行的過程是:
•把被阻塞的程序移出阻塞佇列
•將pcb中的現行狀態由阻塞改為就緒,然後再將該pcb插入到就緒佇列中。
應當指出,block原語和wakeup原語是一對作用剛好相反的原語。故在某程序中呼叫了阻塞原語,則必須在與之相合作的另一程序中或其他相關的程序中安排喚醒原語,以能喚醒阻塞程序;否則,其將長久地處於阻塞狀態,從而再無機會繼續執行。
程序的掛起與啟用
1.程序的掛起
當出現了引起程序掛起的事件時(比如,使用者程序請求將自己掛起,或父程序請求掛起某子程序)。
掛起原語suspend( )的執行過程是:
•首先檢查被掛起程序的狀態並進行相應操作(執行態、活動就緒 - 靜止就緒; 活動阻塞 - 靜止阻塞)。
•為便於使用者或父程序考查該程序的運**況,把該程序的pcb複製到某指定的記憶體區域。
•最後,若被掛起的程序正在執行,則轉向排程程式重新排程,從而將處理機重新分配。
2.程序的啟用過程
當發生啟用程序的事件時(如父程序或使用者程序請求啟用指定程序)
啟用原語active( )啟用過程:
•啟用原語將程序從外存調入記憶體
•檢查該程序的現行狀態並進行相應操作(靜止就緒-活動就緒; 靜止阻塞 - 活動阻塞)。
假如採用的是搶占排程策略,則每當有新程序進入就緒佇列時,檢查是否要進行重新排程,即比較被啟用程序與當前程序的優先順序,決定處理機歸屬。
程序 執行緒 阻塞 掛起
阻塞與掛起 非同步訊息對列讀取 object 類中 wait,notify 與 notifyall 方法可以用來實現執行緒之間的排程,比如在阻塞佇列 blockingqueue 的實現中,如果隊列為空,則所有消費者執行緒進行阻塞 wait 如果某乙個時刻佇列中新新增了乙個元素,則需要喚醒某個或所有阻...
程序的掛起與阻塞
阻塞是由於程序所需資源得不到滿足,並會最終導致程序被掛起 程序掛起的原因並不一定是由於阻塞,也有可能是時間片得不到滿足,掛起狀態是程序從記憶體排程到外存中的一種狀態,若在就緒態時,從記憶體調出到外存中,就是就緒掛起態,若在阻塞態時,從記憶體調出到外存中,就轉換成了阻塞掛起態 掛起 一般是主動的,由系...
程序的掛起 阻塞和睡眠
要說掛起 阻塞 睡眠難免讓人想到程序生命週期中的阻塞態或者等待狀態,而掛起和睡眠卻沒有出現在程序生命週期中,說明這三個其實在本質上區別並不那麼大,但是既然稱呼不同,應該就有不同的道理。先說阻塞,既然它能出現在程序生命週期,必然是每個程序都會經歷的乙個階段,眾所周知,程序在執行過程中必然要獲取資源,暫...