Java程序員面試分類真題11_第1頁
Java程序員面試分類真題11_第2頁
Java程序員面試分類真題11_第3頁
Java程序員面試分類真題11_第4頁
Java程序員面試分類真題11_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

Java程序員面試分類真題11(總分:100.00,做題時間:120分鐘)一、單項選擇題(總題數(shù):31,分數(shù):0.00)1.

在Linux操作系統(tǒng)下,非超級用戶要運行某個文件夾下的可執(zhí)行腳本,對該文件夾至少要擁有______權(quán)限;如果要用1s命令查看該文件夾下有哪些文件,對該文件夾至少要擁有______權(quán)限。

(分數(shù):2.00)

A.前者是執(zhí)行權(quán)限,后者是執(zhí)行和讀取權(quán)限

B.前者是執(zhí)行和讀取權(quán)限,后者是執(zhí)行和讀取權(quán)限

C.前者是執(zhí)行權(quán)限,后者是讀取權(quán)限

D.前者是執(zhí)行和讀取權(quán)限、后者是讀取權(quán)限解析:Linux操作系統(tǒng)中的每個文件和目錄都有存取許可權(quán)限,存取權(quán)限規(guī)定了三種訪問文件或目錄的方式:讀(r)、寫(w)、可執(zhí)行或查找(x)。

對于文件的存取權(quán)限而言,讀權(quán)限(r)表示只允許指定用戶讀取相應文件的內(nèi)容,而禁止對它做任何的更改操作,將所訪問的文件的內(nèi)容作為輸入的命令都需要有讀的權(quán)限,例如cat(連接并顯示指定的一個或者多個文件的有關信息)、more(類似cat,不過會一頁頁地顯示,方便使用者一頁頁閱讀)等。寫權(quán)限(w)表示允許指定用戶打開并修改文件,例如命令vi、cp等。執(zhí)行權(quán)限(x)表示允許指定用戶將該文件作為一個程序執(zhí)行。

對于目錄的存取權(quán)限而言,在ls命令后加上-d選項,可以了解目錄文件的使用權(quán)限。其中,讀權(quán)限(r)表示可以列出存儲在該目錄下的文件,即讀目錄內(nèi)容列表,這一權(quán)限允許Shell使用文件擴展名列出相匹配的文件名。寫權(quán)限(w)表示允許用戶從目錄中刪除或添加新的文件,通常只有系統(tǒng)管理員才具有寫權(quán)限。執(zhí)行權(quán)限(x)表示允許用戶在目錄中查找,并能用cd命令將工作目錄改到該目錄。

本題中,要想進入目錄,都需要具有x權(quán)限(執(zhí)行權(quán)限),而查看目錄下的文件需要r權(quán)限(讀權(quán)限)和x權(quán)限,因為相當于進入了目錄。執(zhí)行目錄下某個可執(zhí)行文件,需要進入目錄的x權(quán)限。所以,選項A正確。2.

“死鎖”是針對______的。

(分數(shù):2.00)

A.某個進程申請資源數(shù)超過了系統(tǒng)擁有的最大資源數(shù)

B.某個進程申請系統(tǒng)中不存在的資源

C.硬件故障

D.多個并發(fā)進程競爭獨占型資源

√解析:所謂死鎖是指兩個或兩個以上的進程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。舉一個簡單的例子:在吃飯的時候,只有拿到一雙筷子后才能開始吃飯,如果有兩個人,每個人都只拿了一根筷子,而等待另一根筷子可用,此時,兩個人都已經(jīng)占用了部分資源(一根筷子),而等待另一個資源(另一根筷子),兩個人永遠都在等待對方釋放資源,因此,發(fā)生了死鎖??梢酝ㄟ^外力作用把一個人的筷子強制釋放掉給另外一個人而解決死鎖。很顯然,選項D的描述符合死鎖的定義。3.

某系統(tǒng)中有11臺打印機,N個進程共享打印機資源,每個進程要求3臺,當N的取值不超過______時,系統(tǒng)不會發(fā)生死鎖。

(分數(shù):2.00)

A.3

B.5

C.8

D.7解析:本題中,不發(fā)生死鎖的條件是至少能保證1個進程能獲得3臺打印機資源。最壞的情況是1個進程獲取了3臺打印機資源,另外N-1個進程獲取到2臺打印機,等待獲取第3臺。

本題可以構(gòu)建如下等式關系:3+(N-1)*2=11,解算結(jié)果為N=5。所以,選項B正確。4.

有一個變量inta=0,兩個線程同時對其進行+1操作,每個線程加100次,不加鎖,最后變量a的值是______。

(分數(shù):2.00)

A.200

B.<=200

C.>=200

D.都有可能解析:多線程(Multithreading)技術指的是從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術,本題中,+1操作的執(zhí)行過程如下:取出變量a,對變量a執(zhí)行+1操作,把計算結(jié)果放回去。如果兩個線程中+1操作都沒有被中斷,所有的+1操作都生效了,那么此時相應地對a執(zhí)行了200次+1操作,在這種情況下,a的值變?yōu)?00。由于這兩個線程在對a執(zhí)行+1操作的時候,并沒有加鎖,因此,有可能會導致部分+1操作丟失,如下所示:

1)線程1讀取變量a的值(讀取到寄存器中)為0。

2)線程2讀取變量a的值,此時讀取到的值也為0。

3)線程1對a執(zhí)行+1操作并放回去,此時a的值為1。

4)線程2也對a執(zhí)行+1操作并放回去,由于此時線程2中寄存器中a的值為0,執(zhí)行+1操作后變?yōu)?并放回去,此時a的值還為1。

在這種情況下,線程1對a執(zhí)行+1的操作就會丟失。因此,執(zhí)行結(jié)束后,a的最大值為200。所以,選項B正確。5.

某系統(tǒng)中有3個并發(fā)進程,都需要同類資源4個,試問該系統(tǒng)不會發(fā)生死鎖的最少資源數(shù)是______。

(分數(shù):2.00)

A.9

B.10

C.11

D.12解析:系統(tǒng)不會發(fā)生死鎖的最少資源數(shù)=每個進程擁有(4-1=3)個資源+多出1個資源=3*3+1=10。所以,選項B正確。6.

以下關于計算機的描述中,不正確的是______。

(分數(shù):2.00)

A.進程調(diào)度有“可搶占”和“非搶占”兩種方式,后者引起系統(tǒng)的開銷更大

B.每個進程都有自己的文件描述符表,所有進程共享同一打開文件表和v-node表

C.基本的存儲技術包括RAM、ROM、磁盤以及SSD,其中訪問速度最慢的是磁盤,CPU的高速緩存一般是由RAM組成的

D.多個進程競爭資源出現(xiàn)了循環(huán)等待可能造成系統(tǒng)死鎖解析:對于選項A,可搶占式調(diào)度會導致系統(tǒng)的開銷更大。可搶占式(Preemptive)調(diào)度嚴格保證在任何時刻具有最高優(yōu)先級的進程占有處理機運行,因此,該方式增加了處理機調(diào)度的時間,同時需要為退出的進程保留現(xiàn)場,為獲取到處理機的進程恢復現(xiàn)場等時間(和空間),因此,開銷比較大。非搶占式(Nonpreemptive)調(diào)度是一種讓進程運行直到結(jié)束或阻塞的調(diào)度方式(容易實現(xiàn),適合專用系統(tǒng),不適合通用系統(tǒng))。所以,選項A不正確。

對于選項B,在內(nèi)核中,對于每個進程都有一個文件描述符表,表示這個進程打開的所有文件。文件描述符表中每一項都是一個指針,指向一個用于描述打開的文件的數(shù)據(jù)塊——file對象,file對象中描述了文件的打開模式、讀寫位置等重要信息,當進程打開一個文件時,內(nèi)核就會創(chuàng)建一個新的file對象。需要注意的是,file對象不是專屬于某個進程的,不同進程的文件描述符表中的指針可以指向相同的file對象,從而共享這個打開的文件。file對象有引用計數(shù),記錄了引用這個對象的文件描述符個數(shù),只有當引用計數(shù)為0時,內(nèi)核才銷毀file對象,因此,某個進程關閉文件,不會影響與之共享同一個file對象的進程。所以,選項B正確。

