當前位置:首頁 » 操作系統 » Peterson演算法

Peterson演算法

發布時間: 2022-10-11 11:50:55

Ⅰ Peterson演算法的演算法概要

/*
兩個全局共享的狀態變數flag[0]和flag[1],表示臨界區狀態及哪個進程正在佔用臨界區。
全局共享變數turn(值為1或0)表示能進入臨界區的進程序號。
*/

Ⅱ 計算機等級考試三級嵌入式的題型是什麼

根據2014年的三級嵌入式考試,題型包括:1.選擇題,2.填空題,3.簡答題,4.名詞解釋題。具體考 試 范 圍 :
一、嵌入式系統的硬體
1. 嵌入式處理器
嵌入式微處理器(Embedded Microprocessor Unit, EMPU)、嵌入式微控制器(Microcontroller Unit, MCU)、嵌入式DSP 處理器(Embedded Digital Signal Processor, EDSP)、嵌入式片上系統(System On Chip)的定義與功能 。
2. 存儲
只讀存儲器ROM(Read Only Memory)、隨機存儲器RAM(Random Access Memory)和快閃記憶體的定義與功能 。
3. 輸入輸出設備
液晶顯示屏(liquid crystal display:LCD)、觸摸屏、語音輸入輸出技術、鍵盤的功能 。4. 電源轉換與管理
電源IC 分類、電源IC 的特點 5. 介面技術
嵌入式系統介面的、並行介面、串口、USB、PCMCIA 和CF、紅外線介面 。
6. 匯流排
匯流排(匯流排的主要參數:匯流排的帶寬,匯流排的位寬,匯流排的工作時鍾頻率),I2C 匯流排,CAN 匯流排 。
二、嵌入式操作系統 1. 操作系統基本理論
a) 內存管理:內存管理功能,內存分割(固定分割(Fixed Partitioning)與動態分割(Dynamic Partitioning)),虛擬內存(分頁(Paging)與分段(Segmentation)),頁替換演算法;
b)進程與中斷管理:進程狀態與狀態轉換,進程描述,進程式控制制,並發,Dekker 演算法,Peterson 演算法,並發控制硬體方法,信號量,管程,消息傳遞,死鎖與死鎖處理,中斷及中斷處理 ;
c) 調度機制:調度類型,單處理器調度演算法(FCFS 演算法,循環執行演算法,SPN 演算法,SRT 演算法,HRRN 演算法,反饋演算法) ;
d) 實時調度:時鍾驅動調度,基於優先順序調度,速率單調演算法,EDF演算法,LST演算法,非周期實時調度演算法。
2. 嵌入式操作系統 ;
a) 嵌入式操作系統特點:實時性,小內核,可配置,易移植,高可靠性,低功耗;
b) 常見嵌入式操作系統:嵌入式Linux,Windows CE,Palm OS,QNX,uC/OS,VxWorks。
三、嵌入式Linux與開發環境
1.嵌入式Linux內核結構 嵌入式Linux的常見模塊,與標准Linux的差別(缺少MMU模塊);
2. 嵌入式Linux內存管理 內核載入的進程的地址空間,內存的分配和釋放,虛擬內存與內存頁面的換入與換出;
3. 嵌入式文件系統 Ext2fs,臨時文件系統tmpfs。

Ⅲ 操作系統中實現互斥操作可以有幾種方法

在進程與線程中存在大量的並發問題,進程並發的基礎是實現互斥的能力,也就是說當系統將這種能力賦予某個進程或者線程的時候,在其運行期間就可以排除其他的進程或者線程,常見的實現互斥的方法有以下幾種

1、軟體方法:Dekker演算法、Peterson演算法

2、硬體演算法:藉助操作系統的原語

3、信號量的方法:整型信號量也記錄型信號量

4、管程方法:一個管程一次只能被一個進程訪問

5、進程通信:共享存儲器系統、管道通信系統和消息傳遞通信三種

Ⅳ 處理臨界區問題的方法

