




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java程序員面試分類真題11(總分:100.00,做題時間:120分鐘)一、單項選擇題(總題數:31,分數:0.00)1.
在Linux操作系統下,非超級用戶要運行某個文件夾下的可執行腳本,對該文件夾至少要擁有______權限;如果要用1s命令查看該文件夾下有哪些文件,對該文件夾至少要擁有______權限。
(分數:2.00)
A.前者是執行權限,后者是執行和讀取權限
√
B.前者是執行和讀取權限,后者是執行和讀取權限
C.前者是執行權限,后者是讀取權限
D.前者是執行和讀取權限、后者是讀取權限解析:Linux操作系統中的每個文件和目錄都有存取許可權限,存取權限規定了三種訪問文件或目錄的方式:讀(r)、寫(w)、可執行或查找(x)。
對于文件的存取權限而言,讀權限(r)表示只允許指定用戶讀取相應文件的內容,而禁止對它做任何的更改操作,將所訪問的文件的內容作為輸入的命令都需要有讀的權限,例如cat(連接并顯示指定的一個或者多個文件的有關信息)、more(類似cat,不過會一頁頁地顯示,方便使用者一頁頁閱讀)等。寫權限(w)表示允許指定用戶打開并修改文件,例如命令vi、cp等。執行權限(x)表示允許指定用戶將該文件作為一個程序執行。
對于目錄的存取權限而言,在ls命令后加上-d選項,可以了解目錄文件的使用權限。其中,讀權限(r)表示可以列出存儲在該目錄下的文件,即讀目錄內容列表,這一權限允許Shell使用文件擴展名列出相匹配的文件名。寫權限(w)表示允許用戶從目錄中刪除或添加新的文件,通常只有系統管理員才具有寫權限。執行權限(x)表示允許用戶在目錄中查找,并能用cd命令將工作目錄改到該目錄。
本題中,要想進入目錄,都需要具有x權限(執行權限),而查看目錄下的文件需要r權限(讀權限)和x權限,因為相當于進入了目錄。執行目錄下某個可執行文件,需要進入目錄的x權限。所以,選項A正確。2.
“死鎖”是針對______的。
(分數:2.00)
A.某個進程申請資源數超過了系統擁有的最大資源數
B.某個進程申請系統中不存在的資源
C.硬件故障
D.多個并發進程競爭獨占型資源
√解析:所謂死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。舉一個簡單的例子:在吃飯的時候,只有拿到一雙筷子后才能開始吃飯,如果有兩個人,每個人都只拿了一根筷子,而等待另一根筷子可用,此時,兩個人都已經占用了部分資源(一根筷子),而等待另一個資源(另一根筷子),兩個人永遠都在等待對方釋放資源,因此,發生了死鎖。可以通過外力作用把一個人的筷子強制釋放掉給另外一個人而解決死鎖。很顯然,選項D的描述符合死鎖的定義。3.
某系統中有11臺打印機,N個進程共享打印機資源,每個進程要求3臺,當N的取值不超過______時,系統不會發生死鎖。
(分數:2.00)
A.3
B.5
√
C.8
D.7解析:本題中,不發生死鎖的條件是至少能保證1個進程能獲得3臺打印機資源。最壞的情況是1個進程獲取了3臺打印機資源,另外N-1個進程獲取到2臺打印機,等待獲取第3臺。
本題可以構建如下等式關系:3+(N-1)*2=11,解算結果為N=5。所以,選項B正確。4.
有一個變量inta=0,兩個線程同時對其進行+1操作,每個線程加100次,不加鎖,最后變量a的值是______。
(分數:2.00)
A.200
B.<=200
√
C.>=200
D.都有可能解析:多線程(Multithreading)技術指的是從軟件或者硬件上實現多個線程并發執行的技術,本題中,+1操作的執行過程如下:取出變量a,對變量a執行+1操作,把計算結果放回去。如果兩個線程中+1操作都沒有被中斷,所有的+1操作都生效了,那么此時相應地對a執行了200次+1操作,在這種情況下,a的值變為200。由于這兩個線程在對a執行+1操作的時候,并沒有加鎖,因此,有可能會導致部分+1操作丟失,如下所示:
1)線程1讀取變量a的值(讀取到寄存器中)為0。
2)線程2讀取變量a的值,此時讀取到的值也為0。
3)線程1對a執行+1操作并放回去,此時a的值為1。
4)線程2也對a執行+1操作并放回去,由于此時線程2中寄存器中a的值為0,執行+1操作后變為1并放回去,此時a的值還為1。
在這種情況下,線程1對a執行+1的操作就會丟失。因此,執行結束后,a的最大值為200。所以,選項B正確。5.
某系統中有3個并發進程,都需要同類資源4個,試問該系統不會發生死鎖的最少資源數是______。
(分數:2.00)
A.9
B.10
√
C.11
D.12解析:系統不會發生死鎖的最少資源數=每個進程擁有(4-1=3)個資源+多出1個資源=3*3+1=10。所以,選項B正確。6.
以下關于計算機的描述中,不正確的是______。
(分數:2.00)
A.進程調度有“可搶占”和“非搶占”兩種方式,后者引起系統的開銷更大
√
B.每個進程都有自己的文件描述符表,所有進程共享同一打開文件表和v-node表
C.基本的存儲技術包括RAM、ROM、磁盤以及SSD,其中訪問速度最慢的是磁盤,CPU的高速緩存一般是由RAM組成的
D.多個進程競爭資源出現了循環等待可能造成系統死鎖解析:對于選項A,可搶占式調度會導致系統的開銷更大。可搶占式(Preemptive)調度嚴格保證在任何時刻具有最高優先級的進程占有處理機運行,因此,該方式增加了處理機調度的時間,同時需要為退出的進程保留現場,為獲取到處理機的進程恢復現場等時間(和空間),因此,開銷比較大。非搶占式(Nonpreemptive)調度是一種讓進程運行直到結束或阻塞的調度方式(容易實現,適合專用系統,不適合通用系統)。所以,選項A不正確。
對于選項B,在內核中,對于每個進程都有一個文件描述符表,表示這個進程打開的所有文件。文件描述符表中每一項都是一個指針,指向一個用于描述打開的文件的數據塊——file對象,file對象中描述了文件的打開模式、讀寫位置等重要信息,當進程打開一個文件時,內核就會創建一個新的file對象。需要注意的是,file對象不是專屬于某個進程的,不同進程的文件描述符表中的指針可以指向相同的file對象,從而共享這個打開的文件。file對象有引用計數,記錄了引用這個對象的文件描述符個數,只有當引用計數為0時,內核才銷毀file對象,因此,某個進程關閉文件,不會影響與之共享同一個file對象的進程。所以,選項B正確。
對于選項C,ROM(ReadOnlyMemory,只讀存儲器)和RAM(RandomAccessMemory,隨機存取存儲器)指的都是半導體存儲器,ROM在系統停止供電的時候仍然可以保持數據,而RAM通常都是在掉電之后就丟失數據,典型的RAM就是計算機的內存。磁盤是一種類似磁帶的計算機的外部存儲器,它將圓形的磁性盤片裝在一個方的密封盒子里。SSD(SolidStateDrives,固態硬盤,簡稱固盤)是用固態電子存儲芯片陣列而制成的硬盤,由控制單元和存儲單元(FLASH芯片、DRAM芯片)組成。ROM、RAM、磁盤和SSD都是存儲設備,其中,訪問速度最快的是RAM,訪問速度最慢的是磁盤,CPU的高速緩存一般是由RAM組成的。所以,選項C正確。
對于選項D,如果系統中存在多個進程,它們中的每一個進程都占用了某種資源而又都在等待其中另一個進程所占用的資源,那么這種等待永遠都不能結束,就稱系統出現了“死鎖”。所以,選項D正確。
所以,本題的答案為A。7.
某進程在運行過程中需要等待從磁盤上讀入數據,此時進程的狀態將______。
(分數:2.00)
A.從就緒變為運行
B.從運行變為就緒
C.從運行變為阻塞
√
D.從阻塞變為就緒解析:在操作系統中,進程的基本狀態有就緒狀態、運行狀態和阻塞狀態三種。以下將分別對這三種狀態進行分析。
(1)就緒(Ready)狀態
進程已經具備運行條件,但是CPU還沒有得到分配。也就是說,當進程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執行,此時進程的狀態稱為就緒狀態。在一個系統中,處于就緒狀態的進程可能有多個,通常將這些處于就緒狀態的進程排成一個隊列,稱為就緒隊列。
(2)運行狀態
進程已獲得CPU,其程序正在執行。在單處理機系統中,只有一個進程處于運行狀態,在多處理機系統中,則有多個進程處于運行狀態。
(3)阻塞狀態
當正在運行的進程由于發生某事件而暫時無法繼續執行時,便放棄處理機而處于暫停狀態,亦即程序的執行受到阻塞,把這種暫停狀態稱為阻塞狀態,有時也稱為等待狀態或封鎖狀態。
三種進程之間的轉換圖如圖所示。
三種進程之間的轉換圖
以下將針對這個狀態轉換圖的條件進行討論與分析:
(1)就緒→運行
對于就緒狀態的進程,當進程調度程序按一種選定的策略從中選中一個就緒進程,并為之分配了處理機后,該進程便由就緒狀態變為運行狀態。
(2)運行→阻塞
如果正在運行的進程因發生某等待事件而無法執行,則進程由執行狀態變為阻塞狀態,例如進程提出輸入/輸出請求而變成等待外部設備傳輸信息的狀態,進程申請資源(主存空間或外部設備)得不到滿足時變成等待資源狀態,進程運行中出現了故障(程序出錯或主存儲器讀寫錯等)變成等待干預狀態等。
(3)阻塞→就緒
處于阻塞狀態的進程,當其等待的事件已經發生,例如輸入/輸出完成,資源得到滿足或錯誤處理完畢時,處于阻塞狀態的進程并不會馬上轉入運行狀態,而是先轉入就緒狀態,然后再由系統進程調度程序在適當的時候將該進程轉為運行狀態。
(4)運行→就緒
正在運行的進程,因為時間片用完而被暫停執行,或在采用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行而被迫讓出處理機時,該進程便由運行狀態轉變為就緒狀態。
以上4種情況可以相互正常轉換,那么為什么阻塞狀態無法直接轉換為運行狀態呢?為什么就緒狀態無法直接轉換為阻塞狀態呢?其實,即使給阻塞進程分配CPU,也無法執行,因為操作系統在進行調度時,不會在阻塞隊列中進行挑選,其調度的選擇對象為就緒隊列,而就緒狀態根本就沒有執行,是進入不了阻塞狀態的。
本題中,進程在運行過程中,進入I/O操作,則處理阻塞。所以,此時進程的狀態將從運行變為阻塞。所以,選項C正確。8.
Linux系統下的進程有以下______三種狀態。
(分數:2.00)
A.精確態、模糊態和隨機態
B.運行態、就緒態和等待態
√
C.準備態、執行態和退出態
D.手動態、自動態和自由態解析:進程的狀態有兩種劃分方式:三態模型與五態模型。
1)三態模型:運行態、就緒態和阻塞(等待)態。
2)五態模型:新建態、就緒態、運行態、阻塞態和終止態。
所以,本題的答案為B。9.
下列的進程狀態變化中,不可能發生的是______。
(分數:2.00)
A.運行→就緒
B.運行→等待
C.等待→運行
√
D.等待→就緒解析:狀態不能直接從等待狀態(也稱為阻塞狀態)跳轉到運行狀態,只能跳轉到就緒狀態。所以,選項C正確。10.
進程進入等待狀態的方式有______。
(分數:2.00)
A.CPU調度給優先級更高的線程
B.阻塞的線程獲得資源或者信號
C.在時間片輪轉的情況下,如果時間片到了
D.獲得spinlock(自旋鎖)未果
√解析:等待狀態通常是我們說的阻塞態,因為一般阻塞態是在等待某一觸發事件的發生,才能進入就緒狀態。
對于選項A,進程是從運行狀態進入就緒狀態。所以,選項A錯誤。
對于選項B,進程是從阻塞狀態進入就緒狀態。所以,選項B錯誤。
對于選項C,進程是從運行狀態進入就緒狀態。所以,選項C錯誤。
對于選項D,獲取鎖失敗后進入阻塞狀態。所以,選項D正確。11.
以下關于Linux下的進程的描述中,不正確的是______。
(分數:2.00)
A.僵尸進程會被init進程接管,而僵尸進程不會造成資源浪費
√
B.孤兒進程的父進程在它之前退出,會被init進程接管,它不會造成資源浪費
C.進程是資源管理的最小單位,而線程是程序執行的最小單位。Linux下的線程本質上用進程實現
D.子進程如果對資源只是進行讀操作,那么完全和父進程共享物理地址空間解析:對于選項A,僵尸進程不會被init進程接管,會一直占用資源。所以,選項A錯誤。
對于選項B,孤兒進程在產生的時候就會被init進程所接管,會直接回收資源,也就不會占用資源。所以,選項B正確。
對于選項C與選項D,描述正確。
所以,本題的答案為A。12.
下列關于進程的描述中,不正確的是______。
(分數:2.00)
A.進程在退出時會自動關閉自己打開的所有文件
B.進程在退出時會自動關閉自己打開的網絡鏈接
C.進程在退出時會自動銷毀自己創建的所有線程
D.進程在退出時會自動銷毀自己打開的共享內存
√解析:進程是一個具有一定獨立功能的程序關于某個數據集合的一次運行活動。它是操作系統動態執行的基本單元,在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。進程開啟的線程都僅僅屬于本進程,所以,進程在退出時,會自動關閉進程打開的文件、自己打開的網絡,同時銷毀自己創建的所有線程。但是,由于共享內存是公用的,一旦被銷毀了,會對其他正在使用這段內存的進程造成破壞,所以,進程在退出時不會自動銷毀自己打開的共享內存。所以,選項D錯誤,而選項A、選項B、選項C都是正確的。13.
一種既有利于短作業又兼顧長作業的調度方式是______。
(分數:2.00)
A.先來先服務
B.均衡調度
C.最短作業優先
D.最高響應比優先
√解析:本題中,選項A、選項B和選項C的調度方法都不滿足題目要求,所以,選項A、選項B和選項C錯誤。
對于選項D,最高響應比優先法(HighestResponse_ratioNext,HRN)是對FCFS(FirstComeFirstServed,先來先服務)方式和SJF(ShortestJobFirst,最短作業優先)方式的一種綜合平衡。FCFS方式只考慮每個作業的請求時間而未考慮執行時間的長短,而SJF方式只考慮執行時間而未考慮等待時間的長短。因此,這兩種調度算法在某些極端情況下會帶來不便。HRN調度策略同時考慮每個作業的等待時間長短和估計需要的執行時間長短,從中選出響應比最高的作業投入執行。響應比R定義如下:R=(W+T)/T=1+W/T,其中,T為該作業估計需要的執行時間,W為作業在后備狀態隊列中的等待時間。每當要進行作業調度時,系統計算每個作業的響應比,選擇其中R最大者投入執行。這樣,即使是長作業,隨著它等待時間的增加,W/T也就隨著增加,也就有機會獲得調度執行。這種算法是介于FCFS和SJF之間的一種折中算法。由于長作業也有機會投入運行,在同一時間內處理的作業數顯然要少于SJF法,當采用HRN方式時,其吞吐量將小于采用SJF法時的吞吐量。另外,由于每次調度前要計算響應比,系統開銷也要相應增加。等待時問一定,要求服務的時間越短,先運行;要求服務的時間一定,等待時間越長,先運行。所以,最高響應比優先調度是一種既有利于短作業又兼顧長作業的調度方式。所以,選項D正確。14.
進程調度是從______選擇一個進程投入運行。
(分數:2.00)
A.就緒隊列
√
B.作業后備隊列
C.等待隊列
D.提交隊列解析:進程的基本調度狀態有運行、就緒和阻塞。進程調度程序從處于就緒狀態的進程中選擇一個投入運行。運行進程因等待某一事件而進入阻塞狀態,因時間片到達而回到就緒狀態。處于阻塞狀態的進程當所等待的事件發生時,便進入就緒狀態。
本題中,就緒隊列是等待CPU時間的隊列,其中存放著等待執行的任務。進程調度是從就緒隊列中選擇一個進程投入運行。所以,選項A正確。15.
在進程調度算法中,下面算法中,適用于運行時間可以預知的批處理調度算法是______。
(分數:2.00)
A.最短作業優先
√
B.先來先服務
C.優先級調度
D.時間片輪轉調度解析:對于選項A,最短作業優先(ShortestJobFirst,SJF)是對FCFS算法的改進,其目標是減少平均周轉時間。其優點是相比FCFS(FirstComeFirstServed,先來先服務)改善了平均周轉時間和平均帶權周轉時間,縮短了作業的等待時間,同時,提高了系統的吞吐量。但缺點就是對長作業非常不利,可能長時間得不到執行;未能依據作業的緊迫程度來劃分執行的優先級;難以準確估計作業(進程)的執行時間,從而影響調度性能。最短作業優先是一種適用于運行時間可以預知的非搶占式的批處理調度算法。所以,選項A正確。
對于選項B,先來先服務(FirstComeFirstSerred,FCFS)是最簡單的調度算法,按先后順序進行調度;適用于長作業,而不利于短作業;有利于CPU繁忙的作業,而不利于I/O繁忙的作業。所以,選項B錯誤。
對于選項C,優先級算法(PriorityScheduling)是多級隊列算法的改進,平衡了各進程對響應時間的要求。適用于作業調度和進程調度,可分成搶先式和非搶先式。所以,選項C錯誤。
對于選項D,輪轉法(RoundRobin)是讓每個進程在就緒隊列中的等待時間與享受服務的時間成正比例。所以,選項D錯誤。
所以,本題的答案為A。16.
在進程間通信的方式中,訪問速度最快的是______。
(分數:2.00)
A.管道
B.消息隊列
C.共享內存
√
D.套接字解析:共享內存就是映射一段能被其他進程所訪問的內存,這段內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的進程間通信的方式,它是針對其他進程間通信方式運行效率低而專門設計的。所以,選項C正確。17.
同一進程下的多個線程可以共享的資源是______。
(分數:2.00)
A.棧
B.數據區
√
C.寄存器
D.線程ID解析:18.
系統中的“顛簸”是由______引起的。
(分數:2.00)
A.內存容量不足
B.缺頁率高
√
C.交換信息量大
D.缺頁率反饋模型不正確解析:如果分配給進程的存儲塊數量小于進程所需要的最小值,進程的運行將很頻繁地產生缺頁中斷,這種頻率非常高的頁面置換現象稱為抖動,也稱為“顛簸”。在請求分頁存儲管理中,可能出現這種情況,即對剛被替換出去的頁,立即又要被訪問。需要將它調入,因為沒有空閑內存又要替換另一頁,而后者又是即將被訪問的頁,于是造成了系統需花費大量的時間忙于進行這種頻繁的頁面交換,致使系統的實際效率很低,嚴重導致系統癱瘓。
通過上面的分析可知,“顛簸”是由缺頁率高引起的。所以,選項B正確。19.
下面不是進程和程序的區別的是______。
(分數:2.00)
A.程序是一組有序的靜態指令,進程是一次程序的執行過程
B.程序只能在前臺運行,而進程可以在前臺或后臺運行
√
C.程序可以長期保存,進程是暫時的
D.程序沒有狀態,而進程是有狀態的解析:下表是程序、進程、線程的定義與關聯關系。程序、進程、線程的定義與關聯關系術語定義與描述程序一組指令的有序結合,是一個靜態沒狀態的文本進程具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單元線程進程的一個實體,是CPU調度和分派的基本單元,是比進程更小的能獨立運行的基本單元。本身基本上不擁有系
統資源,只擁有一點在運行中必不可少的資源(例如程序計數器、一組寄存器和棧)一個線程可以創建和撤銷另一個
線程,同一個進程中的多個線程之間可以并發執行
所以,本題的答案為B。20.
程序和進程的本質區別是______。
(分數:2.00)
A.獨占使用和分時使用計算機資源
B.非順序和順序執行機器指令
C.在外存和內存存儲
D.靜態和動態特征
√解析:21.
文件長度是一個大于0的整數,用變量unsignedfilelength來表示,把文件分成塊,每塊的長度也是一個大于0的整數,用變量unsignedblocklength來表示,則文件被分成的塊數為______。
(分數: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,對于上述兩種情況都能得到正確的結果。因此,選項D正確。22.
X86體系結構在保護模式下中有三種地址,以下對于這三種地址的描述中,正確的是______。
(分數:2.00)
A.虛擬地址先經過分段機制映射到線性地址,然后線性地址通過分頁機制映射到物理地址
√
B.線性地址先經過分段機制映射到虛擬地址,然后虛擬地址通過分頁機制映射到物理地址
C.虛擬地址先經過分頁機制映射到線性地址,然后線性地址通過分段機制映射到物理地址
D.線性地址先經過分頁機制映射到虛擬地址,然后線性地址通過分段機制映射到物理地址解析:要想弄明白各類地址的映射,首先需要弄懂各地址的概念。
虛擬地址指的是由程序產生的由段選擇符和段內偏移地址兩個部分組成的地址。這兩部分組成的地址并沒有直接訪問物理內存,而是要通過分段地址的變換機構處理或映射后才會對應到相應的物理內存地址。
邏輯地址指的是用戶程序經編譯之后的每個目標模塊都以0為基地址順序編址,在程序中使用的地址都是邏輯地址。
線性地址指的是虛擬地址到物理地址變換之間的中間層,是處理器可尋址的內存空間(稱為線性地址空間)中的地址。程序代碼會產生邏輯地址,或者說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。如果啟用了分頁機制,那么線性地址可以再經過變換產生物理地址。如果沒有采用分頁機制,那么線性地址就是物理地址。
物理地址指的是現在CPU外部地址總線上的尋址物理內存的地址信號,是地址變換的最終結果,是實際數據存放的地址。
虛擬地址到物理地址的轉化方法是與體系結構相關的。一般來說,有分段和分頁兩種方式。以X86CPU為例,分段、分頁兩種方式都是支持的。MemoryManagementUnit(內存管理單元,簡稱為MMU)負責從虛擬地址到物理地址的轉化。邏輯地址是段標識+段內偏移量的形式,MMU通過查詢段表,可以把邏輯地址轉化為線性地址。如果CPU沒有開啟分頁功能,那么線性地址就是物理地址;如果CPU開啟了分頁功能,MMU還需要查詢頁表來將線性地址轉化為物理地址:邏輯地址→(段表)→線性地址-(頁表)→物理地址。
不同的邏輯地址可以映射到同一個線性地址上;不同的線性地址也可以映射到同一個物理地址上;所以,這是一種多對一的關系。另外,同一個線性地址,在發生換頁以后,也可能被重新裝載到另外一個物理地址上。所以,這種多對一的映射關系也會隨時間發生變化。
分段機制就是把虛擬地址空間中的虛擬內存組織成一些長度可變的稱為段的內存塊單元。分頁機制把線性地址空間和物理地址空間分別劃分為大小相同的塊,這樣的塊稱為頁。通過在線性地址空間的頁與物理地址空間的頁之間建立的映射,分頁機制實現線性地址到物理地址的轉換。
通過以上的分析可知,選項A是正確的。23.
在段頁式存儲管理系統中其虛擬地址空間是______的。
(分數:2.00)
A.一維
B.二維
C.三維
√
D.四維解析:24.
在虛擬存儲系統中,若進程在內存中占3塊(開始時為空),采用先進先出頁面淘汰算法,當執行訪問頁號序列為1、2、3、4、1、2、5、1、2、3、4、5、6時,將產生缺頁中斷的次數是______。
(分數:2.00)
A.10
√
B.9
C.8
D.7解析:在地址映射過程中,如果在頁面中發現所要訪問的頁面不在內存中,則產生缺頁中斷。當發生缺頁中斷時,操作系統必須在內存中選擇一個頁面將其移出內存,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫作頁面置換算法,也稱為頁面淘汰算法。
先進先出頁面淘汰算法簡稱FIFO(FirstInFirstOut)算法,該算法實現時,置換出最早進入內存的頁面,即在內存中駐留時間最久的頁面。該算法實現簡單,只需把調入內存的頁面根據先后次序鏈接成隊列,設置一個指針總指向最早的頁面。
本題中,置換過程如下:
1)訪問1,缺頁,調入1,內存中為1。
2)訪問2,缺頁,調入2,內存中為1,2。
3)訪問3,缺頁,調入3,內存中為1,2,3。
4)訪問4,缺頁,調入4,淘汰1,內存中為2,3,4。
5)訪問1,缺頁,調入1,淘汰2,內存中為3,4,1。
6)訪問2,缺頁,調入2,淘汰3,內存中為4,1,2。
7)訪問5,缺頁,調入5,淘汰4,內存中為1,2,5。
8)訪問1,不缺頁,內存中為1,2,5。
9)訪問2,不缺頁,內存中為1,2,5。
10)訪問3,缺頁,調入3,淘汰1,內存中為2,5,3。
11)訪問4,缺頁,調入4,淘汰2,內存中為5,3,4。
12)訪問5,不缺頁,內存中為5,3,4。
13)訪問6,缺頁,調入6,淘汰3,內存中為3,4,6。
所以,一共產生了10次缺頁。因此,選項A正確。25.
函數的局部變量所需存儲空間是在______分配的。
(分數:2.00)
A.進程的數據段
B.進程的棧上
√
C.進程的堆上
D.以上都可以解析:一個C/C++編譯的程序所占用的系統內存一般分為代碼段、數據段、BBS段、堆和棧。
1)代碼段(CodeSegment/TextSegment):代碼段有時候也叫文本段,通常是指用來存放程序執行代碼(包括類成員函數和全局函數以及其他函數代碼)的一塊內存區域,這部分區域的大小在程序運行前就已經確定,并且內存區域通常是只讀,某些架構也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數變量,例如字符串常量。這個段一般是可以被共享的,比如在Linux操作系統中打開了2個Vi來編輯文本,那么一般來說,這兩個Vi是共享一個代碼段的。
2)數據段(DataSegment):數據段通常是指用來存放程序中己初始化的全局變量的一塊內存區域。數據段也屬于靜態內存分配。因此,BBS段與數據段都屬于靜態區(全局區)。
3)符號起始的區塊(BlockStartedbySymbol,BSS)段:BSS段通常是指用來存放程序中未初始化的全局數據和靜態數據的一塊內存區域。BSS段屬于靜態內存分配,程序結束后靜態變量資源由系統自動釋放。
4)堆(Heap):堆是用于存放進程運行中被動態分配的內存段,它的大小并不固定,可動態擴張或縮減。當進程調用malloc或new等函數分配內存時,新分配的內存就被動態添加到堆上(堆被擴張),當利用free或delete等函數釋放內存時,被釋放的內存從堆中被刪除(堆被縮減)。堆一般由程序員分配釋放,如果程序員自己不釋放,在程序結束時,該塊內存空間可能會由操作系統回收。需要注意的是,它與數據結構中的堆是兩回事,分配方式類似于鏈表。
5)棧(Stack):棧上存放的是用戶臨時創建的局部變量,一般包括函數括弧“{}”中定義的變量(但不包括static聲明的變量,static意味著在數據段中存放變量)。除此之外,在函數被調用時,其參數也會被壓入發起調用的進程棧中,并且等到調用結束后,函數的返回值也會被存放回棧中。棧由編譯器自動分配釋放,存放函數的參數值、局部變量的值等。其操作方式類似于數據結構中的棧。棧內存分配運算內置于處理器的指令集中,一般使用寄存器來存取,效率很高,但是分配的內存容量有限。
通過上述描述可知,選項B正確。26.
靜態局部變量存儲在進程的______。
(分數:2.00)
A.棧區
B.寄存器區
C.代碼區
D.全局區
√解析:27.
當在CPU內存之間進行地址轉換時,______將地址從虛擬(邏輯)地址空間映射到物理地址空間。
(分數:2.00)
A.TCB
B.MMU
√
C.CACHE
D.DMA解析:本題中,對于選項A,TCB是TIaastedComputingBase的簡稱,指的是計算機內保護裝置的總體,包括硬件、固件、軟件和負責執行安全策略的組合體。它建立了一個基本的保護環境并提供一個可信計算機系統所要求的附加用戶服務。所以,選項A錯誤。
對于選項B,MMU是MemoryManagementUnit的縮寫,即內存管理單元,它用來管理虛擬存儲器、物理存儲器的控制線路,同時也負責虛擬地址映射為物理地址,以及提供硬件機制的內存訪問授權。所以,選項B正確。
對于選項C,CACHE是指介于中央處理器和主存儲器之間的高速小容量存儲器。所以,選項C錯誤。
對于選項D,DMA(DirectMemoryAccess,直接內存存取)指的是一種高速的數據傳輸操作,允許在外部設備和存儲器之間直接讀寫數據,既不通過CPU,也不需要CPU干預。所以,選項D錯誤。
通過上面的分析可知,MMU可以將地址從虛擬(邏輯)地址空間映射到物理地址空間。所以,選項B正確。28.
以下不是內核對象的是______。
(分數:2.00)
A.進程
B.線程
C.互斥器
D.臨界區
√解析:一個內核對象就是在系統堆中占據一塊空間的結構體。不同種類的內核對象用來管理操作系統中不同的資源,例如進程、線程和文件等。所有內核對象都會保存該對象的引用計數,進程對象會保存進程ID,文件對象會保存當前字節偏移量、共享模式和打開模式等。操作系統中所有內核對象都是保存在一塊內存空間中的,系統上所有的進程都共享這一塊內存空間。
每個進程中訪問臨界資源的那段程序稱為臨界區(臨界資源是一次僅允許一個進程使用的共享資源)。每次只允許一個進程進入臨界區,進入后不允許其他進程進入。
互斥對象是一種最簡單的內核對象,用它可以方便地實現對某一資源的互斥訪問。而臨界區并不是內核對象,而是系統提供的一種數據結構,程序中可以聲明一個該類型變量,之后用它來實現對資源的互斥訪問。當希望訪問某一臨界資源時,先將該臨界區加鎖(如果臨界區不空閑,則等待),用完該資源后,將臨界區釋放。29.
在一個請求頁式存儲管理中,一個程序的頁面走向為3、4、2、1、4、5、3、4、5、1、2,并采用LRU算法。設分配給該程序的存儲塊數S分別為______和______,在該訪問中發生的缺頁次數F是______。
(分數:2.00)
A.S=3,F=6;S=4,F=5
B.S=3,F=7;S=4,F=6
C.S=3,F=8;S=4,F=5
D.S=3,F=8;S=4,F=7
√解析:LRU計算的缺頁情況見表1和表2。表1LRU計算的缺頁情況133342l45345
4421453451
214534512缺頁缺頁缺頁缺頁
缺頁缺頁
缺頁缺頁缺頁次數8次。表2LRU計算的缺頁情況233333211134
4442145345
221453451
14534512缺頁缺頁缺頁缺頁
缺頁缺頁
缺頁
缺頁次數7次。所以,選項D正確。30.
操作系統采用分頁式存儲管理中,要求______。
(分數:2.00)
A.每個進程擁有一張頁表,且進程的頁表駐留在內存中
√
B.每個進程擁有一張頁表,但只要執行進程的頁表駐留在內存中,其他進程的頁表不必駐留在內存中
C.所有進程共享一張頁表,以節約有限的內存空間,但頁表必須駐留在內存中
D.所有進程共享一張頁表,只有頁表中當前使用的頁面必須駐留在內存中,以最大限度地節約有限的內存空間解析:頁式存儲管理的特征是等分內存,它解決了外碎片(大量信息由于先后寫入、置換、刪除而形成的空間碎片)問題。段式存儲管理的特征是邏輯分段,便于實現共享和保護。為了保持頁式和段式上的優點,結合兩種存儲管理方案,形成了段頁式存儲管理。本題中,在分頁系統中,為每個進程都配置一張頁表,進程邏輯地址空間中的每一頁在頁表中都有一個頁表項。所以,選項A正確。31.
在虛擬分頁存儲管理系統中,若進程訪問的頁面不在主存,且主存中沒有可用的空閑塊時,系統正確的處理順序是______。
(分數:2.00)
A.決定淘汰頁—>頁面調出—>缺頁中斷—>頁面調入
B.決定淘汰頁—>頁面調入—>缺頁中斷—>頁面調出
C.缺頁中斷—>決定淘汰頁—>頁面調出—>頁面調入
√
D.缺頁中斷—>決定淘汰頁—>頁面調入—>頁面調出解析:虛擬分頁存儲管理的步驟如下:
1)首先,在程序運行中發現所需要的頁不在物理內存時,此時會發出缺頁中斷,并根據算法決定淘汰哪些頁。
2)然后,把物理內存中的淘汰頁存儲到外存,此過程被稱為頁面調出。
3)最后,把需要的內容從外存調入物理內存指定頁,此過程被稱為頁面調入。
其實,操作系統就像一輛公交車,只有舊乘客先下來,新乘客才能上去,所以,頁面調出為先,頁面調入在后。而在頁面調出前,必須要存在著缺頁中斷,而且已經決定了哪些頁面需要調出才行。
所以,完整的過程應該是缺頁中斷—>決定淘汰頁—>頁面調出—>頁面調入,選項C正確。二、多項選擇題(總題數:10,分數:0.00)1.
下面函數調用必須進入內核才能完成的是______。
(分數:2.00)
A.fopen
√
B.exit
√
C.memcpy
D.strlen解析:對于選項A,fopen是打開文件的函數,文件也可以看成是一個設備,打開一個設備將導致給設備所屬的驅動程序發送一個IRP(I/ORequestPacket,輸入/輸出請求包),而與真實硬件相關的驅動程序都運行于內核。所以,選項A正確。
對于選項B,exit函數是結束進程的函數,結束進程需要訪問PCB(ProcessControlBlock,進程控制塊)和TCB(ThreadControlBlock,線程控制塊)等一些數據結構,而這些數據都存在于內核中。所以,選項B正確。
對于選項C,memcpy是C/C++語言中的內存復制函數,功能是從源src所指的內存地址的起始位置開始復制n個字節到目標dest所指的內存地址的起始位置中。它不必進入內核就可以完成。所以,選項C錯誤。
對于選項D,strlen函數的功能是求字符串的實際長度,即從內存的某個位置(可以是字符串開頭、中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到遇到第一個字符串結束符“\0”為止,然后返回計數器值(長度不包含“\0”)。它不必進入內核就可以完成。所以,選項D錯誤。
所以,本題的答案為AB。2.
下列中斷屬于強迫性中斷的是______。
(分數:2.00)
A.掉電
√
B.設備出錯
√
C.時間片到時
D.執行print語句
√解析:中斷源一般可分為兩類:強迫性中斷和自愿性中斷。強迫性中斷由隨機事件引起而非程序員事先安排,包括輸入/輸出中斷、硬件故障中斷、時鐘中斷、控制臺中斷和程序性中斷。設備出錯、執行print語句屬于其中的輸入/輸出中斷;斷電屬于硬件故障中斷。時間片到時屬于自愿性中斷。
所以,選項A、選項B、選項D正確。3.
在競態條件(Racecondition)的情況下,兩個線程執行如下代碼段,其中count為共享變量,線程1執行代碼段A,線程2指向代碼段B,那么變量count的值可能為______。
intcount=10;
代碼段A:
Thread_1()
{
//dosomething
count++;
}
代碼段B:
Thread_2()
{
//dosomething
count--;
}
(分數:2.00)
A.9
√
B.10
√
C.11
√
D.12解析:如果兩個或兩個以上的線程同時訪問相同的對象,或者訪問不同步的共享狀態,就會出現競態條件。競態條件是一個在設備或者系統試圖同時執行兩個操作的時候出現的不希望的狀況,但是由于設備和系統的自然特性,為了正確地執行,操作必須按照合適順序進行。
本題中,線程Thread_1讀取count(10),進行遞增操作,還未寫回新值1(11)時,線程Thread_2讀取count舊值(10),進行遞減操作得到新值2(9),當寫回時,若新值1覆蓋新值2,則得到count=11,若新值2覆蓋新值1,則得到count=9。若count++和count--順序執行,則得到正常值10。
需要注意的是,競態條件的出錯概率非常小,只有非常快速或者非常運氣不好時才會出現,在幾百萬次運行中也很少遇到一次,所以,很難調試出來。
所以,本題的答案為ABC。4.
選擇排隊作業中等待時間最長的作業優先調度,該調度算法可能不是______。
(分數:2.00)
A.先來先服務調度算法
√
B.高響應比優先調度算法
C.優先權調度算法
D.短作業優先調度算法
√解析:5.
在Unix操作系統中,可以用于進程間通信的是______。
(分數:2.00)
A.Socket
√
B.共享內存
√
C.消息隊列
√
D.信號量
√解析:進程間的通信方式主要有如下幾種:管道、信號、消息隊列、共享內存、內存映射、信號量和套接字(Socket)。所以,本題的答案為ABCD。6.
下面描述中,屬于Linux系統進程間通信機制的有______。
(分數:2.00)
A.管道
√
B.信號量
√
C.信號
√
D.套接字
√解析:7.
進程內的線程可以共享以下哪些資源______。
(分數:2.00)
A.stack
B.datasection
√
C.registerset
D.filefd
√解析:線程是指程序在執行過程中,能夠執行程序代碼的一個執行單元。
進程是指一段正在執行的程序。而線程有時候也被稱為輕量級進程,是程序執行的最小單元,一個進程可以擁有多個線程,各個線程之間共享程序的內存空間(代碼段、數據段和堆空間)及一些進程級的資源(例如打開的文件),但是各個線程擁有自己的棧空間,進程與線程的關系如圖所示。
進程與線程的關系
具體而言,線程共享的內容包括代碼段、數據段、堆空間、進程打開的文件描述符、進程的當前目錄以及進程的用戶ID和組ID。
線程獨占的資源包括棧、線程ID、寄存器的值、錯誤返回碼以及線程的信號屏蔽碼。具體內容如下:
(1)線程ID
每個線程都有自己的線程ID,這個ID在本進程中是唯一的。進程用此來標識線程。
(2)線程的棧
棧是保證線程獨立運行所必需的。線程函數可以調用函數,而被調用函數中又是可以層層嵌套的,所以,線程必須擁有自己的函數棧,使得函數調用可以正常執行,不受其他線程的影響。
(3)錯誤返回碼
不同的線程應該擁有自己的錯誤返回碼變量。
(4)線程的信號屏蔽碼
由于每個線程所感興趣的信號不同,所以,線程的信號屏蔽碼應該由線程自己管理,但所有的線程都共享同樣的信號處理器。
(5)線程的優先級
由于線程需要像進程那樣能夠被調度,那么就必須要有可供調度使用的參數,這個參數就是線程。
所以,選項B與選項D正確,選項A與選項C錯誤。8.
兩個線程運行在雙核機器上,每個線程主線程如下,線程1:x=1;r1=y;,線程2:y=1;r2=x;,x和y是全局變量,初始都為0。r1和r2的可能值是______。
(分數:2.00)
A.r1=1,r2=1
√
B.r1=1,r2=0
√
C.r1=0,r2=0
D.r1=0,r2=1
√解析:本題中,兩個線程運行在雙核機器上,沒有設置臨界區,所以,無法保證執行的正確性,而線程1與線程2在執行的過程中,先后順序是不可控的,可能存在著以下三種情況:
1)首先執行x=1,然后執行y=1,接著執行r1=y,即r1=1,最后執行r2=x,即r2=1。所以,r1=1,r2=1。因此,選項A正確。
2)首先執行y=1,然后執行r2=x,此時x的值為初始值0,所以,r2=0,接著執行x=1,最后執行r1=y,而y的值為1,所以,r1=1。因此,選項B正確。
3)首先執行x=1,然后執行r1=y,此時y的值為初始值0,所以,r1=0,接著執行y=1,最后執行r2=x,而x的值為1,所以,r2=1。因此,選項D正確。
所以,本題的答案為ABD。9.
以下關于減少換頁的方法描述中,錯誤的有______。
(分數:2.00)
A.進程傾向于占用CPU
√
B.訪問局部性(LocalityofReference)滿足進程要求
C.進程傾向于占用I/O
√
D.使用基于最短剩余時間(ShottestRemainingTime)的調度機制解析:換頁錯誤又叫作缺頁中斷。在操作系統上的每個進程都有一段自己的獨立虛擬內存空間,但這些虛擬內存并不是完全映射到物理內存上的。當一個程序試圖訪問沒有映射到物理內存的地方時,就會出現缺頁中斷,這時操作系統要做的是將這段虛擬內存映射到物理內存上,使其真正“可用”。
減少換頁錯誤的方法,即降低缺頁中斷率,通常可以在以下幾個方面做工作:
1)頁面大小。頁面劃分的越大,中斷率就會越低。
2)內存頁框數。增加作業可用的內存塊數可以減少換頁。
3)替換算法的好壞也會影響缺頁中斷的次數。
4)程序局部性,有良好局部性的程序也會有較少的換頁次數。
本題中,強調的是減少換頁錯誤,而非消除換頁錯誤,所以,選項A與選項C的描述不正確,選項B的描述正確。
對于選項D,由于剩余時間短的任務執行時間短,需要換頁的概率也低,所以選項D的描述正確。
所以,本題的答案為AC。10.
以下關于Linux操作系統內存的描述中,正確的有______。
(分數:2.00)
A.32位機器,單個進程能使用的最大用戶態地址空間理論上不大于3GB
√
B.若一臺機器的物理內存為2GB,則在該機器上同時運行的進程A和進程B所占物理內存之和有可能大于2GB
√
C.進程A是在Linux系統運行的一個用C語言編寫的程序,如果在A中用malloc函數成功申請了1GB內存,則此時該進程必定至少占用了1GB的物理內存
D.32位機器,Linux操作系統內存管理以“頁”為基本單位,每頁的大小固定為4KB
√解析:對于選項A,在32位機器上,32位意味著4GB的尋址空間(備注:計算機的地址總線是32位,可以支持的內存地址代碼是2^32=4*2^10*2^10*2^10B=4GB),Linux操作系統把它分為兩部分:最高的1GB(虛擬地址從0xC0000000到0xffffffff)用作內核本身,稱為“系統空間”,而較低的3GB字節(從0x00000000到0xbffffff)用作各進程的“用戶空間”。這樣,理論上每個進程可以使用的用戶空間都是3GB。當然,實際的空間大小受物理存儲器大小的限制。雖然各個進程擁有其自己的3GB用戶空間,系統空間卻由所有的進程共享。從具體進程的角度看,每個進程都擁有4GB的虛擬空間,較低的3GB為自己的用戶空間,最高的1GB為所有進程以及內核共享的系統空間。因此,選項A正確。
對于選項B,進程A和B都有自己的虛擬地址,程序在運行的一個特定的時候并不會把所有需要的數據都加載到內存中,當前不使用的數據會被置換到硬盤上,只有在使用的時候才會被置換到內存中。因此,兩個進程所占的物理存儲之和完全有可能大于2GB。例如當進程A和B同時運行的時候,都只有部分數據被加載到內存中,假設在某一時刻A和B進程占用內存之和為2GB,如果此時A所需的數據不在內存中,此時系統采用特定的算法把進程A與B當前可能不使用的數據置換到硬盤上。因此,選項B正確。
對于選項C,malloc申請的只是虛擬的內存空間,實際對應的數據有可能已經被加載到內存中,也有可能被置換到硬盤上了。因此,選項C錯誤。
對于選項D,Linux操作系統采用頁作為內存管理的基本單位,其采用的標準的頁面大小為4KB。為什么是4KB呢?因為4KB是大多數磁盤塊大小的倍數,傳輸效率高,管理方便,無須考慮PAE(物理地址擴展)。因此,選項D正確。
所以,本題的答案為ABD。三、論述題(總題數:8,分數:0.00)1.
輪詢任務調度和可搶占式調度有什么區別?
(分數:2.00)__________________________________________________________________________________________
正確答案:(在多任務系統中,在同一時刻通常會有多個任務處于活動狀態,操作系統此時就需要對資源進行管理,在任務間實現資源(CPU、內存等)的共享。任務調度是指基于給定時間點、給定時間間隔或者給定執行次數自動執行任務。輪詢任務調度與搶占式任務調度的區別在于搶占式調度中優先級高的任務可以搶占CPU,而輪詢的不能。
具體而言,輪詢調度的原理是每一次把來自用戶的請求輪流分配給內部服務器,從1開始,直到N(內部服務器個數),然后重新開始循環。只有在當前任務主動放棄CPU控制權的情況下(比如任務掛起),才允許其他任務(包括高優先級的任務)控制CPU。其優點是簡潔性,它無須記錄當前所有連接的狀態,所以,它是一種無狀態調度,但缺點是不利于后面的請求及時得到響應。搶占式調度允許高優先級的任務打斷當前執行的任務,搶占CPU的控制權。這有利于后面的高優先級的任務也能及時得到響應。但實現相對較復雜,并且可能出現低優先級的任務長期得不到調度。)解析:2.
在MMO游戲中,服務器采用Linux操作系統,網絡通信與游戲邏輯處理進程一般是分離的。例如,GameSvr進程處理游戲邏輯,TCPSvr進程處理網絡通信。Linux操作系統提供了很多機制可以實現GameSvr和TCPSvr進程之間的數據通信。請列出兩種你認為最好的機制,并為主(最好)次(次佳)描述它們實現的框架、優缺點對比和應用中的注意事項。
(分數:4.00)__________________________________________________________________________________________
正確答案:(系統進程之間通信的主要方法有信號、信號量、管道、消息和共享內存。信號量和信號主要用于觸發,而不是用于傳遞數據。所以,數據通信的主要方法是管道、消息和共享內存,以下將分別對這些方式進行具體分析。
(1)管道
管道是由內核管理的一個環形緩沖區,類似于放入內存中的一個紙條,它允許兩個進程以生產者/消費者的模型進行通信。如圖所示,當兩個進程利用管道文件進行通信時,一個進程為寫進程,另一個進程為讀進程,寫進程通過寫端(發送端)往管道文件中寫入信息,讀進程通過讀端(接收端)從管道文件中讀取信息,兩個進程協調不斷地進行寫、讀,便會構成雙方通過管道傳遞信息的流水線。當管道中沒有信息時,從管道中讀取的進程會等待,直到另一端的進程放入信息。當管道被放滿信息時,嘗試放入信息的進程會等待,直到另一端的進程取出信息。當兩個進程都終結的時候,管道也自動消失。
管道通信
管道的優點是不需要加鎖,缺點是默認緩沖區太小,只有4K大小,而且它只適合父子進程間通信。由于一個管道只適合單向通信,如果要雙向通信,就需要建立兩個管道,所以,它不適合多個子進程。除此以外,數據本身沒有邊界,需要應用程序自己解釋,而一般消息大多是一個固定長的消息頭,和一個變長的消息體,一個子進程從管道read到消息頭后,消息體可能被其他子進程接收到。
(2)消息
消息是有類型的一段文本。為參與消息傳遞的進程提供msgsnd(用來向消息隊列發送消息)和msgrcv(用來從消息隊列中讀取消息)系統調用。每個進程都有一個與之相關聯的消息隊列,其功能類似于信箱。消息發送者指定發送的每個消息的類型,類型可以被接收者用作選擇的依據。接收者可以按先進先出的順序接收信息,或者按類型接收。當進程試圖給一個滿隊列發送信息時,它將被阻塞;當進程試圖從一個空隊列讀取時也會被阻塞;如果一個進程試圖讀取某一特定類型的消息,但由于現在還沒有這種類型的消息而失敗時,則該進程不會阻塞。
消息隊列能適合大部分場景,缺點是默認緩沖比較小,不過這個緩沖區可以調整,前提是具有管理員權限。
(3)共享內存
共享內存是分配一塊能被其他進程訪問的內存,實現是通過將內存映射到共享它的進程的地址空間,使這些進程間的數據傳送不再涉及內核,即進程問通信不需要通過進入內核的系統調用來實現。進程讀寫共享內存所使用的機器指令與讀寫虛擬內存空間的其他部分所使用的指令相同。每個進程有一個只讀或讀寫的權限。互斥約束不屬于共享內存機制的一部分,但必須由使用共享內存的進程提供。共享內存幾乎可以認為沒有上限;它也是不局限于父子進程,采用與消息隊列類似的定位方式;因為內存是共享的,不存在任何單向的限制;最大的問題就是需要應用程序自己實現互斥。
相比其他的進程間通信方式,共享內存的最大優點是:數據的賦值只有兩次,一次是從輸入文件到共享內存區,一次是從共享內存區到輸出文件,而其他的則需要復制4次:服務器將輸入文件讀入自己的進程空間,再從自己的進程空間寫入管道/消息隊列等;客戶進程從管道/消息隊列中讀出數據到自己的進程空間,最后輸出到客戶指定的文件中。因此,相比管道和消息隊列,共享內存是最快的進程問的通信方式,因為它不涉及與內存的交互,所以,其效率更高。)解析:3.
線程與進程的區別和聯系分別是什么?線程是否具有相同的堆棧?DLL是否具有獨立的堆棧?
(分數:2.00)__________________________________________________________________________________________
正確答案:(進程是死的,只是一些資源的集合,真正的程序執行都是線程來完成的,程序啟動的時候操作系統創建了一個主線程,每個線程有自己的堆棧。DLL(DynamicLinkLibrary,動態鏈接庫)中是否具有獨立的堆棧,這個問題不好回答,或者說這個問題本身就有問題。因為DLL中的代碼是被某些線程所執行,只有線程擁有堆棧,如果DLL中的代碼是由EXE中的線程所調用,那么這個時候是不是說這個DLL沒有自己獨立的堆棧呢?如果DLL中的代碼是由DLL自己創建的線程所執行,那么是不是說DLL有獨立的堆棧呢?以上講的是堆棧,如果對于堆來說,每個DLL有自己的堆,所以,如果是從DLL中動態分配的內存,最好是從DLL中刪除;如果是從DLL中分配內存,然后在EXE中,或者另外一個DLL中刪除,很有可能導致程序崩潰。)解析:4.
程序什么時候應該使用線程?
(分數:2.00)__________________________________________________________________________________________
正確答案:(程序在以下幾種情況下使用線程:
1)耗時的操作使用線程,提高應用程序響應效率。
2)并行操作時使用線程,例如基于C/S架構的服務器端并發線程響應用戶的請求。
3)在多CPU系統中,使用線程提高CPU利用率。
4)改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。)解析:5.
請回答以下關于進程、線程以及程序的有關問題。
1)進程和線程的區別是什么?
2)多線程程序有什么優點與缺點?
3)多進程程序有什么優點與缺點?與多線程相比,有什么區別?
(分數:2.00)__________________________________________________________________________________________
正確答案:(1)進程和線程的關系如下:
①一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。
②資源分配給進程,同一進程的所有線程共享該進程的資源。
③處理機分給線程,即真正在處理機上運行的是線程。
④線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。線程指的是進程內的一個執行單元,也是進程內的可調度實體。
進程和線程的相同點如下:
①二者都具有ID、一組寄存器、狀態、優先級以及所要遵循的調度策略。
②每個進程都有一個進程控制塊,線程也擁有一個線程控制塊。
③線程和子進程共享父進程中的資源;線程和子進程獨立于它們的父進程,競爭使用處理器資源;線程和子進程的創建者可以在線程和子進程上實行某些控制,例如創建者可以取消、掛起、繼續和修改線程和子進程的優先級;線程和子進程可以改變其屬性并創建新的資源。
進程和線程的不同點如下:
①線程是進程的一部分,一個沒有線程的進程是可以被看作單線程的,如果一個進程內擁有多個線程,進程的執行過程不是一條線(線程)的,而是多條線(線程)共同完成的。
②啟動一個線程所花費的空間遠遠小于啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小于進程間切換所需要的時間。
③系統在運行的時候會為每個進程分配不同的內存區域,但是不會為線程分配內存(線程所使用的資源是它所屬的進程的資源),同一個進程內的線程可以共享進程的資源。對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞只能通過通信的方式進行,這種方式不僅費時,而且很不方便。而一個線程的數據可以直接為其他線程所用,這不僅快捷,而且方便。
④與進程的控制表PCB相似,線程也有自己的控制表TCB,但是TCB中所保存的線程狀態比PCB表中少多了。
⑤進程是系統所有資源分配時候的一個基本單位,擁有一個完整的虛擬空間地址,并不依賴線程而獨立存在。
2)多線程的優點如下:
無須跨進程邊界;程序邏輯和控制方式簡單;所有線程可以直接共享內存和變量等;線程方式消耗的總資源比進程方式少。
多線程的缺點如下:
每個線程與主程序共用地址空間,受限于2GB地址空間;線程之間的同步和加鎖控制比較麻煩;一個線程的崩潰可能影響到整個程序的穩定性;到達一定的線程數程度后,即使再增加CPU也無法提高性能,例如WindowsServer2003,大約1500個線程數就快到極限了(線程堆棧設定為1M),如果設定線程堆棧為2M,還達不到1500個線程總數;線程能夠提高的總性能有限,而且線程多了之
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年北京購房貸款合同范本
- 臨床糖尿病合并高血壓患者管理指南核心要點
- 2025湖北宜昌將提取公積金條款納入勞動合同
- 2025聘請小說作家合同范本
- 2025國際貨物買賣合同協議書范本 詳細版
- 培訓課程匯報
- 油氣裝備行業未來發展趨勢與市場潛力分析
- 鄉村振興產業基地發展規劃研究報告
- 傳感器行業未來發展與市場潛力深度分析
- 廣場及公園安保工作計劃
- UL746A標準中文版-2019聚合材料短期性能評估第六版
- 危險化學品目錄(2024版)
- 2024年裝飾公司員工合同范本
- 患者床頭抬高
- 2024-2025學年第一學期高二教學質量檢測歷史答案
- 2021年1月維修電工高級技師模擬試題及答案卷3
- 2024年學校采購員崗位職責(五篇)
- 藥物臨床試驗儀器設備管理制度
- 基于深度學習的小學數學跨學科主題探究
- 2024年全國統一高考數學試卷(新高考Ⅱ)含答案
- DB65-T 4828-2024 和田玉(子料)鑒定
評論
0/150
提交評論