『壹』 操作系統中進入臨界區的條件是什麼
進程進入臨界區要滿足一定的條件,以保證臨界資源的安全使用,系統的正常運行,即對臨界區的管理就遵循以下三個原則:(1)當有若干進程要求進入它們的臨界區時,應在有限時間內使一進程進入臨界區。換句話說,它們不應該相互等待而致使誰都不能進入。(2)每次最多有一個進程處於臨界區內。(3)進程在臨界區內逗留應在有限時間范圍內。
『貳』 編程模擬多進程共享臨界資源
4、進程間通信可以採用信號、消息傳遞、管道或網路通信方式。 操作系統課程設計 編程模擬多進程共享 臨界資源課程設計. 路過!求經驗
『叄』 操作系統-進程管理習題
1、每個進程都包刮(進程式控制制塊)、(程序段)和(數據段)3個組成部分。
2、一個程序運行在不同的數據集上就構成了不同的(進程),分別得到不同的結果。
3、進程在執行過程中不同時刻的3中基本狀態是(運行狀態)、 (就緒狀態)和(等待狀態)。
4、進程是一個(獨立存在)的實體,它有自己的生命周期。它因(創建 )而產生,因(調度 )而運行,因(等待某件事 )而被阻塞(進入等待態),因( 得不到資源)而被撤銷。
5、進程在執行過程中狀態不斷(變化 ),但在某一時刻,進程當且僅當處於3種基本狀態之一。
6、進程在運行中申請資源得不到滿意,則它從(運行 )態變成(阻塞 )態。
7、處於等待態的進程,其他外圍設備工作結束,則它變成(就緒 )態。
8、進程從運行態變成就緒態,主要原因是(時間片到 )和(出現優先順序更高的進程進行中斷 )。
9、有多個進程等待分配CPU時,系統按一定的(優先順序 ),從處於就緒態的進程中選擇( 第一)個進程,讓他佔有CPU,並使它狀態變成(運行 )態。
10、進程剛被創建是它的狀態是 新建?
11、操作系統依據 (系統內核)對進程進行控制和管理
12、進程有兩種基本隊列 和
13、時間片是指允許進程一次佔用處理器的 。時間片輪轉調度演算法常用於 (分時)操作系統中。
14、我們把進程中與(臨界資源進行操作)有關的程序段稱為臨界區。
15、任一個進入臨界區的進程必須在 有限時間內進入 臨界區。
16、PV操作由p操作即申請資源 和v操作即釋放一個資源 組成,是對信號量? 進行操作。
17、P操作將信號量的值減1 ,若結果小於0,則該進程置為(阻塞) 狀態,V操作將信號量的值加 ,若結果 大於0,則釋放一個等待信號量的進程。
18、當並發進程存在競爭關系時必須 地使用資源,當並發進程存在協作關系時必須必須 ,分別稱為 和
19、利用信號量實現進程 ,應為臨界區設置一個信號量Mutex,初值為1 ,表示該資源尚未使用,臨界區應置於 和 原語之間。
20、進程的同步是指並發進程之間的一種協同合作 關系,一個進程的執行依賴另一個進程的 某些操作
,當一個進程沒有得到它時應 ,直到被 。
21、形成死鎖的起因是 多個進程搶占資源和資源不能被分配各進程都進入等待 。
22、死鎖的四個必要條件是 1互斥條件2請求和保持條件3不剝奪條件4循環等待條件 。
23、檢測到死鎖後可採用 、 或 等辦法來解除死鎖(破壞4個條件的任意一個即可,可通過不同演算法實現)
有的不會填,有的沒有把握。。。
『肆』 有關利用記錄型信號量解決生產者消費者的問題
有一群生產者進程在生產產品,並將這些產品提供給消費者進程去消費。為使生產者進程與消費者進程能並發執行,在兩者之間設置了一個具有n個緩沖區的緩沖池,生產者進程將其所生產的產品放入一個緩沖區中;消費者進程可從一個緩沖區中取走產品去消費。盡管所有的生產者進程和消費者進程都是以非同步方式運行的,但它們之間必須保持同步,既不允許消費者進程到一個空緩沖區去取產品,也不允許生產者進程向一個已裝滿產品且尚未被取走的緩沖區投放產品。
參考代碼:
int in = 0, out = 0;//in: 輸入指針, out: 輸出指針;
item buffer[n];//n個緩沖區組成的數組;
semaphore mutex = 1, full = 0, empty = n;
//mutex: 互斥信號量, 生產者進程和消費者進程都只能互斥訪問緩沖區;
//full: 資源信號量, 滿緩沖區的數量;
//empty: 資源信號量, 空緩沖區的數量;//信號量不允許直接參與運算, 故都要定義;
//生產者程序;
void Procer() {
do {
生產者生產一個產品nextp;
wait(empty);//申請一個空緩沖區;
wait(mutex);//申請臨界資源;
buffer[in] = nextp;//將產品添加到緩沖區;
in = (in + 1) % n;//類似於循環隊列;
signal(mutex);//釋放臨界資源;
signal(full);//釋放一個滿緩沖區;
} while (TRUE);
}
//消費者程序;
void Procer() {
do {
wait(full);//申請一個滿緩沖區;
wait(mutex);//申請臨界資源;
nextc = buffer[out];//將產品從緩沖區取出;
out = (out + 1) % n;//類似於循環隊列;
signal(mutex);//釋放臨界資源;
signal(empty);//釋放一個空緩沖區;
消費者將一個產品nextc消費;
} while (TRUE);
}
注意:
生產者與消費者進程對資源信號量的申請與釋放情況剛好相反(生產者是申請空,釋放滿;消費者是申請滿,釋放空)。
應先執行對資源信號量的申請,然後再對互斥信號量進行申請操作,否則會因起死鎖(如果先申請互斥信號量再申請資源信號量,則可能發生一個進程申請互斥信號量成功,得到臨界資源,再申請資源信號量失敗,導致該進程帶著臨界資源進入阻塞狀態,造成死鎖)。
『伍』 C# 多線程臨界資源
多線程訪問共有的資源在C#中提供了一個lock方法來處理這種問題啊。具體的實現請參考一下msdn文檔好了。
追問
lock只提供方法的鎖定,沒有變數的鎖定
既然如此 那就把 a++ 寫到一個方法裡面 writeline(a) 也寫到一個方法裡面就OK 了
實際上臨界資源 看具體操作了 如果2個線程分別是讀跟寫 那到沒什麼必要 但是要是讀了以後 判斷再操作 就很有必要了
因此把針對變數的操作 放到方法裡面去 再用lock實現吧
『陸』 什麼叫做「臨界資源」什麼叫「臨界區」對臨界區的使用應符合哪些規則
臨界資源是指每次僅允許一個進程訪問的資源。
臨界區是指每個進程中訪問臨界資源的那段代碼。
臨界區的使用規則①空閑讓進②忙則等待③有限等待④讓權等待。
『柒』 什麼是臨界區和臨界資源對臨界區管理的基本原則是什麼
1、臨界區指的是一個訪問共用資源(例如:共用設備或是共用存儲器)的程序片段,而這些共用資源又無法同時被多個線程訪問的特性。
當有線程進入臨界區段時,其他線程或是進程必須等待,有一些同步的機制必須在臨界區段的進入點與離開點實現,以確保這些共用資源是被互斥獲得使用。只能被單一線程訪問的設備,例如:列印機。
2、臨界資源:多道程序系統中存在許多進程,它們共享各種資源,然而有很多資源一次只能供一個進程使用。一次僅允許一個進程使用的資源稱為臨界資源。許多物理設備都屬於臨界資源,如輸入機、列印機、磁帶機等。
3、進程進入臨界區的調度原則是:
(1)如果有若干進程要求進入空閑的臨界區,一次僅允許一個進程進入。
(2)進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入自己的臨界區。
(3)任何時候,處於臨界區內的進程不可多於一個。
(4)如果進程不能進入自己的臨界區,則應讓出CPU,避免進程出現「忙等」現象。
(7)申請臨界資源的操作是什麼擴展閱讀
1、臨界區存在的問題
臨界區的退出,不會檢測是否是已經進入的線程,也就是說,可以在A線程中調用進入臨界區函數,在B線程調用退出臨界區的函數,同樣是成功。
臨界區內的數據一次只能同時被一個進程使用,當一個進程使用臨界區內的數據時,其他需要使用臨界區數據的進程進入等待狀態。
2、各進程採取互斥的方式,實現共享的資源稱作臨界資源。
屬於臨界資源的硬體有列印機、磁帶機等,軟體有消息緩沖隊列、變數、數組、緩沖區等。 諸進程間應採取互斥方式,實現對這種資源的共享。