應該是中庸

Ⅳ 互斥量的特徵

互斥量是一個可以處於兩態之一的變數:解鎖和加鎖。這樣,只需要一個二進制位表示它,不過實際上,常常使用一個整型量,0表示解鎖,而其他所有的值則表示加鎖。互斥量使用兩個過程。當一個線程(或進程)需要訪問臨界區時,它調用mutex_lock。如果該互斥量當前是解鎖的(即臨界區可用),此調用成功,調用線程可以自由進入該臨界區。
另一方面,如果該互斥量已經加鎖,調用線程被阻塞,直到在臨界區中的線程完成並調用mutex_unlock。如果多個線程被阻塞在該互斥量上,將隨機選擇一個線程並允許它獲得鎖。
由於互斥量非常簡單,所以如果有可用的TSL或XCHG指令,就可以很容易地在用戶空間中實現它們。用於用戶級線程包的mutex_lock和mutex_unlock代碼如圖2-29所示。XCHG解法本質上是相同的。

mutex_lock 的代碼與圖2-25中enter_region的代碼很相似,但有一個關鍵的區別。當enter_region進入臨界區失敗時,它始終重復測試鎖(忙等待)。實際上,由於時鍾超時的作用,會調度其他進程運行。這樣遲早擁有鎖的進程會進入運行並釋放鎖。
在(用戶)線程中,情形有所不同,因為沒有時鍾停止運行時間過長的線程。結果是通過忙等待的方式來試圖獲得鎖的線程將永遠循環下去,決不會得到鎖,因為這個運行的線程不會讓其他線程運行從而釋放鎖。
以上就是enter_region和mutex_lock 的差別所在。在後者取鎖失敗時,它調用thread_yield將CPU放棄給另一個線程。這樣,就沒有忙等待。在該線程下次運行時,它再一次對鎖進行測試。
由於thread_yield只是在用戶空間中對線程調度程序的一個調用,所以它的運行非常快捷。這樣,mutex_lock和mutex_unlock都不需要任何內核調用。通過使用這些過程,用戶線程完全可以實現在用戶空間中的同步,這些過程僅僅需要少量的指令。
上面所敘述的互斥量系統是一套調用框架。對於軟體來說,總是需要更多的特性,而同步原語也不例外。例如,有時線程包提供一個調用mutex_trylock,這個調用或者獲得鎖或者返回失敗碼,但並不阻塞線程。這就給了調用線程一個靈活性,用以決定下一步做什麼,是使用替代辦法還只是等待下去。
到目前為止,我們掩蓋了一個問題,不過現在還是有必要把這個問題提出來。在用戶級線程包中,多個線程訪問同一個互斥量是沒有問題的,因為所有的線程都在一個公共地址空間中操作。但是,對於大多數早期解決方案,諸如Peterson演算法和信號量等,都有一個未說明的前提,即這些多個進程至少應該訪問一些共享內存,也許僅僅是一個字。如果進程有不連續的地址空間,如我們始終提到的,那麼在Peterson演算法、信號量或公共緩沖區中,它們如何共享turn變數呢?
有兩種方案。第一種,有些共享數據結構,如信號量,可以存放在內核中,並且只能通過系統調用來訪問。這種處理方式化解了上述問題。第二種,多數現代操作系統(包括UNIX和Windows)提供一種方法,讓進程與其他進程共享其部分地址空間。在這種方法中,緩沖區和其他數據結構可以共享。在最壞的情形下,如果沒有可共享的途徑,則可以使用共享文件。
如果兩個或多個進程共享其全部或大部分地址空間,進程和線程之間的差別就變得模糊起來,但無論怎樣,兩者的差別還是有的。共享一個公共地址空間的兩個進程仍舊有各自的打開文件、報警定時器以及其他一些單個進程的特性,而在單個進程中的線程,則共享進程全部的特性。另外,共享一個公共地址空間的多個進程決不會擁有用戶級線程的效率,這一點是不容置疑的,因為內核還同其管理密切相關。
Pthread中的互斥
Pthread提供許多可以用來同步線程的函數。其基本機制是使用一個可以被鎖定和解鎖的互斥量來保護每個臨界區。一個線程如果想要進入臨界區,它首先嘗試鎖住相關的互斥量。如果互斥量沒有加鎖,那麼這個線程可以立即進入,並且該互斥量被自動鎖定以防止其他線程進入。如果互斥量已經被加鎖,則調用線程被阻塞,直到該互斥量被解鎖。如果多個線程在等待同一個互斥量,當它被解鎖時,這些等待的線程中只有一個被允許運行並將互斥量重新鎖定。這些互斥鎖不是強制性的,而是由程序員來保證線程正確地使用它們。
與互斥量相關的主要函數調用如圖2-30所示。就像所期待的那樣,可以創建和撤銷互斥量。實現它們的函數調用分別是pthread_mutex_init與pthread_mutex_destroy。也可以通過pthread_mutex_lock給互斥量加鎖,如果該互斥量已被加鎖時,則會阻塞調用者。還有一個調用可以用來嘗試鎖住一個互斥量,當互斥量已被加鎖時會返回錯誤代碼而不是阻塞調用者。這個調用就是pthread_mutex_trylock。如果需要的話,該調用允許一個線程有效地忙等待。最後,pthread_mutex_unlock用來給一個互斥量解鎖,並在一個或多個線程等待它的情況下正確地釋放一個線程。互斥量也可以有屬性,但是這些屬性只在某些特殊的場合下使用。