對于選項C,ROM(ReadOnlyMemory,只讀存儲器)和RAM(RandomAccessMemory,隨機存取存儲器)指的都是半導體存儲器,ROM在系統(tǒng)停止供電的時候仍然可以保持數(shù)據(jù),而RAM通常都是在掉電之后就丟失數(shù)據(jù),典型的RAM就是計算機的內(nèi)存。磁盤是一種類似磁帶的計算機的外部存儲器,它將圓形的磁性盤片裝在一個方的密封盒子里。SSD(SolidStateDrives,固態(tài)硬盤,簡稱固盤)是用固態(tài)電子存儲芯片陣列而制成的硬盤,由控制單元和存儲單元(FLASH芯片、DRAM芯片)組成。ROM、RAM、磁盤和SSD都是存儲設備,其中,訪問速度最快的是RAM,訪問速度最慢的是磁盤,CPU的高速緩存一般是由RAM組成的。所以,選項C正確。

對于選項D,如果系統(tǒng)中存在多個進程,它們中的每一個進程都占用了某種資源而又都在等待其中另一個進程所占用的資源,那么這種等待永遠都不能結(jié)束,就稱系統(tǒng)出現(xiàn)了“死鎖”。所以,選項D正確。

所以,本題的答案為A。7.

某進程在運行過程中需要等待從磁盤上讀入數(shù)據(jù),此時進程的狀態(tài)將______。

(分數(shù):2.00)

A.從就緒變?yōu)檫\行

B.從運行變?yōu)榫途w

C.從運行變?yōu)樽枞?/p>

D.從阻塞變?yōu)榫途w解析:在操作系統(tǒng)中,進程的基本狀態(tài)有就緒狀態(tài)、運行狀態(tài)和阻塞狀態(tài)三種。以下將分別對這三種狀態(tài)進行分析。

(1)就緒(Ready)狀態(tài)

進程已經(jīng)具備運行條件,但是CPU還沒有得到分配。也就是說,當進程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執(zhí)行,此時進程的狀態(tài)稱為就緒狀態(tài)。在一個系統(tǒng)中,處于就緒狀態(tài)的進程可能有多個,通常將這些處于就緒狀態(tài)的進程排成一個隊列,稱為就緒隊列。

(2)運行狀態(tài)

進程已獲得CPU,其程序正在執(zhí)行。在單處理機系統(tǒng)中,只有一個進程處于運行狀態(tài),在多處理機系統(tǒng)中,則有多個進程處于運行狀態(tài)。

(3)阻塞狀態(tài)

當正在運行的進程由于發(fā)生某事件而暫時無法繼續(xù)執(zhí)行時,便放棄處理機而處于暫停狀態(tài),亦即程序的執(zhí)行受到阻塞,把這種暫停狀態(tài)稱為阻塞狀態(tài),有時也稱為等待狀態(tài)或封鎖狀態(tài)。

三種進程之間的轉(zhuǎn)換圖如圖所示。

三種進程之間的轉(zhuǎn)換圖

以下將針對這個狀態(tài)轉(zhuǎn)換圖的條件進行討論與分析:

(1)就緒→運行

對于就緒狀態(tài)的進程,當進程調(diào)度程序按一種選定的策略從中選中一個就緒進程,并為之分配了處理機后,該進程便由就緒狀態(tài)變?yōu)檫\行狀態(tài)。

(2)運行→阻塞

如果正在運行的進程因發(fā)生某等待事件而無法執(zhí)行,則進程由執(zhí)行狀態(tài)變?yōu)樽枞麪顟B(tài),例如進程提出輸入/輸出請求而變成等待外部設備傳輸信息的狀態(tài),進程申請資源(主存空間或外部設備)得不到滿足時變成等待資源狀態(tài),進程運行中出現(xiàn)了故障(程序出錯或主存儲器讀寫錯等)變成等待干預狀態(tài)等。

(3)阻塞→就緒

處于阻塞狀態(tài)的進程,當其等待的事件已經(jīng)發(fā)生,例如輸入/輸出完成,資源得到滿足或錯誤處理完畢時,處于阻塞狀態(tài)的進程并不會馬上轉(zhuǎn)入運行狀態(tài),而是先轉(zhuǎn)入就緒狀態(tài),然后再由系統(tǒng)進程調(diào)度程序在適當?shù)臅r候?qū)⒃撨M程轉(zhuǎn)為運行狀態(tài)。

(4)運行→就緒

正在運行的進程,因為時間片用完而被暫停執(zhí)行,或在采用搶先式優(yōu)先級調(diào)度算法的系統(tǒng)中,當有更高優(yōu)先級的進程要運行而被迫讓出處理機時,該進程便由運行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)。

以上4種情況可以相互正常轉(zhuǎn)換,那么為什么阻塞狀態(tài)無法直接轉(zhuǎn)換為運行狀態(tài)呢?為什么就緒狀態(tài)無法直接轉(zhuǎn)換為阻塞狀態(tài)呢?其實,即使給阻塞進程分配CPU,也無法執(zhí)行,因為操作系統(tǒng)在進行調(diào)度時,不會在阻塞隊列中進行挑選,其調(diào)度的選擇對象為就緒隊列,而就緒狀態(tài)根本就沒有執(zhí)行,是進入不了阻塞狀態(tài)的。

本題中,進程在運行過程中,進入I/O操作,則處理阻塞。所以,此時進程的狀態(tài)將從運行變?yōu)樽枞K?,選項C正確。8.

Linux系統(tǒng)下的進程有以下______三種狀態(tài)。

(分數(shù):2.00)

A.精確態(tài)、模糊態(tài)和隨機態(tài)

B.運行態(tài)、就緒態(tài)和等待態(tài)

C.準備態(tài)、執(zhí)行態(tài)和退出態(tài)

D.手動態(tài)、自動態(tài)和自由態(tài)解析:進程的狀態(tài)有兩種劃分方式:三態(tài)模型與五態(tài)模型。

1)三態(tài)模型:運行態(tài)、就緒態(tài)和阻塞(等待)態(tài)。

2)五態(tài)模型:新建態(tài)、就緒態(tài)、運行態(tài)、阻塞態(tài)和終止態(tài)。

所以,本題的答案為B。9.

下列的進程狀態(tài)變化中,不可能發(fā)生的是______。

(分數(shù):2.00)

A.運行→就緒

B.運行→等待

C.等待→運行

D.等待→就緒解析:狀態(tài)不能直接從等待狀態(tài)(也稱為阻塞狀態(tài))跳轉(zhuǎn)到運行狀態(tài),只能跳轉(zhuǎn)到就緒狀態(tài)。所以,選項C正確。10.

進程進入等待狀態(tài)的方式有______。

(分數(shù):2.00)

A.CPU調(diào)度給優(yōu)先級更高的線程

B.阻塞的線程獲得資源或者信號

C.在時間片輪轉(zhuǎn)的情況下,如果時間片到了

D.獲得spinlock(自旋鎖)未果

√解析:等待狀態(tài)通常是我們說的阻塞態(tài),因為一般阻塞態(tài)是在等待某一觸發(fā)事件的發(fā)生,才能進入就緒狀態(tài)。

對于選項A,進程是從運行狀態(tài)進入就緒狀態(tài)。所以,選項A錯誤。

對于選項B,進程是從阻塞狀態(tài)進入就緒狀態(tài)。所以,選項B錯誤。

對于選項C,進程是從運行狀態(tài)進入就緒狀態(tài)。所以,選項C錯誤。

對于選項D,獲取鎖失敗后進入阻塞狀態(tài)。所以,選項D正確。11.

以下關于Linux下的進程的描述中,不正確的是______。

(分數(shù):2.00)

A.僵尸進程會被init進程接管,而僵尸進程不會造成資源浪費

B.孤兒進程的父進程在它之前退出,會被init進程接管,它不會造成資源浪費

C.進程是資源管理的最小單位,而線程是程序執(zhí)行的最小單位。Linux下的線程本質(zhì)上用進程實現(xiàn)

D.子進程如果對資源只是進行讀操作,那么完全和父進程共享物理地址空間解析:對于選項A,僵尸進程不會被init進程接管,會一直占用資源。所以,選項A錯誤。

對于選項B,孤兒進程在產(chǎn)生的時候就會被init進程所接管,會直接回收資源,也就不會占用資源。所以,選項B正確。

對于選項C與選項D,描述正確。

所以,本題的答案為A。12.

下列關于進程的描述中,不正確的是______。

(分數(shù):2.00)

A.進程在退出時會自動關閉自己打開的所有文件

B.進程在退出時會自動關閉自己打開的網(wǎng)絡鏈接

