操作系統--精髓與設計原理(第八版)第五章復習題答案


操作系統--精髓與設計原理(第八版)第五章復習題答案

5.1 列出與並發相關的4個設計問題。

  1. 操作系統必須能夠跟蹤不同的進程,這可使用進程控制塊來實現。
  2. 操作系統必須為每個活動進程分配和釋放各種資源。有時,多個進程想訪問相同的資源。這些資源包括:
    • 處理器時間: 這是調度功能。
    • 存儲器: 大多數操作系統使用虛存方案。
    • 文件。
    • I/O設備。
  3. 操作系統必須保護每個進程的數據和物理資源,避免其他進程的無意干擾,這涉及與存儲器、文件和I/O設備相關的技術。
  4. 一個進程的功能和輸出結果必須與執行速度無關(相對於其他並發進程的執行速度)。

5.2 產生並發的三種上下文是什么?

  • 多應用程序:多道程序設計技術允許在多個活動的應用程序間動態共享處理器時間。
  • 結構化應用程序:作為模塊化設計和結構化程序設計的擴展,一些應用程序可被有效地設計成一組並發進程。。
  • 操作系統結構:同樣的結構化程序設計優點適用於系統程序,且我們已知操作系統自身常常作為一組進程或線程實現。

5.3 執行並發進程的最基本要求是什么?

​ 最基本要求是增加進程間的互斥能力。

5.4 列出進程間的三種互相知道的程度,並簡要給出各自的定義。

  • 進程之間相互不知道對方的存在:這是一些獨立的進程,它們不會一起工作。關於這種情況的最好例子是多個獨立進程的多道程序設計,可以是批處理作業,也可以是交互式會話,或者是兩者的混合。盡管這些進程不會一-起工作, 但操作系統需要知道它們對資源的競爭情況(competition)。例如,兩個無關的應用程序可能都想訪問同一個磁盤、文件或打印機。操作系統必須控制對它們的訪問。
  • 進程間接知道對方的存在:這些進程並不需要知道對方的進程ID,但它們共享某些對象,如一個I/O緩沖區。這類進程在共享同-一個對象時會表現出合作行為(cooperation)。
  • 進程直接知道對方的存在:這些進程可通過進程ID互相通信,以合作完成某些活動。同樣,這類進程表現出合作行為。

5.5 競爭進程和合作進程間有何區別?
競爭進程需要同時訪問相同的資源,像磁盤,文件或打印機。合作進程要么共享訪問一個共有的資源,像一個內存訪問區,要么就與其他進程相互通信,在一些應用程序或活動上進行合作。
5.6 列出與競爭進程相關的三個控制問題,並簡要給出各自的定義。

  • 互斥(mutual exclusion): 假設兩個或更多的進程需要訪問一個不可共享的資源,如打印機。在執行過程中,每個進程都給該I/O設備發命令,接收狀態信息,發送數據和接收數據。我們把這類資源稱為臨界資源(critical resource),使用臨界資源的那部分程序稱為程序的臨界區Ccritical section)。一次只允許有一 一個程序在臨界區中,這一點非常重要。
  • 死鎖(deadlock):考慮兩個進程P1和P2,以及兩個資源R1和R2,假設每個進程為執行部分功能都需要訪問這兩個資源,那么就有可能出現下列情況:操作系統把R1分配給P2,把R2分配給P1,每個進程都在等待另一個資源,且在獲得其他資源並完成功能前,誰都不會釋放自己已擁有的資源,此時這兩個進程就會發生死鎖。
  • 飢餓(starvation):假設有三個進程(P1、P2 和P3),每個進程都周期性地訪問資源R。考慮這種情況,即P1擁有資源,P2和P3都被延遲,等待這個資源。當P1退出其臨界區時,P2和P3都允許訪問R,假設操作系統把訪問權授予P3,並在P3退出臨界區之前P1又要訪問該臨界區,若在P3結束后操作系統又把訪問權授予P1,且接下來把訪問權輪流授予P1和P3,那么即使沒有死鎖,P2也可能被無限地拒絕訪問資源。

5.7 列出對互斥的要求。

要提供對互斥的支持,必須滿足以下要求:
1. 必須強制實施互斥:在與相同資源或共享對象的臨界區有關的所有進程中,一次只允許一個進程進入臨界區。
2. 一個在非臨界區停止的進程不能干涉其他進程。
3. 絕不允許出現需要訪問臨界區的進程被無限延遲的情況,即不會死鎖或飢餓。
4. 沒有進程在臨界區中時,任何需要進入臨界區的進程必須能夠立即進入。
5. 對相關進程的執行速度和處理器的數量沒有任何要求和限制。
6. 一個進程駐留在臨界區中的時間必須是有限的。

5.8 在信號量上可以執行什么操作?

為達到預期效果,可把信號量視為-一個值為整數的變量,整數值上定義了三個操作:

  1. 一個信號量可以初始化成非負數。
  2. semWait 操作使信號量減1。若值變成負數,則阻塞執行semWait的進程,否則進程繼續執行。
  3. semSignal 操作使信號量加1。若值小於等於零,則被semwait操作阻塞的進程解除陽塞。

5.9 二元信號量和一般信號量有何區別?

  1. 二元信號量可以初始化為0或1。
  2. semWaitB 操作檢查信號的值。若值為0,則進程執行semWaitB就會受阻。若值為1,則將值改為0,並繼續執行該進程。
  3. semSignalB 操作檢查是否有任何進程在該信號上受阻。若有進程受阻,則通過semWaitB操作,受阻的進程會被喚醒;若沒有進程受阻,則值設置為1。

5.10 強信號量和弱信號量有何區別?

強信號量要求在信號量上等待的進程按照先進先出的規則從隊列中移出。弱信號量沒有此規則。

5.11 什么是管程?

管程是由一個或多個過程,一個初始化序列和局部數據組成的軟件模塊,其主要特定如下:

  • 局部數據變量只能被管程的過程訪問,任何外部過程都不能訪問。
  • 一個進程通過調用管程的一個過程進入管程。
  • 在任何時候,只能有一個進程在管程中執行,調用管程的任何其他進程都被阻塞,以等待管程可用。

5.12 關於消息,阻塞和無阻塞有何區別?

發送者和接收者任一方阻塞則消息傳遞需要等待,都無阻塞則不需要等待。

5.13 與讀者/寫者問題相關的條件通常有哪些?

​ 存在一個多個進程共享的數據區,該數據區可以是一個文件,一塊內存等;有些進程(reader)只能讀取這個數據區中的數據,有些進程(writer)直往數據區中寫數據。此外,還必須滿足以下條件:

  1. 任意數量的讀進程可以同時讀這個文件。
  2. 一次只有一個寫進程可以寫文件。
  3. 若一次寫進程正在寫文件,則禁止任何讀進程讀文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM