操作系統練習題及答案——第二章 進程控制

計算機操作系統第二章練習題及答案

一、選擇題
1 、下列的進程狀態變化中,( A )變化是不可能發生的。
A. 等待態→執行態 B. 等待態→就緒態
C. 執行態→等待態 D. 執行態→就緒態
2、用P、V操作管理臨界區時,信號量的初值應定義爲( B )。
A. -1 B. 1 C. 0 D. 任意值
3、分配到必要的資源並獲得處理機時的進程狀態是( A )。
A. 執行態 B. 就緒態 C. 阻塞態 D. 撤消態
4、下面對進程的描述中,錯誤的是( A )。
A. 進程是指令的集合 B. 進程是動態的概念
C. 進程是有生命期的 D. 進程執行需要處理機
5、在操作系統中,進程是一個具有一定獨立功能的程序在某個數據集上的一次( A )。
A. 運行過程 B. 等待活動 C. 單獨操作 D. 關聯操作
6、 P、V操作是( C )。
A. 兩組不同的機器指令 B. 兩條高級進程通信原語
C. 兩條低級進程通信原語 D. 兩條系統調用命令
7、用V操作喚醒一個等待進程時,被喚醒進程的狀態變爲( A )。
A. 就緒態 B. 執行態 C. 等待態 D. 完成態
8、進程的併發執行是指若干個進程( A )。
A. 在執行的時間上是重疊的 B. 共享系統資源
C. 同時執行 D. 在執行的時間上是不可重疊的
9、下面所述步驟中,( D )不是創建進程所必需的。
A. 建立一個進程控制塊 B. 爲進程分配內存
C. 將進程控制塊鏈入就緒隊列 D. 由調度程序爲進程分配CPU
10、對於兩個併發進程,設互斥信號量爲mutex,若mutex=0,則( C )。
A. 表示有一個進程進入臨界區,另一個進程等待進入
B. 表示有兩個進程進入臨界區
C. 表示有一個進程進入臨界區 D. 表示沒有進程進入臨界區
11、進程控制就是對系統中的進程實施有效的管理,通過使用( C )、進程撤消、進程阻塞、進程喚酲等進程控制原語實現。
A. 進程運行 B. 進程同步 C. 進程創建 D. 進程管理
12、若P、V操作的信號量S初值爲2,當前值爲-1,則表示有( B )等待進程。
A. 3個 B. 1個 C. 2個 D. 0個
13 、一個進程被喚醒意味着( D )。
A. 它的優先權變爲最大 B. 其PCB移至阻塞隊列隊首
C. 該進程重新佔有了CPU D. 進程變爲就緒狀態
14、信箱通信是一種( D )通信方式。
A. 直接通信 B. 低級通信 C. 信號量 D. 間接通信
15、進程的三個基本狀態在一定條件下可以相互轉化,由運行狀態變爲阻塞狀態的條件是( A )。
A. 等待某事件發生 B. 被進程調度程序選中
C. 等待的某事件已發生 D. 時間片用完 (應是由運行變爲就緒)
16、當若干進程調用了P(S)後,有n個進程處於等待信號量S的狀態。此後,又有m個進程調用了V(s)後,有多少個進程處於等待信號量的狀態( B )。
A. m+n B. m-n C. m D. n
17、一個進程在某一時刻具有( C )。
A. 三種狀態 B. 二種狀態 C. 一種狀態 D. 四種狀態
18 、某個信號量S初值爲3,當前值爲-2,則等待在該信號量上的進程數爲( A )個。
A. 2 B. 1 C. 3 D. 4
19、用PV操作管理互斥使用的共享資源時,假定現在有n個進程在等待使用資源,那麼,至少有( B )個進程調用P操作。
A. n-1 B. n+1 C. 1 D. n
20、在進程管理中,當( A )時,進程從阻塞狀態變爲就緒狀態。
A. 等待的事件發生 B. 時間片用完
C. 等待某一事件 D. 進程被進程調度程序選中
21、進程和程序的本質區別是( A )。
A. 動態和靜態特徵 B. 順序和非順序執行機器指令
C. 存儲在內存和外存 D. 分時使用和獨佔使用計算計資源
22、進程被創建後即進入( A )排隊。
A. 就緒隊列 B. 運行隊列 C. 緩衝隊列 D. 阻塞隊列
23、進程從運行狀態變爲等待的原因可能是( B )。
A. 時間片到 B. 等待輸入/輸出和事件發生
C. .輸入/輸出事件完成 D. 某個進程被喚醒
24、正在運行的進程在信號量S上執行P操作之後,當S<0,進程將進入信號量的( C )。
A. 後備隊列 B. 提交隊列 C. 等待隊列 D. 就緒隊列
25、系統感知進程的唯一實體是( A )。
A. PCB B. SJT C. FCB D. JCB
26、操作系統通過( D )對進程進行管理。
A. JCB B. DCT C. CHCT D. PCB
27、進程的三個基本狀態在一定條件下可以相互轉化,進程由就緒狀態變爲執行狀態的條件是( A )
A. 被進程調度程序選中 B. 等待某事件發生
C. 等待的某事件已發生 D. 時間片用完 (應是由運行變爲就緒)
28、當對信號量進行V原語操作時( C )。
A. 當S<0,進程繼續執行 B. 當S>0,要喚醒一個就緒進程
C. 當S<=0,要喚醒一個等待進程 D. 當S<0,要喚醒一個等待進程
二 填空題
1、系統中各進程之間邏輯上的相互制約關係稱爲( 同步 ) 。
2、信號量的物理意義是當信號量值大於零時表示( 允許進入臨界區 );當信號量值小於零時,其絕對值爲 (等待進入臨界區的進程數)。
3 、進程在運行過程中有三種基本狀態,它們是( 就緒態 )、(運行態)、( 等待態 )