C.進程在退出時會自動銷毀自己創(chuàng)建的所有線程

D.進程在退出時會自動銷毀自己打開的共享內(nèi)存

√解析:進程是一個具有一定獨立功能的程序關于某個數(shù)據(jù)集合的一次運行活動。它是操作系統(tǒng)動態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進程既是基本的分配單元,也是基本的執(zhí)行單元。進程開啟的線程都僅僅屬于本進程,所以,進程在退出時,會自動關閉進程打開的文件、自己打開的網(wǎng)絡,同時銷毀自己創(chuàng)建的所有線程。但是,由于共享內(nèi)存是公用的,一旦被銷毀了,會對其他正在使用這段內(nèi)存的進程造成破壞,所以,進程在退出時不會自動銷毀自己打開的共享內(nèi)存。所以,選項D錯誤,而選項A、選項B、選項C都是正確的。13.

一種既有利于短作業(yè)又兼顧長作業(yè)的調(diào)度方式是______。

(分數(shù):2.00)

A.先來先服務

B.均衡調(diào)度

C.最短作業(yè)優(yōu)先

D.最高響應比優(yōu)先

√解析:本題中,選項A、選項B和選項C的調(diào)度方法都不滿足題目要求,所以,選項A、選項B和選項C錯誤。

對于選項D,最高響應比優(yōu)先法(HighestResponse_ratioNext,HRN)是對FCFS(FirstComeFirstServed,先來先服務)方式和SJF(ShortestJobFirst,最短作業(yè)優(yōu)先)方式的一種綜合平衡。FCFS方式只考慮每個作業(yè)的請求時間而未考慮執(zhí)行時間的長短,而SJF方式只考慮執(zhí)行時間而未考慮等待時間的長短。因此,這兩種調(diào)度算法在某些極端情況下會帶來不便。HRN調(diào)度策略同時考慮每個作業(yè)的等待時間長短和估計需要的執(zhí)行時間長短,從中選出響應比最高的作業(yè)投入執(zhí)行。響應比R定義如下:R=(W+T)/T=1+W/T,其中,T為該作業(yè)估計需要的執(zhí)行時間,W為作業(yè)在后備狀態(tài)隊列中的等待時間。每當要進行作業(yè)調(diào)度時,系統(tǒng)計算每個作業(yè)的響應比,選擇其中R最大者投入執(zhí)行。這樣,即使是長作業(yè),隨著它等待時間的增加,W/T也就隨著增加,也就有機會獲得調(diào)度執(zhí)行。這種算法是介于FCFS和SJF之間的一種折中算法。由于長作業(yè)也有機會投入運行,在同一時間內(nèi)處理的作業(yè)數(shù)顯然要少于SJF法,當采用HRN方式時,其吞吐量將小于采用SJF法時的吞吐量。另外,由于每次調(diào)度前要計算響應比,系統(tǒng)開銷也要相應增加。等待時問一定,要求服務的時間越短,先運行;要求服務的時間一定,等待時間越長,先運行。所以,最高響應比優(yōu)先調(diào)度是一種既有利于短作業(yè)又兼顧長作業(yè)的調(diào)度方式。所以,選項D正確。14.

進程調(diào)度是從______選擇一個進程投入運行。

(分數(shù):2.00)

A.就緒隊列

B.作業(yè)后備隊列

C.等待隊列

D.提交隊列解析:進程的基本調(diào)度狀態(tài)有運行、就緒和阻塞。進程調(diào)度程序從處于就緒狀態(tài)的進程中選擇一個投入運行。運行進程因等待某一事件而進入阻塞狀態(tài),因時間片到達而回到就緒狀態(tài)。處于阻塞狀態(tài)的進程當所等待的事件發(fā)生時,便進入就緒狀態(tài)。

本題中,就緒隊列是等待CPU時間的隊列,其中存放著等待執(zhí)行的任務。進程調(diào)度是從就緒隊列中選擇一個進程投入運行。所以,選項A正確。15.

在進程調(diào)度算法中,下面算法中,適用于運行時間可以預知的批處理調(diào)度算法是______。

(分數(shù):2.00)

A.最短作業(yè)優(yōu)先

B.先來先服務

C.優(yōu)先級調(diào)度

D.時間片輪轉(zhuǎn)調(diào)度解析:對于選項A,最短作業(yè)優(yōu)先(ShortestJobFirst,SJF)是對FCFS算法的改進,其目標是減少平均周轉(zhuǎn)時間。其優(yōu)點是相比FCFS(FirstComeFirstServed,先來先服務)改善了平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間,縮短了作業(yè)的等待時間,同時,提高了系統(tǒng)的吞吐量。但缺點就是對長作業(yè)非常不利,可能長時間得不到執(zhí)行;未能依據(jù)作業(yè)的緊迫程度來劃分執(zhí)行的優(yōu)先級;難以準確估計作業(yè)(進程)的執(zhí)行時間,從而影響調(diào)度性能。最短作業(yè)優(yōu)先是一種適用于運行時間可以預知的非搶占式的批處理調(diào)度算法。所以,選項A正確。

對于選項B,先來先服務(FirstComeFirstSerred,F(xiàn)CFS)是最簡單的調(diào)度算法,按先后順序進行調(diào)度;適用于長作業(yè),而不利于短作業(yè);有利于CPU繁忙的作業(yè),而不利于I/O繁忙的作業(yè)。所以,選項B錯誤。

對于選項C,優(yōu)先級算法(PriorityScheduling)是多級隊列算法的改進,平衡了各進程對響應時間的要求。適用于作業(yè)調(diào)度和進程調(diào)度,可分成搶先式和非搶先式。所以,選項C錯誤。

對于選項D,輪轉(zhuǎn)法(RoundRobin)是讓每個進程在就緒隊列中的等待時間與享受服務的時間成正比例。所以,選項D錯誤。

所以,本題的答案為A。16.

在進程間通信的方式中,訪問速度最快的是______。

(分數(shù):2.00)

A.管道

B.消息隊列

C.共享內(nèi)存

D.套接字解析:共享內(nèi)存就是映射一段能被其他進程所訪問的內(nèi)存,這段內(nèi)存由一個進程創(chuàng)建,但多個進程都可以訪問。共享內(nèi)存是最快的進程間通信的方式,它是針對其他進程間通信方式運行效率低而專門設計的。所以,選項C正確。17.

同一進程下的多個線程可以共享的資源是______。

(分數(shù):2.00)

A.棧

B.數(shù)據(jù)區(qū)

C.寄存器

D.線程ID解析:18.

系統(tǒng)中的“顛簸”是由______引起的。

(分數(shù):2.00)

A.內(nèi)存容量不足

B.缺頁率高

C.交換信息量大

D.缺頁率反饋模型不正確解析:如果分配給進程的存儲塊數(shù)量小于進程所需要的最小值,進程的運行將很頻繁地產(chǎn)生缺頁中斷,這種頻率非常高的頁面置換現(xiàn)象稱為抖動,也稱為“顛簸”。在請求分頁存儲管理中,可能出現(xiàn)這種情況,即對剛被替換出去的頁,立即又要被訪問。需要將它調(diào)入,因為沒有空閑內(nèi)存又要替換另一頁,而后者又是即將被訪問的頁,于是造成了系統(tǒng)需花費大量的時間忙于進行這種頻繁的頁面交換,致使系統(tǒng)的實際效率很低,嚴重導致系統(tǒng)癱瘓。

通過上面的分析可知,“顛簸”是由缺頁率高引起的。所以,選項B正確。19.

下面不是進程和程序的區(qū)別的是______。

(分數(shù):2.00)

A.程序是一組有序的靜態(tài)指令,進程是一次程序的執(zhí)行過程

B.程序只能在前臺運行,而進程可以在前臺或后臺運行

C.程序可以長期保存,進程是暫時的

D.程序沒有狀態(tài),而進程是有狀態(tài)的解析:下表是程序、進程、線程的定義與關聯(lián)關系。程序、進程、線程的定義與關聯(lián)關系術語定義與描述程序一組指令的有序結(jié)合,是一個靜態(tài)沒狀態(tài)的文本進程具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的一個獨立單元線程進程的一個實體,是CPU調(diào)度和分派的基本單元,是比進程更小的能獨立運行的基本單元。本身基本上不擁有系

統(tǒng)資源,只擁有一點在運行中必不可少的資源(例如程序計數(shù)器、一組寄存器和棧)一個線程可以創(chuàng)建和撤銷另一個