除互斥量之外,pthread提供了另一種同步機制:條件變數。互斥量在允許或阻塞對臨界區的訪問上是很有用的,條件變數則允許線程由於一些未達到的條件而阻塞。絕大部分情況下這兩種方法是一起使用的。現在讓我們進一步地研究線程、互斥量、條件變數之間的關聯。
舉一個簡單的例子,再次考慮一下生產者-消費者問題:一個線程將產品放在一個緩沖區內,由另一個線程將它們取出。如果生產者發現緩沖區中沒有空槽可以使用了,它不得不阻塞起來直到有一個空槽可以使用。生產者使用互斥量可以進行原子性檢查,而不受其他線程干擾。但是當發現緩沖區已經滿了以後,生產者需要一種方法來阻塞自己並在以後被喚醒。這便是條件變數做的事了。
與條件變數相關的pthread調用如圖2-31所示。就像你可能期待的那樣,這里有專門的調用用來創建和撤銷條件變數。它們可以有屬性,並且有不同的調用來管理它們(圖中沒有顯示)。與條件變數相關的最重要的兩個操作是pthread_cond_wait和pthread_cond_signal。前者阻塞調用線程直到另一其他線程向它發信號(使用後一個調用)。當然,阻塞與等待的原因不是等待與發信號協議的一部分。被阻塞的線程經常是在等待發信號的線程去做某些工作、釋放某些資源或是進行其他的一些活動。只有完成後被阻塞的線程才可以繼續運行。條件變數允許這種等待與阻塞原子性地進行。當有多個線程被阻塞並等待同一個信號時,可以使用pthread_cond_broadcast調用。

Ⅵ 操作系統訪問臨界資源的Peterson's algorithm 演算法,形象化的表述是什麼比如兩個

男人用女的用

Ⅶ peterson演算法在進程調度是搶占式的情形下,可以正常運轉

高級調度:又稱作業調度。其主要功能是根據一定的演算法,從輸人的一批作業中選出若干個作業,分配必要的資源,如內存、外設等,為它建立相應的用戶作業進程和為其服務的系統進程(如輸人、輸出進程),最後把它們的...

Ⅷ peterson演算法中的flag[j]:=true和turn:=i可以互換嗎

當然 不影響 兩個語句是平行關系

Ⅸ 進程間和線程間的協作區別在哪為什麼需要內核實現通信與同步

