1. 程式人生 > >《作業系統--精髓與設計原理》第五章複習題

《作業系統--精髓與設計原理》第五章複習題

第五章    併發性:互斥與同步

一、列出與併發相關的4個設計問題。

程序間通訊資源共享和競爭(如記憶體、檔案、I/O訪問)、多個程序活動的同步以及給程序分配處理器時間等。

二、產生併發的三種上下文是什麼?

  1. 多應用程式:多道程式設計技術允許在多個活動的應用程式間動態共享處理器時間。
  2. 結構化應用程式:作為模組化設計和結構化程式設計的擴充套件,一些應用程式可被有效地設計成一組併發程序。
  3. 作業系統結構:同樣的結構化程式設計優點適用於系統程式,且我們已知作業系統自身常常作為一組程序或執行緒實現。

三、執行併發程序最基本的要求是什麼?

控制對共享資源的訪問,加強互斥的能力。

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

  1. 程序之間相互不知道對方的存在:
  2. 程序間接知道對方的存在(如共享物件)
  3. 程序直接知道對方的存在(它們有可用的通訊原語0)

五、競爭程序和合作程序有何區別?

競爭程序需要同時訪問相同的資源,像磁碟,檔案或印表機。合作程序要麼共享訪問一個共有的資源,像一個記憶體訪問區,程序必須合作以確保它們共享的資料得到正確管理,控制機制必須確保共享資料的完整性。要麼就與其他程序相互通訊,在一些應用程式或活動上進行合作,通訊提供同步和協調各種活動的方法。

六、列出與競爭程序相關的三個控制問題,並簡要給出各自的定義。

  1. 互斥(mutual exclusion):競爭程序僅可以訪問一個臨界資源(一次僅有一個程序可以訪問臨界資源),併發機制必須滿足一次只有一個程序可以訪問臨界資源這個規則。當一個程序在臨界區訪問共享資源時,其他程序不能進入該臨界區訪問任何共享資源的情形。
  2. 死鎖(deadlock):兩個或兩個以上的程序因每個程序都在等待其他程序做完某些事情而不能繼續執行的情形。
  3. 飢餓(starvation):一個可執行程序儘管能繼續執行,但被排程程式無限期地忽視,而不能被排程執行的情形。

七、列出對互斥的要求。

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

八、在訊號量上可以執行什麼操作?

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

  1. 一個訊號量可以初始化為非負數。
  2. semWait操作使訊號量減1。若值變成負數,則阻塞執行semWait的程序,否則程序繼續執行。
  3. semSignal操作使訊號量加1.若值小於等於零,則被semWait操作阻塞的程序解除阻塞。
除了這三個操作外,沒有任何其他方法可以檢查或操作訊號量。

九、二元訊號量跟一般訊號量有何區別?

二元訊號量(binary semaphore)是一種更為嚴格的形式。二元訊號量的值只能是0或1,可由下面三個操作定義:

  1. 二元訊號量可以初始化為0或1.
  2. semWaitB操作檢查訊號的值。若值為0,則程序執行semWaitB就會受阻。若值為1,則將值改為0,並繼續執行該程序。
  3. semSignalB操作檢查是否有任何程序在該訊號上受阻。若有程序受阻,則通過semWaitB操作,受阻的程序會被喚醒;若沒有程序受阻,則值設定為1。
理論上,二元訊號量更易於實現,且可以證明它和普通訊號具有相同的表達能力。

十、強訊號量和弱訊號量有何區別?

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

十一、什麼是管程?

管程是由一個或多個過程、一個初始化序列和區域性資料組成的軟體模組,其主要特點如下:

  1. 區域性資料變數只能被管程的過程訪問,任何外部過程都不能訪問。
  2. 一個程序通過呼叫管程的一個過程進入管程。
  3. 在任何時候,只能有一個程序在管程中執行,呼叫管程的任何其他程序都被阻塞,以等待管程可用。

十二、關於訊息,阻塞和無阻塞有何區別?

傳送者和接收者都可阻塞或不阻塞。通常有三種組合,但任何一個特定系統通常只實現一種或兩種組合:

  1. 阻塞send,阻塞receive:傳送者和接收者都被阻塞,直到完成資訊的投遞。這種情況有時也稱會合(rendezvous),它考慮到了程序間的緊密同步。
  2. 無阻塞send,阻塞receive:儘管傳送者可以繼續,但接收者會被阻塞直到請求的訊息到達。這可能是最有用的一種組合,它允許一個程序給各個目標程序儘快地傳送一條或多條訊息,繼續工作前必須接收到訊息的程序將被阻塞,知道該訊息到達。例如,一個伺服器程序給其他程序提供服務或資源。
  3. 無阻塞send,無阻塞receive:不要求任何一方等待。
傳送者和接收者任一方阻塞則訊息傳遞需要等待,都無阻塞則不需等待。

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

讀者/寫者問題定義如下:存在一個多個程序共享的資料區,該資料區可以是一個檔案或一塊記憶體空間,甚至可以是一組暫存器;有些程序(reader)只讀取這個資料區中的資料,有些程序(writer)只往資料區中寫資料。此外,還必須滿足以下條件:

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