線程,同一個進程中的多個線程之間可以并發(fā)執(zhí)行

所以,本題的答案為B。20.

程序和進程的本質(zhì)區(qū)別是______。

(分數(shù):2.00)

A.獨占使用和分時使用計算機資源

B.非順序和順序執(zhí)行機器指令

C.在外存和內(nèi)存存儲

D.靜態(tài)和動態(tài)特征

√解析:21.

文件長度是一個大于0的整數(shù),用變量unsignedfilelength來表示,把文件分成塊,每塊的長度也是一個大于0的整數(shù),用變量unsignedblocklength來表示,則文件被分成的塊數(shù)為______。

(分數(shù):2.00)

A.file_length/block_length

B.file_length/block_length+1

C.(file_length+block_length_1)/block_length

D.((file_length_1)/block_length+1

√解析:本題可以采用排除法解答。

假設file_length=5,block_length=2,則可以分成3塊,排除選項A。

假設file_length=6,block_length=2,也可以分成3塊,排除選項B。

對于選項C,兩個unsigned類型的值相加可能會溢出,所以,可以排除選項C。

對于選項D,對于上述兩種情況都能得到正確的結(jié)果。因此,選項D正確。22.

X86體系結(jié)構(gòu)在保護模式下中有三種地址,以下對于這三種地址的描述中,正確的是______。

(分數(shù):2.00)

A.虛擬地址先經(jīng)過分段機制映射到線性地址,然后線性地址通過分頁機制映射到物理地址

B.線性地址先經(jīng)過分段機制映射到虛擬地址,然后虛擬地址通過分頁機制映射到物理地址

C.虛擬地址先經(jīng)過分頁機制映射到線性地址,然后線性地址通過分段機制映射到物理地址

D.線性地址先經(jīng)過分頁機制映射到虛擬地址,然后線性地址通過分段機制映射到物理地址解析:要想弄明白各類地址的映射,首先需要弄懂各地址的概念。

虛擬地址指的是由程序產(chǎn)生的由段選擇符和段內(nèi)偏移地址兩個部分組成的地址。這兩部分組成的地址并沒有直接訪問物理內(nèi)存,而是要通過分段地址的變換機構(gòu)處理或映射后才會對應到相應的物理內(nèi)存地址。

邏輯地址指的是用戶程序經(jīng)編譯之后的每個目標模塊都以0為基地址順序編址,在程序中使用的地址都是邏輯地址。

線性地址指的是虛擬地址到物理地址變換之間的中間層,是處理器可尋址的內(nèi)存空間(稱為線性地址空間)中的地址。程序代碼會產(chǎn)生邏輯地址,或者說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。如果啟用了分頁機制,那么線性地址可以再經(jīng)過變換產(chǎn)生物理地址。如果沒有采用分頁機制,那么線性地址就是物理地址。

物理地址指的是現(xiàn)在CPU外部地址總線上的尋址物理內(nèi)存的地址信號,是地址變換的最終結(jié)果,是實際數(shù)據(jù)存放的地址。

虛擬地址到物理地址的轉(zhuǎn)化方法是與體系結(jié)構(gòu)相關的。一般來說,有分段和分頁兩種方式。以X86CPU為例,分段、分頁兩種方式都是支持的。MemoryManagementUnit(內(nèi)存管理單元,簡稱為MMU)負責從虛擬地址到物理地址的轉(zhuǎn)化。邏輯地址是段標識+段內(nèi)偏移量的形式,MMU通過查詢段表,可以把邏輯地址轉(zhuǎn)化為線性地址。如果CPU沒有開啟分頁功能,那么線性地址就是物理地址;如果CPU開啟了分頁功能,MMU還需要查詢頁表來將線性地址轉(zhuǎn)化為物理地址:邏輯地址→(段表)→線性地址-(頁表)→物理地址。

不同的邏輯地址可以映射到同一個線性地址上;不同的線性地址也可以映射到同一個物理地址上;所以,這是一種多對一的關系。另外,同一個線性地址,在發(fā)生換頁以后,也可能被重新裝載到另外一個物理地址上。所以,這種多對一的映射關系也會隨時間發(fā)生變化。

分段機制就是把虛擬地址空間中的虛擬內(nèi)存組織成一些長度可變的稱為段的內(nèi)存塊單元。分頁機制把線性地址空間和物理地址空間分別劃分為大小相同的塊,這樣的塊稱為頁。通過在線性地址空間的頁與物理地址空間的頁之間建立的映射,分頁機制實現(xiàn)線性地址到物理地址的轉(zhuǎn)換。

通過以上的分析可知,選項A是正確的。23.

在段頁式存儲管理系統(tǒng)中其虛擬地址空間是______的。

(分數(shù):2.00)

A.一維

B.二維

C.三維

D.四維解析:24.

在虛擬存儲系統(tǒng)中,若進程在內(nèi)存中占3塊(開始時為空),采用先進先出頁面淘汰算法,當執(zhí)行訪問頁號序列為1、2、3、4、1、2、5、1、2、3、4、5、6時,將產(chǎn)生缺頁中斷的次數(shù)是______。

(分數(shù):2.00)

A.10

B.9

C.8

D.7解析:在地址映射過程中,如果在頁面中發(fā)現(xiàn)所要訪問的頁面不在內(nèi)存中,則產(chǎn)生缺頁中斷。當發(fā)生缺頁中斷時,操作系統(tǒng)必須在內(nèi)存中選擇一個頁面將其移出內(nèi)存,以便為即將調(diào)入的頁面讓出空間。而用來選擇淘汰哪一頁的規(guī)則叫作頁面置換算法,也稱為頁面淘汰算法。

先進先出頁面淘汰算法簡稱FIFO(FirstInFirstOut)算法,該算法實現(xiàn)時,置換出最早進入內(nèi)存的頁面,即在內(nèi)存中駐留時間最久的頁面。該算法實現(xiàn)簡單,只需把調(diào)入內(nèi)存的頁面根據(jù)先后次序鏈接成隊列,設置一個指針總指向最早的頁面。

本題中,置換過程如下:

1)訪問1,缺頁,調(diào)入1,內(nèi)存中為1。

2)訪問2,缺頁,調(diào)入2,內(nèi)存中為1,2。

3)訪問3,缺頁,調(diào)入3,內(nèi)存中為1,2,3。

4)訪問4,缺頁,調(diào)入4,淘汰1,內(nèi)存中為2,3,4。

5)訪問1,缺頁,調(diào)入1,淘汰2,內(nèi)存中為3,4,1。

6)訪問2,缺頁,調(diào)入2,淘汰3,內(nèi)存中為4,1,2。

7)訪問5,缺頁,調(diào)入5,淘汰4,內(nèi)存中為1,2,5。

8)訪問1,不缺頁,內(nèi)存中為1,2,5。

9)訪問2,不缺頁,內(nèi)存中為1,2,5。

10)訪問3,缺頁,調(diào)入3,淘汰1,內(nèi)存中為2,5,3。

11)訪問4,缺頁,調(diào)入4,淘汰2,內(nèi)存中為5,3,4。

12)訪問5,不缺頁,內(nèi)存中為5,3,4。

13)訪問6,缺頁,調(diào)入6,淘汰3,內(nèi)存中為3,4,6。

所以,一共產(chǎn)生了10次缺頁。因此,選項A正確。25.

函數(shù)的局部變量所需存儲空間是在______分配的。

(分數(shù):2.00)

A.進程的數(shù)據(jù)段

B.進程的棧上

C.進程的堆上

D.以上都可以解析:一個C/C++編譯的程序所占用的系統(tǒng)內(nèi)存一般分為代碼段、數(shù)據(jù)段、BBS段、堆和棧。

1)代碼段(CodeSegment/TextSegment):代碼段有時候也叫文本段,通常是指用來存放程序執(zhí)行代碼(包括類成員函數(shù)和全局函數(shù)以及其他函數(shù)代碼)的一塊內(nèi)存區(qū)域,這部分區(qū)域的大小在程序運行前就已經(jīng)確定,并且內(nèi)存區(qū)域通常是只讀,某些架構(gòu)也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數(shù)變量,例如字符串常量。這個段一般是可以被共享的,比如在Linux操作系統(tǒng)中打開了2個Vi來編輯文本,那么一般來說,這兩個Vi是共享一個代碼段的。