進程間和線程間的協作區別:
進程互斥、同步的概念

進程互斥、同步的概念是並發進程下存在的概念,有了並發進程,就產生了資源的競爭與協作,從而就要通過進程的互斥、同步、通信來解決資源的競爭與協作問題。
下面是根據《操作系統教程》3.1.4 中的介紹,整理的進程互斥、同步的概念。
在多道程序設計系統中,同一時刻可能有許多進程,這些進程之間存在兩種基本關系:競爭關系和協作關系。
進程的互斥、同步、通信都是基於這兩種基本關系而存在的,為了解決進程間競爭關系(間接制約關系)而引入進程互斥;為了解決進程間鬆散的協作關系( 直接制約關系)而引入進程同步;為了解決進程間緊密的協作關系而引入進程通信。
第一種是競爭關系
系統中的多個進程之間彼此無關,它們並不知道其他進程的存在,並且也不受其他進程執行的影響。例如,批處理系統中建立的多個用戶進程, 分時系統中建立的多個終端進程。由於這些進程共用了一套計算機系統資源,因而, 必然要出現多個進程競爭資源的問題。當多個進程競爭共享硬設備、存儲器、處理器 和文件等資源時,操作系統必須協調好進程對資源的爭用。
資源競爭出現了兩個控制問題:一個是死鎖 (deadlock )問題,一組進程如果都獲得了部分資源,還想要得到其他進程所佔有的資源,最終所有的進程將陷入死鎖。另一個是飢餓(starvation )問題,這是指這樣一種情況:一個進程由於其他進程總是優先於它而被無限期拖延。
操作系統需要保證諸進程能互斥地訪問臨界資源,既要解決飢餓問題,又要解決死鎖問題。
進程的互斥(mutual exclusion )是解決進程間競爭關系( 間接制約關系) 的手段。 進程互斥指若干個進程要使用同一共享資源時,任何時刻最多允許一個進程去使用,其他要使用該資源的進程必須等待,直到佔有資源的進程釋放該資源。
第二種是協作關系
某些進程為完成同一任務需要分工協作,由於合作的每一個進程都是獨立地以不可預知的速度推進,這就需要相互協作的進程在某些協調點上協 調各自的工作。當合作進程中的一個到達協調點後,在尚未得到其夥伴進程發來的消息或信號之前應阻塞自己,直到其他合作進程發來協調信號或消息後方被喚醒並繼續執行。這種協作進程之間相互等待對方消息或信號的協調關系稱為進程同步。
進程間的協作可以是雙方不知道對方名字的間接協作,例如,通過共享訪問一個緩沖區進行鬆散式協作;也可以是雙方知道對方名字,直接通過通信機制進行緊密協作。允許進程協同工作有利於共享信息、有利於加快計算速度、有利於實現模塊化程序設計。
進程的同步(Synchronization)是解決進程間協作關系( 直接制約關系) 的手段。進程同步指兩個以上進程基於某個條件來協調它們的活動。一個進程的執行依賴於另一
個協作進程的消息或信號,當一個進程沒有得到來自於另一個進程的消息或信號時則需等待,直到消息或信號到達才被喚醒。
不難看出,進程互斥關系是一種特殊的進程同步關系,即逐次使用互斥共享資源,也是對進程使用資源次序上的一種協調。
進程通信的概念
下面是根據《操作系統教程》3.5 中的介紹,整理的進程通信的概念。
並發進程之間的交互必須滿足兩個基本要求:同步和通信。
進程競爭資源時要實施互斥,互斥是一種特殊的同步,實質上需要解決好進程同步問題,進程同步是一種進程通信,通過修改信號量,進程之間可建立起聯系,相互協調運行和協同工作。但是信號量與PV操作只能傳遞信號,沒有傳遞數據的能力。有些情況下進程之間交換的信息量雖很少,例如,僅僅交換某個狀態信息,但很多情況下進程之間需要交換大批數據,例如,傳送一批信息或整個文件,這可以通過一種新的通信機制來完成,進程之間互相交換信息的工作稱之為進程通信IPC (InterProcess Communication)(主要是指大量數據的交換)。進程間通信的方式很多,包括:
信號(signal )通信機制;
信號量及其原語操作(PV、讀寫鎖、管程)控制的共享存儲區(shared memory )通信機制;
管道(pipeline)提供的共享文件(shared file)通信機制;
信箱和發信/ 收信原語的消息傳遞(message passing )通信機制。
其中前兩種通信方式由於交換的信息量少且效率低下,故稱為低級通信機制,相應地可把發信號/ 收信號及PV之類操作稱為低級通信原語,僅適用於集中式操作系統。消息傳遞機制屬於高級通信機制,共享文件通信機制是消息傳遞機制的變種,這兩種通信機制,既適用於集中式操作系統,又適用於分布式操作系統。
進程同步的方法
前面提到,進程互斥關系是一種特殊的進程同步關系,下面給出常見的進程同步的方法,實際上也可用於進程的互斥(個人理解)。
在何炎祥的《計算機操作系統》 3.2 節,將進程同步的機制與解決進程互斥方法看做是一樣的,的明確指出互斥的軟體解決方法為Dekker演算法與Peterson演算法,互斥的硬體解決方法為中斷方法、以及使用機器指令的方法,後面又給出了信號量、管程、消息傳遞三種方法。
實際應用中,不同的系統有不同的進程同步方法,CSDN帖子http://bbs.csdn.net/topics/80156687中有一些討論,Linux 與Windows的主要同步、通信機制如下:
Linux 下:
Linux 下常見的進程同步方法有:SysVIPC 的 sem(信號量)、file locking / record locking(通過 fcntl 設定的文件鎖、記錄鎖)、futex(基於共享內存的快速用戶態互斥鎖)。針對線程(pthread)的還有 pthread_mutex 和 pthread_cond(條件變數)。