4、進程的基本特徵有 (併發性)、( 共享性)、( 動態性 )、( 異步性)。
5、對於信號量可以做( P )操作和( V )操作,( P ) 操作用於阻塞進程,( V ) 操作用於釋放進程。程序中的 ( P ) 和 ( V ) 操作應謹慎使用,以保證其使用的正確性,否則執行時可能發生死鎖。
6、同步機制應遵循的準則有(空閒讓進)、(忙則等待)、(讓權等待)、(有限等待)。
7、進程主要由 (程序)、( 數據)、(PCB )、三部分內容組成,其中 ( PCB )是進程存在的惟一標誌。而( 程序 )部分也可以爲其他進程共享。
8、程序順序執行時有順序性、( 封閉性 )和可再現性的特點。
9、有m個進程共享同一臨界資源,若使用信號量機制實現對臨界資源的互斥訪問,則信號量值的變化範圍是( -(m-1) ~ 1 )。
三、判斷題
1、在單CPU系統中,某一時刻處於運行狀態的進程有一個。 √
2、飛機機票系統是分時系統。 ×
3、多道程序的引入,主要是爲了提高CPU及其它資源的利用率。 √
4、只有處於就緒狀態的進程經調度程序選中後纔可進入執行狀態。 √
5、程序的併發執行,使程序失去了順序執行時具有的封閉性和可再現性。 √
6、優先級是進行進程調度的重要依據,一旦確定不能改變。 ×
7、分時系統中,時間片越小,響應時間越長。 ×
8、PCB是進程存在的唯一標誌,而程序是系統感知進程存在的唯一實體。 ×
9、在單CPU的系統中,任何時刻處於就緒狀態的進程有多個。 ×
10、進程獲得處理機而運行是通過調度而實現的。 √
11、進程申請CPU得不到滿足時,其狀態變爲阻塞狀態。 ×

四、簡答題
1、某系統的進程狀態轉換圖如圖所示:
請說明:
(1)引起各種狀態轉換的典型事件有哪些?
(2)當我們觀察系統中某些進程時,能夠看到某一進程產生的一次狀態轉換能引起另一進程作一次狀態轉換。在什麼情況下,當一個進程發生轉換3時能立即引起另一個進程發生轉換1?
提示:轉換1是指進程從就緒態轉換爲運行態。轉換2是指進程從運行態轉換爲就緒態。轉換3是指進程從運行態轉換爲阻塞態。轉換4是指進程從阻塞態轉換爲就緒態。
解答:
(1) 引起轉換1的典型事件:CPU調度
引起轉換2的典型事件:時間片用完,或被其他優先級高的進程搶佔CPU。
引起轉換3的典型事件:等待某種事件的發生。
引起轉換4的典型事件:等待的事件已發生。
(2)當狀態轉換3發生後,若就緒隊列非空,則進程調度程序將選出一個就緒進程投入執行,即發生了轉換1。
2、在單處理機的分時系統中,分配給進程P的時間片用完後,系統進行切換,結果調度到的仍然是進程P。有可能出現上述情形嗎? 如果可能請說明理由。
答:有可能。發生這種情況有2種原因,一是就緒隊列爲空;二是進程P在就緒隊列裏優先級最高。

五、應用題
1、如下圖所示,有一個計算進程C和一個打印進程Q,它們共享一個單緩衝區buffer,計算進程不斷地計算出一個整形數並將它放入緩衝區中,打印進程則負責從單緩衝區中取出每一個結果進行打印,請用信號量來實現它們的同步關係。

解:設兩個信號量empty和full;
empty表示緩衝區是否空,empty = 1 表示空, empty = 0表示不空,用於控制進程C是否可以放數據;初值empty = 1;
full表示緩衝區是否滿(即是否有數據可取),full = 1 表示滿, full = 0表示不滿,用於控制進程Q 是否可以q取數據;初值 full = 0。
完整實現過程如下:

Int  empty = 1 ;full = 0 ;   //  定義信號量並賦初值
A( int empty  full) // A進程      Q(int full ,empty )// Q進程
{  while(條件真)                 {  while(條件真)             
	{ 準備數據;                        { P(empty);
	P(empty);                        取數據;
	放數據;                            V(empty);
	V(full)                           輸出數據;
	}                                   }
}                                  }
Main( ){ cobegin  C ;Q ;coend }   // 主函數調用兩個函數併發執行。