2)數(shù)據(jù)段(DataSegment):數(shù)據(jù)段通常是指用來存放程序中己初始化的全局變量的一塊內(nèi)存區(qū)域。數(shù)據(jù)段也屬于靜態(tài)內(nèi)存分配。因此,BBS段與數(shù)據(jù)段都屬于靜態(tài)區(qū)(全局區(qū))。

3)符號起始的區(qū)塊(BlockStartedbySymbol,BSS)段:BSS段通常是指用來存放程序中未初始化的全局數(shù)據(jù)和靜態(tài)數(shù)據(jù)的一塊內(nèi)存區(qū)域。BSS段屬于靜態(tài)內(nèi)存分配,程序結(jié)束后靜態(tài)變量資源由系統(tǒng)自動釋放。

4)堆(Heap):堆是用于存放進程運行中被動態(tài)分配的內(nèi)存段,它的大小并不固定,可動態(tài)擴張或縮減。當進程調(diào)用malloc或new等函數(shù)分配內(nèi)存時,新分配的內(nèi)存就被動態(tài)添加到堆上(堆被擴張),當利用free或delete等函數(shù)釋放內(nèi)存時,被釋放的內(nèi)存從堆中被刪除(堆被縮減)。堆一般由程序員分配釋放,如果程序員自己不釋放,在程序結(jié)束時,該塊內(nèi)存空間可能會由操作系統(tǒng)回收。需要注意的是,它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式類似于鏈表。

5)棧(Stack):棧上存放的是用戶臨時創(chuàng)建的局部變量,一般包括函數(shù)括弧“{}”中定義的變量(但不包括static聲明的變量,static意味著在數(shù)據(jù)段中存放變量)。除此之外,在函數(shù)被調(diào)用時,其參數(shù)也會被壓入發(fā)起調(diào)用的進程棧中,并且等到調(diào)用結(jié)束后,函數(shù)的返回值也會被存放回棧中。棧由編譯器自動分配釋放,存放函數(shù)的參數(shù)值、局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,一般使用寄存器來存取,效率很高,但是分配的內(nèi)存容量有限。

通過上述描述可知,選項B正確。26.

靜態(tài)局部變量存儲在進程的______。

(分數(shù):2.00)

A.棧區(qū)

B.寄存器區(qū)

C.代碼區(qū)

D.全局區(qū)

√解析:27.

當在CPU內(nèi)存之間進行地址轉(zhuǎn)換時,______將地址從虛擬(邏輯)地址空間映射到物理地址空間。

(分數(shù):2.00)

A.TCB

B.MMU

C.CACHE

D.DMA解析:本題中,對于選項A,TCB是TIaastedComputingBase的簡稱,指的是計算機內(nèi)保護裝置的總體,包括硬件、固件、軟件和負責執(zhí)行安全策略的組合體。它建立了一個基本的保護環(huán)境并提供一個可信計算機系統(tǒng)所要求的附加用戶服務。所以,選項A錯誤。

對于選項B,MMU是MemoryManagementUnit的縮寫,即內(nèi)存管理單元,它用來管理虛擬存儲器、物理存儲器的控制線路,同時也負責虛擬地址映射為物理地址,以及提供硬件機制的內(nèi)存訪問授權(quán)。所以,選項B正確。

對于選項C,CACHE是指介于中央處理器和主存儲器之間的高速小容量存儲器。所以,選項C錯誤。

對于選項D,DMA(DirectMemoryAccess,直接內(nèi)存存取)指的是一種高速的數(shù)據(jù)傳輸操作,允許在外部設備和存儲器之間直接讀寫數(shù)據(jù),既不通過CPU,也不需要CPU干預。所以,選項D錯誤。

通過上面的分析可知,MMU可以將地址從虛擬(邏輯)地址空間映射到物理地址空間。所以,選項B正確。28.

以下不是內(nèi)核對象的是______。

(分數(shù):2.00)

A.進程

B.線程

C.互斥器

D.臨界區(qū)

√解析:一個內(nèi)核對象就是在系統(tǒng)堆中占據(jù)一塊空間的結(jié)構(gòu)體。不同種類的內(nèi)核對象用來管理操作系統(tǒng)中不同的資源,例如進程、線程和文件等。所有內(nèi)核對象都會保存該對象的引用計數(shù),進程對象會保存進程ID,文件對象會保存當前字節(jié)偏移量、共享模式和打開模式等。操作系統(tǒng)中所有內(nèi)核對象都是保存在一塊內(nèi)存空間中的,系統(tǒng)上所有的進程都共享這一塊內(nèi)存空間。

每個進程中訪問臨界資源的那段程序稱為臨界區(qū)(臨界資源是一次僅允許一個進程使用的共享資源)。每次只允許一個進程進入臨界區(qū),進入后不允許其他進程進入。

互斥對象是一種最簡單的內(nèi)核對象,用它可以方便地實現(xiàn)對某一資源的互斥訪問。而臨界區(qū)并不是內(nèi)核對象,而是系統(tǒng)提供的一種數(shù)據(jù)結(jié)構(gòu),程序中可以聲明一個該類型變量,之后用它來實現(xiàn)對資源的互斥訪問。當希望訪問某一臨界資源時,先將該臨界區(qū)加鎖(如果臨界區(qū)不空閑,則等待),用完該資源后,將臨界區(qū)釋放。29.

在一個請求頁式存儲管理中,一個程序的頁面走向為3、4、2、1、4、5、3、4、5、1、2,并采用LRU算法。設分配給該程序的存儲塊數(shù)S分別為______和______,在該訪問中發(fā)生的缺頁次數(shù)F是______。

(分數(shù):2.00)

A.S=3,F(xiàn)=6;S=4,F(xiàn)=5

B.S=3,F(xiàn)=7;S=4,F(xiàn)=6

C.S=3,F(xiàn)=8;S=4,F(xiàn)=5

D.S=3,F(xiàn)=8;S=4,F(xiàn)=7

√解析:LRU計算的缺頁情況見表1和表2。表1LRU計算的缺頁情況133342l45345

4421453451

214534512缺頁缺頁缺頁缺頁

缺頁缺頁

缺頁缺頁缺頁次數(shù)8次。表2LRU計算的缺頁情況233333211134

4442145345

221453451

14534512缺頁缺頁缺頁缺頁

缺頁缺頁

缺頁

缺頁次數(shù)7次。所以,選項D正確。30.

操作系統(tǒng)采用分頁式存儲管理中,要求______。

(分數(shù):2.00)

A.每個進程擁有一張頁表,且進程的頁表駐留在內(nèi)存中

B.每個進程擁有一張頁表,但只要執(zhí)行進程的頁表駐留在內(nèi)存中,其他進程的頁表不必駐留在內(nèi)存中

C.所有進程共享一張頁表,以節(jié)約有限的內(nèi)存空間,但頁表必須駐留在內(nèi)存中

D.所有進程共享一張頁表,只有頁表中當前使用的頁面必須駐留在內(nèi)存中,以最大限度地節(jié)約有限的內(nèi)存空間解析:頁式存儲管理的特征是等分內(nèi)存,它解決了外碎片(大量信息由于先后寫入、置換、刪除而形成的空間碎片)問題。段式存儲管理的特征是邏輯分段,便于實現(xiàn)共享和保護。為了保持頁式和段式上的優(yōu)點,結(jié)合兩種存儲管理方案,形成了段頁式存儲管理。本題中,在分頁系統(tǒng)中,為每個進程都配置一張頁表,進程邏輯地址空間中的每一頁在頁表中都有一個頁表項。所以,選項A正確。31.

在虛擬分頁存儲管理系統(tǒng)中,若進程訪問的頁面不在主存,且主存中沒有可用的空閑塊時,系統(tǒng)正確的處理順序是______。

(分數(shù):2.00)

A.決定淘汰頁—>頁面調(diào)出—>缺頁中斷—>頁面調(diào)入

B.決定淘汰頁—>頁面調(diào)入—>缺頁中斷—>頁面調(diào)出

C.缺頁中斷—>決定淘汰頁—>頁面調(diào)出—>頁面調(diào)入

D.缺頁中斷—>決定淘汰頁—>頁面調(diào)入—>頁面調(diào)出解析:虛擬分頁存儲管理的步驟如下:

1)首先,在程序運行中發(fā)現(xiàn)所需要的頁不在物理內(nèi)存時,此時會發(fā)出缺頁中斷,并根據(jù)算法決定淘汰哪些頁。