Linux 下常見的進程通信的方法有 :pipe(管道),FIFO(命名管道),socket(套接字),SysVIPC 的 shm(共享內存)、msg queue(消息隊列),mmap(文件映射)。以前還有 STREAM,不過現在比較少見了(好像)。
Windows下:
在Windwos中,進程同步主要有以下幾種:互斥量、信號量、事件、可等計時器等幾種技術。
在Windows下,進程通信主要有以下幾種:內存映射、管道、消息等,但是內存映射是最基礎的,因為,其他的進程通信手段在內部都是考內存映射來完成的。
線程的同步/通信與進程的同步/通信有區別嗎?
對於該問題,教材上沒有明確的回答,教材上給出的一般是進程而非線程的同步、通信方式。但網路上很多說法將兩者混為一談。根據教材,以及網上的說法,個人的理解為:
同步機制:
信號量、管程、互斥是進程的同步機制,而信號量、互斥也可用於線程的同步,但管程只在進程同步中被用到;
線程的同步除了信號量、互斥外,還有臨界區、事件,沒有看到教材上將這兩種方式作為進程的同步方式;
通信機制:
管道、FIFO、消息隊列、信號量、共享內存是進程的同步機制,教材上沒有線程的通信機制這樣的說法,但可以肯定這幾種方法是進程的通信方式,且其中的信號量既可用於進程的同步,又可用於進程的通信,在網路上還有說可以用於線程同步的。
管道與管程是不同的,管程是進程同步的方式,而管道則是進程通信的方式。
進程的同步/通信
下面是常見的線程之間的同步方式的詳細介紹。
(註:下面轉自網路,下面的同步、通信方式對於進程與線程分的不是很清楚,關於進程還是線程的解釋見上面——線程的同步/通信與進程的同步/通信有區別嗎?)
一、進程/線程間同步機制。
臨界區、互斥區、事件、信號量四種方式
臨界區(Critical Section)、互斥量(Mutex)、信號量(Semaphore)、事件(Event)的區別
1、臨界區:通過對多線程的串列化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。
在任意時刻只允許一個線程對共享資源進行訪問,如果有多個線程試圖訪問公共資源,那麼在有一個線程進入後,其他試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的線程離開,臨界區在被釋放後,其他線程才可以搶占。
2、互斥量:採用互斥對象機制。
只有擁有互斥對象的線程才有訪問公共資源的許可權,因為互斥對象只有一個,所以能保證公共資源不會同時被多個線程訪問。互斥不僅能實現同一應用程序的公共資源安全共享,還能實現不同應用程序的公共資源安全共享 .互斥量比臨界區復雜。因為使用互斥不僅僅能夠在同一應用程序不同線程中實現資源的安全共享,而且可以在不同應用程序的線程之間實現對資源的安全共享。
3、信號量:它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目 .
信號量對象對線程的同步方式與前面幾種方法不同,信號允許多個線程同時使用共享資源,這與操作系統中的PV操作相同。它指出了同時訪問共享資源的線程最大數目。它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目。
PV操作及信號量的概念都是由荷蘭科學家E.W.Dijkstra提出的。信號量S是一個整數,S大於等於零時代表可供並發進程使用的資源實體數,但S小於零時則表示正在等待使用共享資源的進程數。
P操作申請資源:
(1)S減1;
(2)若S減1後仍大於等於零,則進程繼續執行;
(3)若S減1後小於零,則該進程被阻塞後進入與該信號相對應的隊列中,然後轉入進程調度。

