一、選擇題
1、進程與程序的根本區別是(A)。
A.靜態和動態特征 B.是不是被調入到內存中
C.是不是存在三種基本狀態 D.是不是占有處理機
進程與程序的區別:
(1)動態性:進程由創建而產生,由調度而執行,由撤銷而消亡,進程有一定的生命周期;而程序只是一組有序的指令集合。
(2)並發性:多個進程實體能夠在內存中同時運行;程序不能並發執行。
(3)獨立性:進程是一個能獨立運行獨立接受調度的基本單位;程序只有建立PCB后才能作為一個獨立的單位參與運行。
(4)異步性:異步性導致了進程的不可再現性,因為進程按照各自獨立的、不可預知的速度向前推進。
2、操作系統是根據( B)來對並發執行的進程進行控制和管理的。
A.進程放入基本狀態 B.進程控制塊
C.多道程序設計 D.進程的優先權
通過為每一個進程專門定義一個數據結構——進程控制塊PCB來方便系統描述和管理進程。
3、某進程由於需要從磁盤上讀入數據而處於等待狀態。當系統完成了所需的讀盤操作后,此時該進程的狀態將(D)。
A.從就緒變為運行 B.從運行變為就緒
C.從運行變為阻塞 D.從阻塞變為就緒
進程的三種基本狀態:
就緒:進程已經獲得了除CPU以外的所有必要資源,只要獲得了CPU便可立即執行。
執行:進程已經獲得了CPU,其進程正在執行的狀態。
阻塞:正在執行的進程由於IO請求、申請緩沖區失敗等(如:訪問臨界資源)暫時無法繼續執行的狀態。
引起進程阻塞的事件: 等待某操作的完成;新數據尚未到達;等待新任務的到達。
4、一個進程被喚醒意味着( B)。
A.該進程重新占有CPU B.進程狀態變為就緒狀態
C.它的優先權變為最大 D.其PCB移至就緒隊列的隊首
一個進程喚醒的過程:需要借助於wakeup原語,首先把被阻塞的進程從等待改事件的隊列中移除,將其PCB中的現行狀態由阻塞改為就緒,然后將該PCB插入到就緒隊列中。
5、進程從運行態到等待態可能是( A )。
A.運行進程執行了P操作 B.運行進程執行了V操作
C.進程時間片用完 D.進程被調度
A:當p操作之前信號量的值為0的時候,執行p操作后信號量的值小於0,進入阻塞狀態。
B:v操作是釋放資源,會使得進程從阻塞狀態變為就緒狀態。
C:進程時間片用完會使得進程重執行狀態變為就緒狀態。
6、一個進程釋放了一台打印機,有可能改變(C )的狀態。
A.自身進程 B.輸入輸出進程
C.另一個等待打印機的進程 D.所有等待打印機的進程
另外一個等待打印機的進程處於阻塞狀態,獲得打印機后將由阻塞狀態變為就緒狀態。
7、可能導致進程從運行狀態變為就緒狀態的事件為( D )。
A.等待I/O操作 B.等待的事件發生
C.進程運行結束 D.出現了比當前進程優先級高的進行
A:運行狀態變為阻塞狀態
B:運行狀態變為阻塞狀態
C:運行狀態變為終止狀態
D:運行狀態變為就緒狀態
8、必然會引起進程切換的事件為(B )。
A.創建一個新的進程后進入就緒狀態 B.一個進程從運行狀態變為就緒狀態
C.一個進程從阻塞狀態變為就緒狀態 D.以上說法都不對
進程切換是指CPU調度不同的進程執行,當一個進程從運行狀態變為就緒狀態時,CPU調度另一個進程執行,引起進程切換。
9、系統中有n(n>2)個進程,則不可能發生( C)。
A. 有1個運行進行和n-1個就緒進程,但沒有進程處於等待狀態
B. 有1個運行進程和1和就緒進程,剩下n-2個進程處於等待進行
C. 沒有運行進程,1個就緒進程,剩下的n-1個進程處於等待狀態
D. 沒有就緒的進程和運行的進程,全部進程處於等待狀態
C:沒有運行進程說明CPU資源沒有被利用,那么為什么還有進程等待着CPU資源不去利用呢?
10、下列狀態的改變可以由進程自身決定的是( A )。
A.從運行到阻塞 B.從運行到就緒
C.從就緒到運行 D.從阻塞到就緒
A:申請資源失敗
B:時間片用完
C:獲得CPU資源
D:獲得了等待的資源
11、用戶可以通過(C)創建或終止一個進程。
A.函數調用 B.指令 C.系統調用 D.命令
原語操作
12、兩個進程合作完成一個任務,在並發執行中,一個進程要等待其合作伙伴發來信息,或者建立某個條件后再向前執行,這種關系是進程間的(A )關系。
A.同步 B.互斥 C.合作 D.競爭
進程同步的主要任務是,是對多個相關進程在執行次序上進行協調,使得並發執行的多個進程之間能夠按照一定的規則共享資源。
13、進程間的同步和互斥,分別表示了進程間的(B )。
A.獨立和制約 B.協作和競爭 C.動態性和獨立性 D.不同狀態
進程同步時存在兩種相互制約的關系:
(1)間接相互制約(競爭):由於共享系統資源如:CPU、IO設備。
(2)直接相互制約(合作):如:生產者和消費者問題。
14、操作系統在使用信號量解決同步和互斥問題中,若P、V操作的信號量S初始值為3,當前值為-2,則表示有( 2)個等待進程。
信號量值的意義:
例如:設某一個信號量的初始值為1,進行一次p操作后變為0,此時,已經沒有資源了,但是沒有進程處於阻塞;
進行第二次操作后,變為-1,表示已經沒有資源了,並且另外一個進程處於阻塞狀態;
初始值1表示可用資源數量。
15、有3個進程共享同一個程序段,而每次只允許兩個進程進入該程序段,若用P、V操作同步機制,則信號量S的取值范圍是( -1,0,1,2)。
為了保證每次只允許兩個進程進入該程序段需要設置信號量的初始值為2。
所以:當沒有進程進入時信號量的值為2;一個進程進入1;兩個進入0,;三個進入-1(阻塞)
16、設某資源關聯的信號量初值為3,當前值為1,若M表示資源可以用的數量,N表示等待資源的進程數,則M、N分別是( B )。
A.0、1 B.1、0 C.1、2 D.2、0
當前值為1代表一個可用,沒有進程在等待資源。
如果有進程在等待資源的話,信號量的當前值應該為小數。
17、執行V操作時,當信號量的值(C),應釋放一個等待該信號量的進程。
A.小於0 B.大於0 C.小於等於0 D.大於等於0
p操作的作用是申請資源,即將資源數減1,然后判斷資源數是否小於0,若小於0,則進入阻塞狀態。
v操作的作用是歸還資源,將所申請的資源數加一,然后判斷資源數是否小於等於0,若小於等於0說明有進程阻塞在當前資源上,喚醒一個阻塞的進程。
18、對兩個並發進程,其互斥信號量為mutex,若mutex=0,則表明(C)
A.沒有進程進入臨界區
B.有兩個進程進入臨界區
C.一個進程進入臨界區但沒有進程處於阻塞狀態
D.一個進入臨界區一個出去等待進入臨界區的狀態
等於零說明沒有資源了,但是沒有進程處於阻塞狀態。
19、信箱通信是一種( B)。
A.直接通信 B.間接通信 C.低級通信 D.信號量
是一種間接通信方式,需要某種中間實體來完成。
20、下面說法正確的是(C)。
A.不論是系統支持的線程還是用戶級線程,其切換都需要內核的支持
B.線程是資源分配的單位,進程是調度和分派的單位
C.不管系統中是否有線程,進程都是擁有資源的獨立單位
D.在引入線程的系統中,進程仍是資源調度和分配的基本單位
A:用戶級線程是與內核無關的P79
B:進程:
(1)擁有資源的基本單位。
(2)可獨立調度和分派的基本單位。
線程:
(1)線程本身擁有少量資源,它可以共享所屬進程的資源。
(2)獨立運行和調度的基本單位。
C:線程本身擁有少量資源,它可以共享所屬進程的資源。
D:引入線程后,進程仍然是資源分配的單位,線程是調度和分派的單位。
21、下列選項中,會導致用戶從用戶態切換到內核態的操作是(B)
ⅰ.整數除以零
ⅱ.sin函數調用
ⅲ.read函數調用
A. ⅰ和ⅱ B. ⅰ和ⅲ C. ⅱ和ⅲ D. ⅰ、ⅱ和ⅲ
二、綜合應用題
1、進程之間存在哪些制約關系?下列活動屬於哪些制約關系?
進程之間存在着直接制約和間接制約兩種制約關系,其中直接制約(同步)是由於進程間的相互合作而引起的(生產者、消費者問題),而間接制約(互斥)則是由於進程間共享臨界資源而引起的。P48
(1)若干學生去圖書館借同一本書
間接制約關系(互斥),因為書是臨界資源,需要采用互斥的方式來實現對該資源的共享。
(2)兩隊進行籃球比賽
間接制約關系(互斥),因為籃球是臨界資源。
(3)流水線生產的各道工序
直接制約(同步),一個工序生產后才能開始下一個工序。
(4)商品生產和消費
直接制約(同步),生產后才能消費。
2、某組相互合作的進程,其前趨圖如下所示,信號量a,b,c,d,e,f 的初始值為0,請用P、V 操作實現進程間的同步操作。p57
3、桌子上有一只盤子,每次只能向其中放入一個水果。爸爸專門向盤子中放蘋果,媽媽專門向盤子中橘子,兒子專門等吃盤子中的橘子,女兒專門等吃盤子中的蘋果。只有盤子為空時,爸爸或媽媽就可向盤子中放一個水果;僅當盤子中有自己需要的水果時,兒子或女兒可以從盤子中取出。請利用P、V操作來實現爸爸、媽媽、兒子、女兒之間的同步和互斥關系。
盤子是臨界資源,要實現互斥訪問,需要設置一個信號量,用mutex表示,蘋果a,橘子o,盤子的狀態,即空閑空間大小(空或滿)e。
semphone f=1,mutex=1,a=0,o=0; processDad(){ wait(f);//先判斷盤子是否有空間 ,沒有的話就不能向下進行了 wait(mutex);// setApple();//放置蘋果 signal(a);//蘋果加一 signal(mutex);//釋放盤子資源 } processMom(){ wait(f);//先判斷盤子是否有空間 ,沒有的話就不能向下進行了 wait(mutex);//判斷盤子是否被占用,即是否有其他人在操作 setOrange();//放置橘子 signal(o);//橘子加一 signal(mutex);//釋放盤子資源 } processSon(){ wait(o);//先判斷盤子是否有橘子 ,沒有的話就不能向下進行了 wait(mutex);//判斷盤子是否被占用,即是否有其他人在操作 eatOrange();//拿走橘子 signal(e);//盤子空間加一 signal(mutex);//釋放盤子資源 } processDaughter(){ wait(a);//先判斷盤子是否有蘋果 ,沒有的話就不能向下進行了 wait(mutex);//判斷盤子是否被占用,即是否有其他人在操作 eatApple();//拿走蘋果 signal(e);//盤子空間加一 signal(mutex);//釋放盤子資源 }
注意:需要設置一個信號量來實現對盤子的互斥訪問,每一個進程執行對盤子的p操作后,只要盤子還有資源,就可以繼續進行,否則表示盤子已經被占用了,該進程進入阻塞狀態。
4、某博物館最多可以容納1000人同時參觀,有一個出入口,該出入口一次僅允許一個人通過。參觀者的活動描述如下:
參觀者進程:
{
進門;
……
參觀;
……
出門;
}
請添加必要的信號量和P、V操作以實現上述過程中的互斥與同步。要求寫出完整的過程,說明信號量的含義並賦初值。
semophone empty=1000,mutex=1;//empty表示空閑位置的數量 p(empty);//因為是先執行進門操作,所以需要先對容量進行判斷 p(mutex);//占用臨界資源 進門; v(mutex);//釋放 p(mutex);//占用 出門; v(mutex);//釋放 v(empty);//空間加一
5、有一只最多能裝2只兔子的鐵籠子,獵人僅能向籠子中放入兔子(每次只能放入1只),若籠子是滿的,則獵人必須等待;飯店老板僅能從籠子中取兔子(每次只能取出1只),若籠子是空的則他也必須等待。假設初始時籠子是空的。使用P、V操作實現獵人和飯店老板進程之間的同步與互斥。要求寫出完整的過程,並對信號量賦初值。
semophone mutex=1,empty=2,full=0; Hunter(){ p(empty);//先判斷是否有空間 p(mutex);//獵人和用戶要實現對籠子的互斥訪問 v(mutex);//釋放籠子資源 v(full);//空間減一 } Boss(){ p(full);//先判斷籠子里是否有兔子 p(mutex);//獵人和用戶要實現對籠子的互斥訪問 v(mutex);//釋放籠子資源 v(empty);//空間加一 }
此題設置了信號量full和empty,而取蘋果和橘子的題目中只設置了一個信號量empty這是為什么呢?
因為在橘子或蘋果的時候需要判斷盤子是否有空間,執行一次p操作。但是在取橘子或蘋果的時候並不是去判斷盤子是否是滿的(full=1),而是判斷有沒有橘子或蘋果,因此full信號量是多余的。
總結:對於信號量問題,一般都是(1)先判斷空間的數量(信號量empty、full),然后需要(2)對臨界資源(信號量mutex)是否被占用進行判斷。