2)然后,把物理內(nèi)存中的淘汰頁存儲到外存,此過程被稱為頁面調(diào)出。

3)最后,把需要的內(nèi)容從外存調(diào)入物理內(nèi)存指定頁,此過程被稱為頁面調(diào)入。

其實,操作系統(tǒng)就像一輛公交車,只有舊乘客先下來,新乘客才能上去,所以,頁面調(diào)出為先,頁面調(diào)入在后。而在頁面調(diào)出前,必須要存在著缺頁中斷,而且已經(jīng)決定了哪些頁面需要調(diào)出才行。

所以,完整的過程應該是缺頁中斷—>決定淘汰頁—>頁面調(diào)出—>頁面調(diào)入,選項C正確。二、多項選擇題(總題數(shù):10,分數(shù):0.00)1.

下面函數(shù)調(diào)用必須進入內(nèi)核才能完成的是______。

(分數(shù):2.00)

A.fopen

B.exit

C.memcpy

D.strlen解析:對于選項A,fopen是打開文件的函數(shù),文件也可以看成是一個設備,打開一個設備將導致給設備所屬的驅(qū)動程序發(fā)送一個IRP(I/ORequestPacket,輸入/輸出請求包),而與真實硬件相關的驅(qū)動程序都運行于內(nèi)核。所以,選項A正確。

對于選項B,exit函數(shù)是結(jié)束進程的函數(shù),結(jié)束進程需要訪問PCB(ProcessControlBlock,進程控制塊)和TCB(ThreadControlBlock,線程控制塊)等一些數(shù)據(jù)結(jié)構(gòu),而這些數(shù)據(jù)都存在于內(nèi)核中。所以,選項B正確。

對于選項C,memcpy是C/C++語言中的內(nèi)存復制函數(shù),功能是從源src所指的內(nèi)存地址的起始位置開始復制n個字節(jié)到目標dest所指的內(nèi)存地址的起始位置中。它不必進入內(nèi)核就可以完成。所以,選項C錯誤。

對于選項D,strlen函數(shù)的功能是求字符串的實際長度,即從內(nèi)存的某個位置(可以是字符串開頭、中間某個位置,甚至是某個不確定的內(nèi)存區(qū)域)開始掃描,直到遇到第一個字符串結(jié)束符“\0”為止,然后返回計數(shù)器值(長度不包含“\0”)。它不必進入內(nèi)核就可以完成。所以,選項D錯誤。

所以,本題的答案為AB。2.

下列中斷屬于強迫性中斷的是______。

(分數(shù):2.00)

A.掉電

B.設備出錯

C.時間片到時

D.執(zhí)行print語句

√解析:中斷源一般可分為兩類:強迫性中斷和自愿性中斷。強迫性中斷由隨機事件引起而非程序員事先安排,包括輸入/輸出中斷、硬件故障中斷、時鐘中斷、控制臺中斷和程序性中斷。設備出錯、執(zhí)行print語句屬于其中的輸入/輸出中斷;斷電屬于硬件故障中斷。時間片到時屬于自愿性中斷。

所以,選項A、選項B、選項D正確。3.

在競態(tài)條件(Racecondition)的情況下,兩個線程執(zhí)行如下代碼段,其中count為共享變量,線程1執(zhí)行代碼段A,線程2指向代碼段B,那么變量count的值可能為______。

intcount=10;

代碼段A:

Thread_1()

{

//dosomething

count++;

}

代碼段B:

Thread_2()

{

//dosomething

count--;

}

(分數(shù):2.00)

A.9

B.10

C.11

D.12解析:如果兩個或兩個以上的線程同時訪問相同的對象,或者訪問不同步的共享狀態(tài),就會出現(xiàn)競態(tài)條件。競態(tài)條件是一個在設備或者系統(tǒng)試圖同時執(zhí)行兩個操作的時候出現(xiàn)的不希望的狀況,但是由于設備和系統(tǒng)的自然特性,為了正確地執(zhí)行,操作必須按照合適順序進行。

本題中,線程Thread_1讀取count(10),進行遞增操作,還未寫回新值1(11)時,線程Thread_2讀取count舊值(10),進行遞減操作得到新值2(9),當寫回時,若新值1覆蓋新值2,則得到count=11,若新值2覆蓋新值1,則得到count=9。若count++和count--順序執(zhí)行,則得到正常值10。

需要注意的是,競態(tài)條件的出錯概率非常小,只有非常快速或者非常運氣不好時才會出現(xiàn),在幾百萬次運行中也很少遇到一次,所以,很難調(diào)試出來。

所以,本題的答案為ABC。4.

選擇排隊作業(yè)中等待時間最長的作業(yè)優(yōu)先調(diào)度,該調(diào)度算法可能不是______。

(分數(shù):2.00)

A.先來先服務調(diào)度算法

B.高響應比優(yōu)先調(diào)度算法

C.優(yōu)先權(quán)調(diào)度算法

D.短作業(yè)優(yōu)先調(diào)度算法

√解析:5.

在Unix操作系統(tǒng)中,可以用于進程間通信的是______。

(分數(shù):2.00)

A.Socket

B.共享內(nèi)存

C.消息隊列

D.信號量

√解析:進程間的通信方式主要有如下幾種:管道、信號、消息隊列、共享內(nèi)存、內(nèi)存映射、信號量和套接字(Socket)。所以,本題的答案為ABCD。6.

下面描述中,屬于Linux系統(tǒng)進程間通信機制的有______。

(分數(shù):2.00)

A.管道

B.信號量

C.信號

D.套接字

√解析:7.

進程內(nèi)的線程可以共享以下哪些資源______。

(分數(shù):2.00)

A.stack

B.datasection

C.registerset

D.filefd

√解析:線程是指程序在執(zhí)行過程中,能夠執(zhí)行程序代碼的一個執(zhí)行單元。

進程是指一段正在執(zhí)行的程序。而線程有時候也被稱為輕量級進程,是程序執(zhí)行的最小單元,一個進程可以擁有多個線程,各個線程之間共享程序的內(nèi)存空間(代碼段、數(shù)據(jù)段和堆空間)及一些進程級的資源(例如打開的文件),但是各個線程擁有自己的??臻g,進程與線程的關系如圖所示。

進程與線程的關系

具體而言,線程共享的內(nèi)容包括代碼段、數(shù)據(jù)段、堆空間、進程打開的文件描述符、進程的當前目錄以及進程的用戶ID和組ID。

線程獨占的資源包括棧、線程ID、寄存器的值、錯誤返回碼以及線程的信號屏蔽碼。具體內(nèi)容如下:

(1)線程ID

每個線程都有自己的線程ID,這個ID在本進程中是唯一的。進程用此來標識線程。

(2)線程的棧

棧是保證線程獨立運行所必需的。線程函數(shù)可以調(diào)用函數(shù),而被調(diào)用函數(shù)中又是可以層層嵌套的,所以,線程必須擁有自己的函數(shù)棧,使得函數(shù)調(diào)用可以正常執(zhí)行,不受其他線程的影響。

(3)錯誤返回碼

不同的線程應該擁有自己的錯誤返回碼變量。

(4)線程的信號屏蔽碼

由于每個線程所感興趣的信號不同,所以,線程的信號屏蔽碼應該由線程自己管理,但所有的線程都共享同樣的信號處理器。

(5)線程的優(yōu)先級

由于線程需要像進程那樣能夠被調(diào)度,那么就必須要有可供調(diào)度使用的參數(shù),這個參數(shù)就是線程。

所以,選項B與選項D正確,選項A與選項C錯誤。8.

兩個線程運行在雙核機器上,每個線程主線程如下,線程1:x=1;r1=y;,線程2:y=1;r2=x;,x和y是全局變量,初始都為0。r1和r2的可能值是______。

(分數(shù):2.00)

A.r1=1,r2=1

B.r1=1,r2=0

C.r1=0,r2=0

D.r1=0,r2=1

√解析:本題中,兩個線程運行在雙核機器上,沒有設置臨界區(qū),所以,無法保證執(zhí)行的正確性,而線程1與線程2在執(zhí)行的過程中,先后順序是不可控的,可能存在著以下三種情況:

1)首先執(zhí)行x=1,然后執(zhí)行y=1,接著執(zhí)行r1=y,即r1=1,最后執(zhí)行r2=x,即r2=1。所以,r1=1,r2=1。因此,選項A正確。