V操作 釋放資源:
(1)S加1;
(2)若相加結果大於零,則進程繼續執行;
(3)若相加結果小於等於零,則從該信號的等待隊列中喚醒一個等待進程,然後再返回原進程繼續執行或轉入進程調度。
4、事 件: 通過通知操作的方式來保持線程的同步,還可以方便實現對多個線程的優先順序比較的操作 .
總結:
1. 互斥量與臨界區的作用非常相似,但互斥量是可以命名的,也就是說它可以跨越進程使用。所以創建互斥量需要的資源更多,所以如果只為了在進程內部是用的話使用臨界區會帶來速度上的優勢並能夠減少資源佔用量。因為互斥量是跨進程的互斥量一旦被創建,就可以通過名字打開它。
2. 互斥量(Mutex),信號燈(Semaphore),事件(Event)都可以被跨越進程使用來進行同步數據操作,而其他的對象與數據同步操作無關,但對於進程和線程來講,如果進程和線程在運行狀態則為無信號狀態,在退出後為有信號狀態。所以可以使用WaitForSingleObject來等待進程和線程退出。
3. 通過互斥量可以指定資源被獨占的方式使用,但如果有下面一種情況通過互斥量就無法處理,比如現在一位用戶購買了一份三個並發訪問許可的資料庫系統,可以根據用戶購買的訪問許可數量來決定有多少個線程/進程能同時進行資料庫操作,這時候如果利用互斥量就沒有辦法完成這個要求,信號燈對象可以說是一種資源計數器。
二、進程間通信方式
由於比較容易混淆,我們把進程間通信方法也列在這里做比較。
進程通信也就是所謂的IPC問題,主要是指進程間交換數據的方式。進程通信包括高級通信與低級通信,其中進程同步與互斥屬於低級通信,主要用於插U農地控制信號;高級通信包括三種:共享存儲系統(有的地方稱作共享內存區)、消息傳遞系統(有的地方稱作消息隊列)、管道。
信號量是進程同步與互斥的常用方法,也可以作為低級的進程通信方法,用於傳遞控制信號。
簡而言之,進程間通信方式主要包括管道、FIFO、消息隊列、信號量、共享內存。
1.管道,還有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用於父子進程通訊,命名管道可用於非父子進程,命名管道就是FIFO,管道是先進先出的通訊方式
2.消息隊列,是用於兩個進程之間的通訊,首先在一個進程中創建一個消息隊列,然後再往消息隊列中寫數據,而另一個進程則從那個消息隊列中取數據。需要注意的是,消息隊列是用創建文件的方式建立的,如果一個進程向某個消息隊列中寫入了數據之後,另一個進程並沒有取出數據,即使向消息隊列中寫數據的進程已經結束,保存在消息隊列中的數據並沒有消失,也就是說下次再從這個消息隊列讀數據的時候,就是上次的數據!!!!
3.信號量,它與WINDOWS下的信號量是一樣的,所以就不用多說了
4.共享內存,類似於WINDOWS下的DLL中的共享變數,但LINUX下的共享內存區不需要像DLL這樣的東西,只要首先創建一個共享內存區,其它進程按照一定的步驟就能訪問到這個共享內存區中的數據,當然可讀可寫
以上幾種方式的比較:
1.管道:速度慢,容量有限,只有父子進程能通訊
2.FIFO:任何進程間都能通訊,但速度慢
3.消息隊列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完數據的問題
4.信號量:不能傳遞復雜消息,只能用來同步
5.共享內存區:能夠很容易控制容量,速度快,但要保持同步,比如一個進程在寫的時候,另一個進程要注意讀寫的問題,相當於線程中的線程安全,當然,共享內存區同樣可以用作線程間通訊,不過沒這個必要,線程間本來就已經共享了同一進程內的一塊內存
本質上,信號量是一個計數器,它用來記錄對某個資源(如共享內存)的存取狀況。一般說來,為了獲得共享資源,進程需要執行下列操作:
(1)測試控制該資源的信號量;
(2)若此信號量的值為正,則允許進行使用該資源,進程將進號量減1;
(3)若此信號量為0,則該資源目前不可用,進程進入睡眠狀態,直至信號量值大於0,進程被喚醒,轉入步驟(1);
(4)當進程不再使用一個信號量控制的資源時,信號量值加1,如果此時有進程正在睡眠等待此信號量,則喚醒此進程。
套接字通信並不為Linux所專有,在所有提供了TCP/IP協議棧的操作系統中幾乎都提供了socket,而所有這樣操作系統,對套接字的編程方法幾乎是完全一樣的
三、進程/線程同步機制與進程間通信機制比較
很明顯2者有類似,但是差別很大
同步主要是臨界區、互斥、信號量、事件
進程間通信是管道、內存共享、消息隊列、信號量、socket
共通之處是,信號量和消息(事件)
小結:
進程互斥、同步與通信的關系:進程競爭資源時要實施互斥,互斥是一種特殊的同步,實質上需要解決好進程同步問題,進程同步是一種進程通信,由此看來,進程互斥、同步都可以看做進程的通信;
信號量是進程同步與互斥的常用方法,也可以作為低級的進程通信方法,用於傳遞控制信號;
管道與管程是不同的,管程是進程同步的方式,而管道則是進程通信的方式;

Ⅹ 為什麼讓權等待不一定要遵循

必須遵守。Peterson演算法並沒有提供阻塞、排隊等機制,所以沒有遵循讓權等待的原則會導致CPU處於忙等狀態,無法進入下一批次的信息處理中。

熱點內容
網易我的世界伺服器組件怎麼安裝 發布:2025-05-15 05:16:58 瀏覽:311
如何復制密碼狗 發布:2025-05-15 05:15:28 瀏覽:737
c語言報告三 發布:2025-05-15 05:10:37 瀏覽:844
09壓縮餅干 發布:2025-05-15 05:05:58 瀏覽:279
迭代法編程c 發布:2025-05-15 04:58:01 瀏覽:815
用什麼dns伺服器地址快 發布:2025-05-15 04:52:59 瀏覽:27
手機端so反編譯 發布:2025-05-15 04:50:55 瀏覽:610
linuxlamp安裝 發布:2025-05-15 04:50:45 瀏覽:578
sqlplus緩存區怎麼設置 發布:2025-05-15 04:50:44 瀏覽:858
shell腳本環境變數 發布:2025-05-15 04:45:18 瀏覽:693