2、蘋果桔子問題。如下圖所示:父親Father、兒子San和女兒Daught公用一個盤子Plate,盤子裏只能放一個水果。父親負責削蘋果和剝桔子放到盤子裏,兒子和女兒從盤子裏取水果吃。若水果爲蘋果,則兒子吃,若水果爲桔子,則女兒吃。試用信號量機制實現互斥與同步。

解:分析,找出同步規則:
當盤子Place空時,Father才能放水果,若放的是蘋果,應通知兒子,若放的是桔子,則應該通知女兒。
當盤子裏是蘋果時,進程Son才能取,取走後要通知進程Farher盤子已經空了。
當盤子裏是桔子時,進程Daught才能取,取走後要通知進程Farher盤子已經空了。
設三個信號量:empty、apple、orange,
empty表示盤子是否空,用於控制父親Father進程是否可以放水果, empty=1表示空, empty=0表示不空。初值爲empty=1.
apple表示盤子裏放的是蘋果,用於控制兒子San進程是否可取蘋果,初值爲0
orange表示盤子裏放的是桔子,用於控制女兒Daught進程是否可取桔子,初值爲0
實現過程如下:

int  empty = 1,apple=0,orange=0;
Father ( int empty,apple,orange ) //  父親進程
{  while (條件真)
	{削蘋果或剝桔子;
	 P(empty);
	 放水果;
	 if(水果是蘋果) V(apple)else  V()orange}}
}
Son ( int empty,apple )    // 兒子進程
    {  while(條件真)
{  P(apple);
取蘋果;
V(empty);
吃蘋果;
}
}
Daught ( int orange ,empty)    // 女兒進程
    {  while(條件真)
{  P(orange);
取桔子;
V(empty);
吃桔子;
}
}

3.奇偶打印問題:
三個進程R、W1、W2共享一緩衝池B,而B中能存放2個數。R將從輸入設備上讀入的自然數放到緩衝器B中。若存放的是奇數,則允許W1將其取出打印,如果是偶數,由進程W2取出打印。請利用P、V操作保證三個進程間的同步和互斥。

解:設信號量如下:
用empty表示緩衝區B是否空,empty=1表示B空,empty=0表示B不空;
用add表示B中的數爲奇數,初值add=0;
用even表示B中的數爲偶數,初值even=0.

 R( int  empty,add,even )
{ while(條件真)
{  讀入一個自然數;
               P(empty);
               向B中放入自然數;
               if(x%2!=0)        // 若讀入的自然數是奇數
               V(add) ;           // 向W1發信號
               else              // 若讀入的自然數是奇數     
               V(even);          // 向W2發信號          
}
       }
void W1(int add,empty)
{   while(條件真)
                {  P(add);
                   取數據;;
                   V(empty);
                   打印數據;
                 }
}
void W2(int even,empty)
{   while(條件真)  
                {  P(even);
                   取數據;
                   V(empty);
                   輸出數據;
}
}

4.蘋果橘子問題
蘋果桔子問題:桌上有一隻盤子,每次只能放入一隻水果;爸爸專向盤子中放蘋果(apple),媽媽專向盤子中放桔子(orange),兒子專等吃盤子中的桔子,女兒專等吃盤子裏的蘋果。請用PV操作和信號量來描述四者的同步動作。

解:設信號量。需要4個信號量:
互斥信號量 mutex 初值爲1,用於實現爸爸媽媽向盤子中互斥地放水果;
信號量empty表示盤子是否空,empty=1表示空,empty=0表示不空;
信號量apple表示盤子中的水果是否爲蘋果,apple=1表示是,apple=0表示不是;
信號量orange表示盤子中的水果是否爲桔子,orange=1表示是,orange=0表示不是;

Int mutex=1,empty=1,full=0,apple=0,orange=0; //定義信號量並賦初值

Void Father( int mutex,empty,apple)  //爸爸進程
{  While(條件真)
{   P(empty);          //果盤是否爲空。
P(mutex);          //是否有其他的人正在使用果盤.
放蘋果;
V(mutex);          //釋放盤子
P(orange);         //通知兒子可以取蘋果了。
}
}
Void Mother( int mutex,empty,orange   )  //媽媽進程
{   While(條件真)
{   P(empty);      //果盤是否爲空。
P(mutex);      //是否有其他的人正在使用果盤.
放橘子;
V(mutex);    
P(full2) ;    //通知女兒可以取桔子了。
}
}
Void Son( int apple,mutex,empty )     //兒子進程
{   While(條件真)
{   P(apple) ;     //盤子中是否是蘋果
P(mutex);    //是否有其他人在使用盤子。
取蘋果;
V(mutex);
P(empty) ;      // 通知爸爸可以放蘋果了。
吃蘋果;
}
}

void Daughter( int orange,mutex,empty)  //女兒進程
{   While(條件真)
{   P(orange);
P(mutex);
取橘子;
V(mutex)
P(empty)
}
}
main( )   // 主函數
   {  cobegin  
Father;
Mother;
San;
Daught;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章