2)首先執(zhí)行y=1,然后執(zhí)行r2=x,此時x的值為初始值0,所以,r2=0,接著執(zhí)行x=1,最后執(zhí)行r1=y,而y的值為1,所以,r1=1。因此,選項B正確。

3)首先執(zhí)行x=1,然后執(zhí)行r1=y,此時y的值為初始值0,所以,r1=0,接著執(zhí)行y=1,最后執(zhí)行r2=x,而x的值為1,所以,r2=1。因此,選項D正確。

所以,本題的答案為ABD。9.

以下關于減少換頁的方法描述中,錯誤的有______。

(分數(shù):2.00)

A.進程傾向于占用CPU

B.訪問局部性(LocalityofReference)滿足進程要求

C.進程傾向于占用I/O

D.使用基于最短剩余時間(ShottestRemainingTime)的調(diào)度機制解析:換頁錯誤又叫作缺頁中斷。在操作系統(tǒng)上的每個進程都有一段自己的獨立虛擬內(nèi)存空間,但這些虛擬內(nèi)存并不是完全映射到物理內(nèi)存上的。當一個程序試圖訪問沒有映射到物理內(nèi)存的地方時,就會出現(xiàn)缺頁中斷,這時操作系統(tǒng)要做的是將這段虛擬內(nèi)存映射到物理內(nèi)存上,使其真正“可用”。

減少換頁錯誤的方法,即降低缺頁中斷率,通??梢栽谝韵聨讉€方面做工作:

1)頁面大小。頁面劃分的越大,中斷率就會越低。

2)內(nèi)存頁框數(shù)。增加作業(yè)可用的內(nèi)存塊數(shù)可以減少換頁。

3)替換算法的好壞也會影響缺頁中斷的次數(shù)。

4)程序局部性,有良好局部性的程序也會有較少的換頁次數(shù)。

本題中,強調(diào)的是減少換頁錯誤,而非消除換頁錯誤,所以,選項A與選項C的描述不正確,選項B的描述正確。

對于選項D,由于剩余時間短的任務執(zhí)行時間短,需要換頁的概率也低,所以選項D的描述正確。

所以,本題的答案為AC。10.

以下關于Linux操作系統(tǒng)內(nèi)存的描述中,正確的有______。

(分數(shù):2.00)

A.32位機器,單個進程能使用的最大用戶態(tài)地址空間理論上不大于3GB

B.若一臺機器的物理內(nèi)存為2GB,則在該機器上同時運行的進程A和進程B所占物理內(nèi)存之和有可能大于2GB

C.進程A是在Linux系統(tǒng)運行的一個用C語言編寫的程序,如果在A中用malloc函數(shù)成功申請了1GB內(nèi)存,則此時該進程必定至少占用了1GB的物理內(nèi)存

D.32位機器,Linux操作系統(tǒng)內(nèi)存管理以“頁”為基本單位,每頁的大小固定為4KB

√解析:對于選項A,在32位機器上,32位意味著4GB的尋址空間(備注:計算機的地址總線是32位,可以支持的內(nèi)存地址代碼是2^32=4*2^10*2^10*2^10B=4GB),Linux操作系統(tǒng)把它分為兩部分:最高的1GB(虛擬地址從0xC0000000到0xffffffff)用作內(nèi)核本身,稱為“系統(tǒng)空間”,而較低的3GB字節(jié)(從0x00000000到0xbffffff)用作各進程的“用戶空間”。這樣,理論上每個進程可以使用的用戶空間都是3GB。當然,實際的空間大小受物理存儲器大小的限制。雖然各個進程擁有其自己的3GB用戶空間,系統(tǒng)空間卻由所有的進程共享。從具體進程的角度看,每個進程都擁有4GB的虛擬空間,較低的3GB為自己的用戶空間,最高的1GB為所有進程以及內(nèi)核共享的系統(tǒng)空間。因此,選項A正確。

對于選項B,進程A和B都有自己的虛擬地址,程序在運行的一個特定的時候并不會把所有需要的數(shù)據(jù)都加載到內(nèi)存中,當前不使用的數(shù)據(jù)會被置換到硬盤上,只有在使用的時候才會被置換到內(nèi)存中。因此,兩個進程所占的物理存儲之和完全有可能大于2GB。例如當進程A和B同時運行的時候,都只有部分數(shù)據(jù)被加載到內(nèi)存中,假設在某一時刻A和B進程占用內(nèi)存之和為2GB,如果此時A所需的數(shù)據(jù)不在內(nèi)存中,此時系統(tǒng)采用特定的算法把進程A與B當前可能不使用的數(shù)據(jù)置換到硬盤上。因此,選項B正確。

對于選項C,malloc申請的只是虛擬的內(nèi)存空間,實際對應的數(shù)據(jù)有可能已經(jīng)被加載到內(nèi)存中,也有可能被置換到硬盤上了。因此,選項C錯誤。

對于選項D,Linux操作系統(tǒng)采用頁作為內(nèi)存管理的基本單位,其采用的標準的頁面大小為4KB。為什么是4KB呢?因為4KB是大多數(shù)磁盤塊大小的倍數(shù),傳輸效率高,管理方便,無須考慮PAE(物理地址擴展)。因此,選項D正確。

所以,本題的答案為ABD。三、論述題(總題數(shù):8,分數(shù):0.00)1.

