操作系统习题3—进程的互斥与同步
操作系統習題3—進程的互斥與同步
1.例舉兩個現實生活中需要同步與互斥的例子。
我們去吃自助餐時,店里的廚師會在后臺廚房制作食物,然后將食物運送到公共飲食區域,讓顧客自行挑選。如果公共飲食區域的食物都被顧客吃光了,那么顧客只有先進行等待,等廚師做出更多食物再送到公共飲食區;如果公共飲食區域食物數量多到一定程度,廚師會暫停制作食物。
駕駛員開車行駛到一個十字路口時,如果本路口的綠燈亮起,駕駛員可以順利通過;如果本路口的紅燈亮起,駕駛員必須停車進行等待,讓其他路口的車輛通過。
2.何謂原語?它與系統調用有何區別?如何實現原語執行的不可分割性?
原語是由若干條機器指令構成的可完成特定功能的程序段。具有以下三個特點:
- 處于操作系統最底層,是最接近硬件的部分
- 程序的運行具有原子性,作為一個整體而不可分割,即要么全都完成,要么全都不做
- 程序的運行時間都較短,而且調用頻繁
原語與系統調用的區別:原語只要強調操作的不可分割性,可以認為是一個不可中斷的子程序調用;系統調用是由用戶態進入核心態,一般也不會被中斷,但如果有更緊迫的系統調用的話,原來的系統調用還是會被打斷。
原語可通過硬件實現不可中斷性,或通過實現臨界段的元方法(屏蔽中斷、加硬鎖)達到不被邏輯上中斷。
3.如果 P、V 操作不作為原語,即可分割執行,那么是否還可以用于
解決互斥問題?若不能,舉例說明。
如果 P、V 操作不作為原語,就不能用于解決互斥問題。
舉例:在生產者-消費者問題中,由于 P、V 操作可以分割執行,很大可能會出現當前緩沖池中滿緩沖區個數僅為 1,而多個消費者同時成功使用到這個緩沖區的情況,造成不可避免的系統錯誤。
4.請用并行語句和 P、V 操作描述圖 1 所示的任務執行過程
5.“理發師睡覺”問題:假設理發店由等待間(n 個座位)和理發間(只有一個座位)構成。無顧客時,理發師睡覺。顧客先進等待間再進理發間,當顧客進入理發間發現理發師在睡覺時,則喚醒理發師,請求理發;如果理發師正在理發,又有顧客到來時,只要有空椅子,他就坐下來等待,如果沒有空椅子,他就離開。請為理發師和顧客各編寫一段程序來描述他們的同步問題。
int customer=0,barber=0; //顧客和理發師的信號量 int customerNumber=0,mutex=1; //當前顧客數目和互斥控制量//理發師 Barber(){while(1){P(customer); //喚醒等待的一位顧客P(mutex); //顧客被喚醒,準備理發。沒有顧客就睡覺customerNumber--; //店里顧客數減一V(barber); //有顧客來了,醒來理發V(mutex); //釋放信號量} }//顧客 Customer(){while(1){P(mutex); //顧客想要理發if(customerNumber<N){ //理發店人數未滿,進店customerNumber++; //店里顧客數加一V(customer); //喚醒理發師理發V(mutex); //釋放信號量P(barber); //理發師進行理發}else //理發店人數已滿,離店V(mutex);} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的操作系统习题3—进程的互斥与同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统习题2—进程调度
- 下一篇: 操作系统习题4—进程死锁