官术网_书友最值得收藏!

2.3 考研真題詳解

1下列選項中會導致進程從執行態變為就緒態的事件是(  )。[2015年統考]

A.執行P(wait)操作

B.申請內存失敗

C.啟動I/O設備

D.被高優先級進程搶占

【答案】D

【解析】D項,被高優先級進程搶占,進程會由執行態變為就緒態。ABC三項,程序由于缺少資源而由執行態轉為阻塞態。

2下列關于進程和線程的敘述中,正確的是(  )。[2012年統考]

A.不管系統是否支持線程,進程都是資源分配的基本單位

B.線程是資源分配的基本單位,進程是調度的基本單位

C.系統級線程和用戶級線程的切換都需要內核的支持

D.同一進程中的各個線程擁有各自不同的地址空間

【答案】A

【解析】進程始終是操作系統資源分配的基本單位,線程不能直接被系統分配資源。因此A項是正確的,B項錯誤,而且線程是調度的基本單位。用戶級線程只在用戶進程的空間內活動,系統并不能感知到用戶級線程的存在,所以用戶級線程的切換不需要通過內核。系統級線程的切換是需要內核支持的,因此C項錯誤。同一進程下的各線程共享進程的地址空間,并共享進程所持有的資源,但線程有自己的棧空間,不與其他線程共享,因此D項錯誤。

3有兩個并發執行的進程P1和P2,共享初值為1的變量x。P1對x加1,P2對x減1。

兩個操作完成后,x的值(  )。[2011年統考]

A.可能為-1或3

B.只能為1

C.可能為0、1或2

D.可能為-1、0、1或2

【答案】C

【解析】執行結果為1,執行結果為2,執行結果為0,結果-1無法得到。這個題目的進程之間沒有同步關系,因此通過分步嘗試就可以得到答案。有的題目中兩個進程會有同步關系,可以畫出前趨圖,以防推進順序錯誤。

4在支持多線程的系統中,進程P創建的若干個線程不能共享的是(  )。[2011年統考]

A.進程P的代碼段

B.進程P中打開的文件

C.進程P的全局變量

D.進程P中某線程的棧指針

【答案】D

【解析】進程是資源分配的基本單元,進程下的各線程可以并行執行,它們共享進程的資源,包括地址空間、持有資源、相關變量和代碼等,但各個線程有自己的棧,這樣各線程才能夠獨立執行程序而不相互干擾,各自的棧指針對其他線程是透明的,因此進程P中某線程的棧指針是不能共享的。

5下列選項中,導致創建新進程的操作是(  )。[2010年統考]

.用戶登錄成功

.設備分配

.啟動程序執行

A.僅

B.僅

C.僅

D.

【答案】C

【解析】用戶登錄成功就需要為這個用戶創建進程來解釋用戶的各種命令操作,用戶的相應操作都會反映為該用戶進程的請求或反饋,便于系統管理;設備分配由相應進程提出申請,內核自動完成,對于設備的操作可以歸于提出申請的這個進程,因此不需要創建新進程;啟動程序執行,系統需要為這個程序創建一個對應的動態結構,也就是進程,來控制和管理這個程序的運行,可以簡單地說啟動程序的目的就是創建一個新進程來執行程序。

6下列選項中,降低進程優先權級的合理時機是(  )。[2010年統考]

A.進程的時間片用完

B.進程剛完成I/O操作,進入就緒列隊

C.進程長期處于就緒列隊

D.進程從就緒狀態轉為運行態

【答案】A

【解析】進行降低優先級的操作主要是為了改善交互式系統的響應時間,并均衡各個作業的公平性。A項進程時間片用完可以降低其優先級;B項中進程剛完成I/O,進入就緒隊列后應該等待被處理器調度,故應提高優先級;C項中長期處于就緒隊列中的進程應當提高其優先級,避免產生“饑餓”甚至“餓死”現象;D中優先級不應該在此時降低,應該在時間片用完后降低。

7設與某資源相關聯的信號量初值為3,當前值為1,若M表示該資源的可用個數,N表示等待該資源的進程數,則M,N分別是(  )。[2010年統考]

A.0,1

B.1,0

C.1,2

D.2,0

【答案】B

【解析】題目中信號量初值為3,表示該資源初始時有3個。信號量當前值K>0時,表示此資源還有K個資源可用,題目中信號量當前值為1,表示還有1個可用資源,M應該為1。由于還存在可用資源,所以此時不應存在等待該資源的進程,N應當為0。因此答案選B項。

8某計算機系統中有8臺打印機,由K個進程競爭使用,每個進程最多需要3臺打印機。該系統可能會發生死鎖的K的最小值是(  )。[2009年統考]

A.2

B.3

C.4

D.5

【答案】C

【解析】這種題用到組合數學中鴿巢原理的思想,考慮最極端情況,因為每個進程最多需要3臺打印機,如果每個進程已經占有了2臺打印機,只要還有多的打印機,那么總能滿足達到3臺的條件,不會產生死鎖。所以,將8臺打印機分給K個進程,每個進程有2臺打印機且無剩余打印機,這個情況就是極端情況,K為4。

93個進程P1、P2、P3互斥使用一個包含N(N>0)個單元的緩沖區,P1每次用produce()生成一個正整數,并用put()送入緩沖區某一空單元中;P2每次用getodd()從該緩沖區中取出一個奇數,并用countodd()統計奇數個數;P3每次用geteven()從該緩沖區中取出一個偶數,并用counteven()統計偶數個數。請用信號量機制實現這3個進程的同步與互斥活動,并說明所定義的信號量的含義。要求用偽代碼描述。[2009年統考]

答:定義信號量odd控制P1與P2之間的同步,初值為0;even控制P1與P3之間的同步,初值為0;empty表示緩沖區中的空單元數,初值為N;mutex控制進程間互斥使用緩沖區,初值為1。程序如下:

semaphore mutex=1;
semaphore odd=0,even=0;
semaphore empty=N;
Process P1()
{
  while(true)
  {
    number=produce();
    P(empty); //檢查緩沖區是否有空單元
    P(mutex); //申請訪問緩沖區
    put();
    V(mutex);
    if(number%2==0)
      V(even);
    else
      V(odd);
  }
}

Process P2()
{
  while(true)
  {
    P(odd); //檢查是否有奇數
    P(mutex); //申請訪問緩沖區
    getodd(); //取出一個奇數
    V(mutex);
    V(empty);
    countodd();
  }
}
Process P3()
{
  while(true)
  {
    P(even); //檢查是否有偶數
    P(mutex); //申請訪問緩沖區
    geteven(); //取出一個偶數
    V(mutex);
    V(empty);
    counteven();
  }
}

主站蜘蛛池模板: 铜山县| 连江县| 蒙山县| 大连市| 漳平市| 隆昌县| 德钦县| 修文县| 秦皇岛市| 宜城市| 宜兰县| 青川县| 胶南市| 湖州市| 蒲城县| 炎陵县| 鄂尔多斯市| 方山县| 喀什市| 安新县| 沐川县| 巨野县| 尤溪县| 宝清县| 涿州市| 通州市| 嘉荫县| 买车| 拉萨市| 什邡市| 台山市| 淮南市| 长治县| 道孚县| 怀安县| 永春县| 西华县| 鄂托克旗| 白河县| 顺义区| 克山县|