輪詢?nèi)蝿照{(diào)度和可搶占式調(diào)度有什么區(qū)別?

(分數(shù):2.00)__________________________________________________________________________________________

正確答案:(在多任務系統(tǒng)中,在同一時刻通常會有多個任務處于活動狀態(tài),操作系統(tǒng)此時就需要對資源進行管理,在任務間實現(xiàn)資源(CPU、內(nèi)存等)的共享。任務調(diào)度是指基于給定時間點、給定時間間隔或者給定執(zhí)行次數(shù)自動執(zhí)行任務。輪詢?nèi)蝿照{(diào)度與搶占式任務調(diào)度的區(qū)別在于搶占式調(diào)度中優(yōu)先級高的任務可以搶占CPU,而輪詢的不能。

具體而言,輪詢調(diào)度的原理是每一次把來自用戶的請求輪流分配給內(nèi)部服務器,從1開始,直到N(內(nèi)部服務器個數(shù)),然后重新開始循環(huán)。只有在當前任務主動放棄CPU控制權(quán)的情況下(比如任務掛起),才允許其他任務(包括高優(yōu)先級的任務)控制CPU。其優(yōu)點是簡潔性,它無須記錄當前所有連接的狀態(tài),所以,它是一種無狀態(tài)調(diào)度,但缺點是不利于后面的請求及時得到響應。搶占式調(diào)度允許高優(yōu)先級的任務打斷當前執(zhí)行的任務,搶占CPU的控制權(quán)。這有利于后面的高優(yōu)先級的任務也能及時得到響應。但實現(xiàn)相對較復雜,并且可能出現(xiàn)低優(yōu)先級的任務長期得不到調(diào)度。)解析:2.

在MMO游戲中,服務器采用Linux操作系統(tǒng),網(wǎng)絡通信與游戲邏輯處理進程一般是分離的。例如,GameSvr進程處理游戲邏輯,TCPSvr進程處理網(wǎng)絡通信。Linux操作系統(tǒng)提供了很多機制可以實現(xiàn)GameSvr和TCPSvr進程之間的數(shù)據(jù)通信。請列出兩種你認為最好的機制,并為主(最好)次(次佳)描述它們實現(xiàn)的框架、優(yōu)缺點對比和應用中的注意事項。

(分數(shù):4.00)__________________________________________________________________________________________

正確答案:(系統(tǒng)進程之間通信的主要方法有信號、信號量、管道、消息和共享內(nèi)存。信號量和信號主要用于觸發(fā),而不是用于傳遞數(shù)據(jù)。所以,數(shù)據(jù)通信的主要方法是管道、消息和共享內(nèi)存,以下將分別對這些方式進行具體分析。

(1)管道

管道是由內(nèi)核管理的一個環(huán)形緩沖區(qū),類似于放入內(nèi)存中的一個紙條,它允許兩個進程以生產(chǎn)者/消費者的模型進行通信。如圖所示,當兩個進程利用管道文件進行通信時,一個進程為寫進程,另一個進程為讀進程,寫進程通過寫端(發(fā)送端)往管道文件中寫入信息,讀進程通過讀端(接收端)從管道文件中讀取信息,兩個進程協(xié)調(diào)不斷地進行寫、讀,便會構(gòu)成雙方通過管道傳遞信息的流水線。當管道中沒有信息時,從管道中讀取的進程會等待,直到另一端的進程放入信息。當管道被放滿信息時,嘗試放入信息的進程會等待,直到另一端的進程取出信息。當兩個進程都終結(jié)的時候,管道也自動消失。

管道通信

管道的優(yōu)點是不需要加鎖,缺點是默認緩沖區(qū)太小,只有4K大小,而且它只適合父子進程間通信。由于一個管道只適合單向通信,如果要雙向通信,就需要建立兩個管道,所以,它不適合多個子進程。除此以外,數(shù)據(jù)本身沒有邊界,需要應用程序自己解釋,而一般消息大多是一個固定長的消息頭,和一個變長的消息體,一個子進程從管道read到消息頭后,消息體可能被其他子進程接收到。

(2)消息

消息是有類型的一段文本。為參與消息傳遞的進程提供msgsnd(用來向消息隊列發(fā)送消息)和msgrcv(用來從消息隊列中讀取消息)系統(tǒng)調(diào)用。每個進程都有一個與之相關聯(lián)的消息隊列,其功能類似于信箱。消息發(fā)送者指定發(fā)送的每個消息的類型,類型可以被接收者用作選擇的依據(jù)。接收者可以按先進先出的順序接收信息,或者按類型接收。當進程試圖給一個滿隊列發(fā)送信息時,它將被阻塞;當進程試圖從一個空隊列讀取時也會被阻塞;如果一個進程試圖讀取某一特定類型的消息,但由于現(xiàn)在還沒有這種類型的消息而失敗時,則該進程不會阻塞。

消息隊列能適合大部分場景,缺點是默認緩沖比較小,不過這個緩沖區(qū)可以調(diào)整,前提是具有管理員權(quán)限。

(3)共享內(nèi)存

共享內(nèi)存是分配一塊能被其他進程訪問的內(nèi)存,實現(xiàn)是通過將內(nèi)存映射到共享它的進程的地址空間,使這些進程間的數(shù)據(jù)傳送不再涉及內(nèi)核,即進程問通信不需要通過進入內(nèi)核的系統(tǒng)調(diào)用來實現(xiàn)。進程讀寫共享內(nèi)存所使用的機器指令與讀寫虛擬內(nèi)存空間的其他部分所使用的指令相同。每個進程有一個只讀或讀寫的權(quán)限。互斥約束不屬于共享內(nèi)存機制的一部分,但必須由使用共享內(nèi)存的進程提供。共享內(nèi)存幾乎可以認為沒有上限;它也是不局限于父子進程,采用與消息隊列類似的定位方式;因為內(nèi)存是共享的,不存在任何單向的限制;最大的問題就是需要應用程序自己實現(xiàn)互斥。

相比其他的進程間通信方式,共享內(nèi)存的最大優(yōu)點是:數(shù)據(jù)的賦值只有兩次,一次是從輸入文件到共享內(nèi)存區(qū),一次是從共享內(nèi)存區(qū)到輸出文件,而其他的則需要復制4次:服務器將輸入文件讀入自己的進程空間,再從自己的進程空間寫入管道/消息隊列等;客戶進程從管道/消息隊列中讀出數(shù)據(jù)到自己的進程空間,最后輸出到客戶指定的文件中。因此,相比管道和消息隊列,共享內(nèi)存是最快的進程問的通信方式,因為它不涉及與內(nèi)存的交互,所以,其效率更高。)解析:3.

線程與進程的區(qū)別和聯(lián)系分別是什么?線程是否具有相同的堆棧?DLL是否具有獨立的堆棧?

(分數(shù):2.00)__________________________________________________________________________________________

正確答案:(進程是死的,只是一些資源的集合,真正的程序執(zhí)行都是線程來完成的,程序啟動的時候操作系統(tǒng)創(chuàng)建了一個主線程,每個線程有自己的堆棧。DLL(DynamicLinkLibrary,動態(tài)鏈接庫)中是否具有獨立的堆棧,這個問題不好回答,或者說這個問題本身就有問題。因為DLL中的代碼是被某些線程所執(zhí)行,只有線程擁有堆棧,如果DLL中的代碼是由EXE中的線程所調(diào)用,那么這個時候是不是說這個DLL沒有自己獨立的堆棧呢?如果DLL中的代碼是由DLL自己創(chuàng)建的線程所執(zhí)行,那么是不是說DLL有獨立的堆棧呢?以上講的是堆棧,如果對于堆來說,每個DLL有自己的堆,所以,如果是從DLL中動態(tài)分配的內(nèi)存,最好是從DLL中刪除;如果是從DLL中分配內(nèi)存,然后在EXE中,或者另外一個DLL中刪除,很有可能導致程序崩潰。)解析:4.

程序什么時候應該使用線程?

(分數(shù):2.00)__________________________________________________________________________________________

正確答案:(程序在以下幾種情況下使用線程:

1)耗時的操作使用線程,提高應用程序響應效率。

2)并行操作時使用線程,例如基于C/S架構(gòu)的服務器端并發(fā)線程響應用戶的請求。

3)在多CPU系統(tǒng)中,使用線程提高CPU利用率。

4)改善程序結(jié)構(gòu)。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。)解析:5.

請回答以下關于進程、線程以及程序的有關問題。

1)進程和線程的區(qū)別是什么?

2)多線程程序有什么優(yōu)點與缺點?

3)多進程程序有什么優(yōu)點與缺點?與多線程相比,有什么區(qū)別?

(分數(shù):2.00)__________________________________________________________________________________________

正確答案:(1)進程和線程的關系如下:

①一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。

②資源分配給進程,同一進程的所有線程共享該進程的資源。

③處理機分給線程,即真正在處理機上運行的是線程。

④線程在執(zhí)行過程中,需要協(xié)作同步。不同進程的線程間要利用消息通信的辦法實現(xiàn)同步。線程指的是進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體。

進程和線程的相同點如下:

①二者都具有ID、一組寄存器、狀態(tài)、優(yōu)先級以及所要遵循的調(diào)度策略。

②每個進程都有一個進程控制塊,線程也擁有一個線程控制塊。

③線程和子進程共享父進程中的資源;線程和子進程獨立于它們的父進程,競爭使用處理器資源;線程和子進程的創(chuàng)建者可以在線程和子進程上實行某些控制,例如創(chuàng)建者可以取消、掛起、繼續(xù)和修改線程和子進程的優(yōu)先級;線程和子進程可以改變其屬性并創(chuàng)建新的資源。

進程和線程的不同點如下:

①線程是進程的一部分,一個沒有線程的進程是可以被看作單線程的,如果一個進程內(nèi)擁有多個線程,進程的執(zhí)行過程不是一條線(線程)的,而是多條線(線程)共同完成的。

②啟動一個線程所花費的空間遠遠小于啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小于進程間切換所需要的時間。

③系統(tǒng)在運行的時候會為每個進程分配不同的內(nèi)存區(qū)域,但是不會為線程分配內(nèi)存(線程所使用的資源是它所屬的進程的資源),同一個進程內(nèi)的線程可以共享進程的資源。對不同進程來說,它們具有獨立的數(shù)據(jù)空間,要進行數(shù)據(jù)的傳遞只能通過通信的方式進行,這種方式不僅費時,而且很不方便。而一個線程的數(shù)據(jù)可以直接為其他線程所用,這不僅快捷,而且方便。

④與進程的控制表PCB相似,線程也有自己的控制表TCB,但是TCB中所保存的線程狀態(tài)比PCB表中少多了。

⑤進程是系統(tǒng)所有資源分配時候的一個基本單位,擁有一個完整的虛擬空間地址,并不依賴線程而獨立存在。

2)多線程的優(yōu)點如下:

無須跨進程邊界;程序邏輯和控制方式簡單;所有線程可以直接共享內(nèi)存和變量等;線程方式消耗的總資源比進程方式少。

多線程的缺點如下:

每個線程與主程序共用地址空間,受限于2GB地址空間;線程之間的同步和加鎖控制比較麻煩;一個線程的崩潰可能影響到整個程序的穩(wěn)定性;到達一定的線程數(shù)程度后,即使再增加CPU也無法提高性能,例如WindowsServer2003,大約1500個線程數(shù)就快到極限了(線程堆棧設定為1M),如果設定線程堆棧為2M,還達不到1500個線程總數(shù);線程能夠提高的總性能有限,而且線程多了之

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論