操作系统习题三
題目:
1.有8個程序段,他們之間的前驅關系如下,試用信號量實現這些程序段之間的同步
2.簡述進程同步機制的基本原則。
答:在多道程序環境下,當程序并發執行時,由于資源共享和進程合作,使同處于一個系統中的進程之間可能存在著以下兩種形式的制約關系(1)間接相互制約關系,同處于一個系統中的進程,通常都共享著某種資源。(2)直接相互制約關系,這種制約主要源于進程間的合作。所以使用系統中的臨界資源時,諸進程應采取互斥方式,實現對資源的共享。為實現進程互斥的進入自己的臨界區,可用軟件方法,但更多的是在系統中設置專門的同步機制來協調各進程間的運行。
所有的同步機制都應遵循以下四條準則:
(1)空閑讓進:因為,當無進程處于臨界區時,表明臨界資源處于空閑狀態,應允許一個請求進入臨界區的進程立即進入自己的臨界區,以有效地利用臨界資源。
(2)忙則等待:因為,當已有進程進入臨界區時,表明臨界資源正在被訪問,因而其它試圖進入臨界區的進程必須等待,以保證對臨界資源的互斥訪問。
(3)有限等待:因為,對要求訪問的臨界資源的進程,應保證在有限時間內能進入自己的臨界區,以免陷入“死等”狀態。
(4)讓權等待:因為,當進程不能進入自己的臨界區時,應立即釋放處理機,以免進程陷入“忙等”狀態。
3.如何保證諸進程互斥地訪問臨界資源?
4.記錄型信號量的實現
答:記錄型信號量是不存在“忙等”現象的進程同步機制。除了需要一個用于代表資源數目的整型變量value外,再增加一個進程鏈表L,用于鏈接所有等待該資源的進程,記錄型信號量是由于釆用了記錄型的數據結構得名。記錄型信號量可描述為
typedef struct{int value;struct process *L; } semaphore;相應的wait(S)和signal(S)的操作如下:
void wait (semaphore S) { //相當于申請資源S.value--;if(S.value<0) {add this process to S.L;block(S.L);} }wait操作,S.value–,表示進程請求一個該類資源,當S.value<0時,表示該類資源已分配完畢,因此進程應調用block原語,進行自我阻塞,放棄處理機,并插入到該類資源的等待隊列S.L中,可見該機制遵循了“讓權等待”的準則。
void signal (semaphore S) { //相當于釋放資源S.value++;if(S.value<=0){remove a process P from S.L;wakeup(P);} }signal操作,表示進程釋放一個資源,使系統中可供分配的該類資源數增1,故S.value++。若加1后仍是S.value<=0,則表示在S.L中仍有等待該資源的進程被阻塞,故還應調用wakeup 原語,將S.L中的第一個等待進程喚醒。
5.DNA型信號量的實現
總結
- 上一篇: Find them, Catch the
- 下一篇: 计算机操作系统第四章作业