計算機作業系統(第3版)課後習題答案(完整版)
第一章
1.設計現代OS的主要目標是什麼?
答:(1)有效性 (2)方便性 (3)可擴充性 (4)開放性
2.OS的作用可表現在哪幾個方面?
答:(1)OS作為使用者與計算機硬體系統之間的介面
(2)OS作為計算機系統資源的管理者
(3)OS實現了對計算機資源的抽象
3.為什麼說OS實現了對計算機資源的抽象?
答:OS首先在裸機上覆蓋一層I/O裝置管理軟體,實現了對計算機硬體操作的第一層次抽
象;在第一層軟體上再覆蓋檔案管理軟體,實現了對硬體資源操作的第二層次抽象。OS 通
過在計算機硬體上安裝多層系統軟體,增強了系統功能,隱藏了對硬體操作的細節,由它們
共同實現了對計算機資源的抽象。
4.試說明推動多道批處理系統形成和發展的主要動力是什麼?
答:主要動力來源於四個方面的社會需求與技術發展:
(1)不斷提高計算機資源的利用率;
(2)方便使用者;
(3)器件的不斷更新換代;
(4)計算機體系結構的不斷髮展。
5.何謂離線I/O和聯機I/O?
答:離線I/O 是指事先將裝有使用者程式和資料的紙帶或卡片裝入紙帶輸入機或卡片機,在
外圍機的控制下,把紙帶或卡片上的資料或程式輸入到磁帶上。該方式下的輸入輸出由外圍
機控制完成,是在脫離主機的情況下進行的。
而聯機I/O方式是指程式和資料的輸入輸出都是在主機的直接控制下進行的。
6.試說明推動分時系統形成和發展的主要動力是什麼?
答:推動分時系統形成和發展的主要動力是更好地滿足使用者的需要。主要表現在:CPU 的
分時使用縮短了作業的平均週轉時間;人機互動能力使使用者能直接控制自己的作業;主機的
共享使多使用者能同時使用同一臺計算機,獨立地處理自己的作業。
7.實現分時系統的關鍵問題是什麼?應如何解決?
答:關鍵問題是當用戶在自己的終端上鍵入命令時,系統應能及時接收並及時處理該命令,
在使用者能接受的時延內將結果返回給使用者。
解決方法:針對及時接收問題,可以在系統中設定多路卡,使主機能同時接收使用者從各個終
端上輸入的資料;為每個終端配置緩衝區,暫存使用者鍵入的命令或資料。針對及時處理問題,
應使所有的使用者作業都直接進入記憶體,並且為每個作業分配一個時間片,允許作業只在自己
的時間片內執行,這樣在不長的時間內,能使每個作業都執行一次。
8.為什麼要引入實時OS?
答:實時作業系統是指系統能及時響應外部事件的請求,在規定的時間內完成對該事件的處
理,並控制所有實時任務協調一致地執行。引入實時OS 是為了滿足應用的需求,更好地滿
足實時控制領域和實時資訊處理領域的需要。
9.什麼是硬實時任務和軟實時任務?試舉例說明。
答:硬實時任務是指系統必須滿足任務對截止時間的要求,否則可能出現難以預測的結果。
舉例來說,運載火箭的控制等。
軟實時任務是指它的截止時間並不嚴格,偶爾錯過了任務的截止時間,對系統產生的影
響不大。舉例:網頁內容的更新、火車售票系統。
10.在8位微機和16位微機中,佔據了統治地位的是什麼作業系統?
答:單使用者單任務作業系統,其中最具代表性的是CP/M和MS-DOS.
11.試列出Windows OS中五個主要版本,並說明它們分別較之前一個版本有何改進。
答:
(1)Microsoft Windows 1.0是微軟公司在個人電腦上開發圖形介面的首次嘗試。
(2)Windows 95是混合的16位/32位系統,第一個支援32位。帶來了更強大、更穩
定、更實用的桌面圖形使用者介面,結束了桌面作業系統間的競爭。
(3)Windows 98是微軟公司的混合16位/32位Windows作業系統,改良了硬體標準
的支援,革新了記憶體管理,是多程序作業系統。
(4)Windows XP是基於Windows2000的產品,擁有新使用者圖形介面月神Luna。簡
化了使用者安全特性,整合了防火牆。
(5)Windows Vista 包含了上百種新功能;特別是新版圖形使用者介面和WindowsAero
全新介面風格、加強的搜尋功能(Windows IndexingService)、新媒體創作工具以及重
新設計的網路、音訊、輸出(列印)和顯示子系統。。
12.試從互動性、及時性以及可靠性方面,將分時系統與實時系統進行比較。
答:(1)及時性:實時資訊處理系統對實時性的要求與分時系統類似,都是以人所能接受
的等待時間來確定;而實時控制系統的及時性,是以控制物件所要求的開始截止時間或完成
截止時間來確定的,一般為秒級到毫秒級,甚至有的要低於100微妙。
(2)互動性:實時資訊處理系統具有互動性,但人與系統的互動僅限於訪問系統中某
些特定的專用服務程式。不像分時系統那樣能向終端使用者提供資料和資源共享等服務。
(3)可靠性:分時系統也要求系統可靠,但相比之下,實時系統則要求系統具有高度
的可靠性。因為任何差錯都可能帶來巨大的經濟損失,甚至是災難性後果,所以在實時系統
中,往往都採取了多級容錯措施保障系統的安全性及資料的安全性。
13.OS有哪幾大特徵?其最基本的特徵是什麼?
答:併發性、共享性、虛擬性和非同步性四個基本特徵;最基本的特徵是併發性。
14.處理機管理有哪些主要功能?它們的主要任務是什麼?
答:處理機管理的主要功能是:程序管理、程序同步、程序通訊和處理機排程;
程序管理:為作業建立程序,撤銷已結束程序,控制程序在執行過程中的狀態轉換。
程序同步:為多個程序(含執行緒)的執行______________進行協調。
通訊:用來實現在相互合作的程序之間的資訊交換。
處理機排程:
(1)作業排程。從後備隊裡按照一定的演算法,選出若干個作業,為他們分配執行所需
的資源(首選是分配記憶體)。
(2)程序排程:從程序的就緒佇列中,按照一定演算法選出一個程序,把處理機分配給
它,並設定執行現場,使程序投入執行。
15.記憶體管理有哪些主要功能?他們的主要任務是什麼?
答:記憶體管理的主要功能有:記憶體分配、記憶體保護、地址對映和記憶體擴充。
記憶體分配:為每道程式分配記憶體。
記憶體保護:確保每道使用者程式都只在自己的記憶體空間執行,彼此互不干擾。
地址對映:將地址空間的邏輯地址轉換為記憶體空間與對應的實體地址。
記憶體擴充:用於實現請求呼叫功能,置換功能等。
16.裝置管理有哪些主要功能?其主要任務是什麼?
答:主要功能有: 緩衝管理、裝置分配和裝置處理以及虛擬裝置等。
主要任務: 完成使用者提出的I/O 請求,為使用者分配I/O 裝置;提高CPU 和I/O 設
備的利用率;提高I/O速度;以及方便使用者使用I/O裝置.
17.檔案管理有哪些主要功能?其主要任務是什麼?
答:檔案管理主要功能:檔案儲存空間的管理、目錄管理、檔案的讀/寫管理和保護。
檔案管理的主要任務:管理使用者檔案和系統檔案,方便使用者使用,保證檔案安全性。
18.是什麼原因使作業系統具有非同步性特徵?
答:作業系統的非同步性體現在三個方面:一是程序的非同步性,程序以人們不可預知的速度向
前推進,二是程式的不可再現性,即程式執行的結果有時是不確定的,三是程式執行時間的
不可預知性,即每個程式何時執行,執行順序以及完成時間是不確定的。
19.模組介面法存在哪些問題?可通過什麼樣的途徑來解決?
答:(1)模組介面法存在的問題:①在OS設計時,各模組間的介面規定很難滿足在模組完
成後對介面的實際需求。②在OS 設計階段,設計者必須做出一系列的決定,每一個決定必
須建立在上一個決定的基礎上。但模組化結構設計的各模組設計齊頭並進,無法尋找可靠的
順序,造成各種決定的無序性,使程式設計人員很難做到設計中的每一步決定都建立在可靠
的基礎上,因此模組介面法被稱為“無序模組法”。
(2)解決途徑:將模組介面法的決定順序無序變有序,引入有序分層法。
20.在微核心OS中,為什麼要採用客戶/伺服器模式?
答:C/S 模式具有獨特的優點:⑴資料的分佈處理和儲存。⑵便於集中管理。⑶靈活性和
可擴充性。⑷易於改編應用軟體。
21.試描述什麼是微核心OS。
答:1)足夠小的核心 2)基於客戶/伺服器模式
3)應用機制與策略分離原理 4)採用面向物件技術。
22.在基於微核心結構的OS中,應用了哪些新技術?
答:在基於微核心結構的OS 中,採用面向物件的程式設汁技術。
23.何謂微核心技術?在微核心中通常提供了哪些功能?
答:把作業系統中更多的成分和功能放到更高的層次(即使用者模式)中去執行,而留下一個
儘量小的核心,用它來完成作業系統最基本的核心功能,稱這種技術為微核心技術。在微內
核中通常提供了程序(執行緒)管理、低階儲存器管理、中斷和陷入處理等功能。
24.微核心作業系統具有哪些優點?它為何能有這些優點?
答:1)提高了系統的可擴充套件性
2)增強了系統的可靠性
3)可移植性
4)提供了對分散式系統的支援
5)融入了面向物件技術
第二章
1. 什麼是前趨圖?為什麼要引入前趨圖?
答:前趨圖(Precedence Graph)是一個有向無迴圈圖,記為DAG(DirectedAcyclic
Graph),用於描述程序之間執行的前後關係。
2. 畫出下面四條語句的前趨圖:
S1=a:=x+y; S2=b:=z+1; S3=c:=a – b;S4=w:=c+1;
答:其前趨圖為:
3. 什麼程式併發執行會產生間斷性特徵?
答:程式在併發執行時,由於它們共享系統資源,為完成同一項任務需要相互合作,致使這
些併發執行的程序之間,形成了相互制約關係,從而使得程序在執行期間出現間斷性。
4.程式併發執行時為什麼會失去封閉性和可再現性?
答:程式併發執行時,多個程式共享系統中的各種資源,因而這些資源的狀態由多個程式改
變,致使程式執行失去了封閉性,也會導致其失去可再現性。
5.在作業系統中為什麼要引入程序概念?它會產生什麼樣的影響?
答:為了使程式在多道程式環境下能併發執行,並對併發執行的程式加以控制和描述,在操
作系統中引入了程序概念。
影響: 使程式的併發執行得以實行。
6.試從動態性,併發性和獨立性上比較程序和程式?
答:(1)動態性是程序最基本的特性,表現為由建立而產生,由排程而執行,因得不到資源
而暫停執行,由撤銷而消亡。程序有一定的生命期,而程式只是一組有序的指令集合,是靜
態實體。
(2)併發性是程序的重要特徵,同時也是OS 的重要特徵。引入程序的目的正是為了使
其程式能和其它程序的程式併發執行,而程式是不能併發執行的。
(3)獨立性是指程序實體是一個能獨立執行的基本單位,也是系統中獨立獲得資源和獨
立排程的基本單位。對於未建立任何程序的程式,不能作為獨立單位參加執行。
7.試說明PCB 的作用,為什麼說PCB 是程序存在的惟一標誌?
答:PCB 是程序實體的一部分,是作業系統中最重要的記錄型資料結構。作用是使一個在
多道程式環境下不能獨立執行的程式,成為一個能獨立執行的基本單位,成為能與其它程序
併發執行的程序。OS是根據PCB對併發執行的程序進行控制和管理的。
8.試說明程序在三個基本狀態之間轉換的典型原因。
答: (1)就緒狀態→執行狀態:程序分配到CPU資源
(2)執行狀態→就緒狀態:時間片用完
(3)執行狀態→阻塞狀態:I/O請求
(4)阻塞狀態→就緒狀態:I/O完成
9.為什麼要引入掛起狀態?該狀態有哪些性質?
答:引入掛起狀態處於五種不同的需要: 終端使用者需要,父程序需要,作業系統需要,對換
北京石油化工學院資訊工程學院計算機系5/48
《計算機作業系統》習題參考答案餘有明與計07和計G09的同學們編著 5/48
需要和負荷調節需要。處於掛起狀態的程序不能接收處理機排程。
10.在進行程序切換時,所要儲存的處理機狀態資訊有哪些?
答:進行程序切換時,所要儲存的處理機狀態資訊有:
(1)程序當前暫存資訊
(2)下一指令地址資訊
(3)程序狀態資訊
(4)過程和系統呼叫引數及呼叫地址資訊。
11.試說明引起程序建立的主要事件。
答:引起程序建立的主要事件有:使用者登入、作業排程、提供服務、應用請求。
12.試說明引起程序被撤銷的主要事件。
答:引起程序被撤銷的主要事件有:正常結束、異常結束(越界錯誤、保護錯、非法指令、
特權指令錯、執行超時、等待超時、算術運算錯、I/O 故障)、外界干預(操作員或操作系
統干預、父程序請求、父程序終止)。
13.在建立一個程序時所要完成的主要工作是什麼?
答:
(1)OS 發現請求建立新程序事件後,呼叫程序建立原語Creat();
(2)申請空白PCB;
(3)為新程序分配資源;
(4)初始化程序控制塊;
(5)將新程序插入就緒佇列.
14.在撤銷一個程序時所要完成的主要工作是什麼?
答:
(1)根據被終止程序識別符號,從PCB 集中檢索出程序PCB,讀出該程序狀態。
(2)若被終止程序處於執行狀態,立即終止該程序的執行,置排程標誌真,指示該程序被
終止後重新排程。
(3)若該程序還有子程序,應將所有子孫程序終止,以防它們成為不可控程序。
(4)將被終止程序擁有的全部資源,歸還給父程序,或歸還給系統。
(5)將被終止程序PCB 從所在佇列或列表中移出,等待其它程式蒐集資訊。
15.試說明引起程序阻塞或被喚醒的主要事件是什麼?
答:a. 請求系統服務;b. 啟動某種操作;c. 新資料尚未到達;d. 無新工作可做.
16.程序在執行時存在哪兩種形式的制約?並舉例說明之。
答:
(1)間接相互制約關係。舉例:有兩程序A 和B,如果A 提出列印請求,系統已把唯一的
一臺印表機分配給了程序B,則程序A 只能阻塞;一旦B 釋放印表機,A 才由阻塞改為就
緒。
(2)直接相互制約關係。舉例:有輸入程序A 通過單緩衝向程序B 提供資料。當緩衝空時,
計算程序因不能獲得所需資料而阻塞,當程序A 把資料輸入緩衝區後,便喚醒程序B;反
之,當緩衝區已滿時,程序A 因沒有緩衝區放資料而阻塞,程序B 將緩衝區資料取走後便
喚醒A。
17.為什麼程序在進入臨界區之前應先執行“進入區”程式碼?而在退出前又要執行“退出
區”程式碼?
答:為了實現多個程序對臨界資源的互斥訪問,必須在臨界區前面增加一段用於檢查欲訪問
的臨界資源是否正被訪問的程式碼,如果未被訪問,該程序便可進入臨界區對資源進行訪問,
並設定正被訪問標誌,如果正被訪問,則本程序不能進入臨界區,實現這一功能的程式碼為"
進入區"程式碼;在退出臨界區後,必須執行"退出區"程式碼,用於恢復未被訪問標誌,使其它程序能再訪問此臨界資源。
18. 同步機構應遵循哪些基本準則?為什麼?
答:同步機構應遵循的基本準則是:空閒讓進、忙則等待、有限等待、讓權等待
原因:為實現程序互斥進入自己的臨界區。
19. 試從物理概念上說明記錄型訊號量wait 和signal。
答:wait(S):當S.value>0時,表示目前系統中這類資源還有可用的。執行一次wait 操
作,意味著程序請求一個單位的該類資源,使系統中可供分配的該類資源減少一個,因此描
述為S.value:=S.value-1;當S.value<0時,表示該類資源已分配完畢,程序應呼叫block
原語自我阻塞,放棄處理機,並插入到訊號量連結串列S.L中。
signal(S):執行一次signal操作,意味著釋放一個單位的可用資源,使系統中可供分配
的該類資源數增加一個,故執行S.value:=S.value+1 操作。若加1後S.value≤0,則表
示在該訊號量連結串列中,仍有等待該資源的程序被阻塞,因此應呼叫wakeup 原語,將S.L
連結串列中的第一個等待程序喚醒。
20.你認為整型訊號量機制是否完全遵循了同步機構的四條準則?
答:整型訊號量機制不完全遵循同步機制的四條準則,它不滿足“讓權等待”準則。
21.如何利用訊號量機制來實現多個程序對臨界資源的互斥訪問?並舉例說明之。
答:為使多個程序互斥訪問某臨界資源,只需為該資源設定一互斥訊號量mutex,並設其
初值為1,然後將各程序訪問該資源的臨界區CS置於wait(mutex)和signal(mutex)操作
之間即可。這樣,每個欲訪問該臨界資源的程序在進入臨界區之前,都要先對mutex 執行
wait 操作,若該資源此刻未被訪問,本次wait 操作必然成功,程序便可進入自己的臨界區,
這時若再有其他程序也欲進入自己的臨界區,此時由於對mutex 執行wait操作定會失敗,
因而該程序阻塞,從而保證了該臨界資源能被互斥訪問。當訪問臨界資源的程序退出臨界區
後,應對mutex執行signal 操作,釋放該臨界資源。利用訊號量實現程序互斥的程序描述
如下:
Var mutex: semaphore:=1;
begin
parbegin
process 1: begin
repeat
wait(mutex);
critical section
signal(mutex);
remainder section
until false;
end
process 2: begin
repeat
wait(mutex);
critical section
signal(mutex);
remainder section
until false;
end
parend
22.試寫出相應的程式來描述圖2-17所示的前驅圖。
答:(a)Var a, b, c, d, e, f, g, h; semaphore:= 0, 0,0, 0, 0, 0, 0, 0;
begin
parbegin
begin S1; signal(a); signal(b); end;
begin wait(a); S2; signal(c); signal(d); end;
begin wait(b); S3; signal(e); end;
begin wait(c); S4; signal(f); end;
begin wait(d); S5; signal(g); end;
begin wait(e); S6; signal(h); end;
begin wait(f); wait(g); wait(h); S7; end;
parend
end
(b)Var a, b, c, d, e, f, g, h,i,j; semaphore:= 0,0, 0, 0, 0, 0, 0,0,0, 0;
begin
parbegin
begin S1; signal(a); signal(b); end;
begin wait(a); S2; signal(c); signal(d); end;
begin wait(b); S3; signal(e); signal(f); end;
begin wait(c); S4; signal(g); end;
begin wait(d); S5; signal(h); end;
begin wait(e); S6; signal(i); end;
begin wait(f); S7; signal(j); end;
begin wait(g);wait(h); wait(i); wait(j); S8;end;
parend
end
23.在生產者消費者問題中,如果缺少了signal(full)或signal(empty),對執行結果有何影響?
答:
如果缺少signal(full),那麼表明從第一個生產者程序開始就沒有改變訊號量full 值,
即使緩衝池產品已滿,但full值還是0,這樣消費者程序執行wait(full)時認為緩衝池是空
而取不到產品,消費者程序一直處於等待狀態。
如果缺少signal(empty),在生產者程序向n個緩衝區投滿產品後消費者程序才開始從
中取產品,這時empty=0,full=n,那麼每當消費者程序取走一個產品empty值並不改變,
直到緩衝池取空了,empty 值也是0,即使目前緩衝池有n 個空緩衝區,生產者程序要想
再往緩衝池中投放產品也會因為申請不到空緩衝區被阻塞。
24.在生產消費者問題中,如果將兩個wait操作即wait(full)和wait(mutex)互換位置,
或者將signal(mutex)與signal(full)互換位置,結果如何?
答:將wait(full)和wait(mutex)互換位置後,可能引起死鎖。考慮系統中緩衝區全滿時,
若一生產者程序先執行了wait(mutex)操作並獲得成功,則當再執行wait(empty)操作時,
它將因失敗而進入阻塞狀態,它期待消費者程序執行signal(empty)來喚醒自己,在此之前,
它不可能執行signal(mutex)操作,從而使試圖通過執行wait(mutex)操作而進入自己的臨
界區的其他生產者和所有消費者程序全部進入阻塞狀態,這樣容易引起系統死鎖。
若signal(mutex)和signal(full)互換位置後只是影響程序對臨界資源的釋放次序,而
不會引起系統死鎖,因此可以互換位置。
25.我們在為某一臨界資源設定一把鎖W,當W=1時表示關鎖,當W=0時表示鎖已開啟。
試寫出開鎖和關鎖的原語,並利用他們實現互斥。
答:整型訊號量:lock(W): while W=1 do no-op
W:=1;
unlock(W): W:=0;
記錄型訊號量:lock(W): W:=W+1;
if(W>1) then block(W, L)
unlock(W): W:=W-1;
if(W>0) then wakeup(W, L)
例子:
Var W:semaphore:=0;
begin
repeat
lock(W);
critical section
unlock(W);
remainder section
until false;
end
26.試修改下面生產者-消費者問題解法中的錯誤:
答: producer:
begin
repeat
…
producer an item in nextp;
wait(mutex);
wait(full);
buffer(in):=nextp;
signal(mutex);
until false;
end
consumer:
begin
repeat
wait(mutex);
wait(empty);
nextc:=buffer(out);
out:=out+1;
signal(mutex);
consumer item in nextc;
until false;
end
27.試利用記錄型訊號量寫出一個不會出現死鎖的哲學家進餐問題的演算法.
答:Var chopstick:array[0,…,4] of semaphore;
所有訊號量均被初始化為1,第i 位哲學家的活動可描述為:
Repeat
Wait(chopstick[i]);
Wait(. chopstick[(i+1) mod 5]);
…
Ea.t ;
…
Signal(chopstick[i]);
Signal(chopstick[(i+1) mod 5])
Ea.t ;
…
Think;
Until false;
28.在測量控制系統中的資料採集任務,把所採集的資料送一單緩衝區;計算任務從該單
緩衝中取出資料進行計算.試寫出利用訊號量機制實現兩者共享單緩衝的同步演算法。
答:
a. Var mutex, empty, full: semaphore:=1, 1, 0;
gather:
begin
repeat
……
gather data in nextp;
wait(empty);
wait(mutex);
buffer:=nextp;
signal(mutex);
signal(full);
until false;
end
compute:
begin
repeat
……
wait(full);
wait(mutex);
nextc:=buffer;
signal(mutex);
signal(empty);
compute data in nextc;
until false;
end
b. Var empty, full: semaphore:=1, 0;
gather:
begin
repeat
……
gather data in nextp;
wait(empty);
buffer:=nextp;
signal(full);
until false;
end
compute:
begin
repeat
……
wait(full);
nextc:=buffer;
signal(empty);
compute data in nextc;
until false;
end
29.畫圖說明管程由哪幾部分組成,為什麼要引入條件變數?
答:管程由四部分組成:①管程的名稱;②區域性於管程內部的共享資料結構說明;③對該數
據結構進行操作的一組過程;④對區域性於管程內部的共享資料設定初始值的語句;
當一個程序呼叫了管程,在管程中時被阻塞或掛起,直到阻塞或掛起的原因解除,而在此期
間,如果該程序不釋放管程,則其它程序無法進入管程,被迫長時間地等待。為了解決這個
問題,引入了條件變數condition。
30.如何利用管程來解決生產者與消費者問題?
答:首先建立一個管程,命名為ProclucerConsumer,包括兩個過程:
(1)Put(item)過程。生產者利用該過程將自己生產的產品放到緩衝池,用整型變
量count 表示在緩衝池中已有的產品數目,當count≥n 時,表示緩衝池已滿,生產者須
等待。
(2)get(item)過程。消費者利用該過程從緩衝池中取出一個產品,當count≤0
時,表示緩衝池中已無可取的產品,消費者應等待。
PC 管程可描述如下:
type producer-consumer =monitor
Var in,out,count:integer;
buffer:array[0,…,n-1]of item;
notfull,notempty:condition;
procedure entry dot(item)
begin
if count>=n then not full.wait;
buffer(in):=nextp;
in:=(in+1)mod n;
count:=count+1;
if notempty.queue then notempty.signal;
end
procedure entry get(item)
begin
if count<=0 then not full.wait;
nextc:=buffer(out);
out:=(out+1)mod n;
count:=count-1;
if notfull.quene then notfull.signal;
end
begin in:=out:=0;
count:=0
end
在利用管程解決生產者一消費者問題時,其中的生產者和消費者可描述為:
producer: begin
pepeat
produce an inem in nestp
PC.put(item);
until false;
end
consumer: begin
repeat
PC.get(item);
consume the item in enxtc;
until false;
end
31.什麼是AND訊號量?試利用AND訊號量寫出生產者一消費者問題的解法。
答:為解決並行帶來的死鎖問題,在wait 操作中引入AND 條件,其基本思想是將進
程在整個執行過程中所需要的所有臨界資源,一次性地全部分配給程序,用完後一次性釋放。
解決生產者-消費者問題可描述如下:
var mutex,empty,full: semaphore:=1,n,0;
buffer: array[0,...,n-1] of item;
in,out: integer:=0,0;
begin
parbegin
producer: begin
repeat
…
produce an item in nextp;
…
wait(empty);
wait(s1,s2,s3,...,sn); //s1,s2,...,sn為執行生產者程序除empty外其餘的條件
wait(mutex);
buffer(in):=nextp;
in:=(in+1) mod n;
signal(mutex);
signal(full);
signal(s1,s2,s3,...,sn);
until false;
end
consumer: begin
repeat
wait(full);
wait(k1,k2,k3,...,kn); //k1,k2,...,kn 為執行消費者程序除full外其餘的條件
wait(mutex);
nextc:=buffer(out);
out:=(out+1) mod n;
signal(mutex);
signal(empty);
signal(k1,k2,k3,...,kn);
consume the item in nextc;
until false;
end
parend
end
32.什麼是訊號量集?試利用訊號量集寫出讀者一寫者問題的解法。
答:對AND訊號量加以擴充,形成的訊號量集合的讀寫機制。
解法:Var RN integer;
L,mx: semaphore:=RN,1;
begin
parbegin
reader:begin
repeat
Swait(L,1,1);
Swait(mx,1,1);
…
perform read operation;
…
Ssignal(L,1);
until false
end
writer:begin
repeat
Swait(mx,1,1;L,RN,0);
perform write operation;
Ssignal(mx,1);
until false
end
parend
end
33.試比較程序間的低階與高階通訊工具。
答:使用者用低階通訊工具實現程序通訊很不方便,效率低,通訊對使用者不透明,所有操作都
必須由程式設計師來實現,而高階通訊工具彌補了這些缺陷,使用者直接利用作業系統提供的一組
通訊命令,高效地傳送大量的資料。
34.當前有哪幾種高階通訊機制?
答:共享儲存器系統、訊息傳遞系統以及管道通訊系統。
35.訊息佇列通訊機制有哪幾方面的功能?
答:(1)構成訊息(2)傳送訊息(3)接收梢息(4)互斥與同步。
36.為什麼要在OS 中引入執行緒?
答:在作業系統中引入執行緒,則是為了減少程式在併發執行時所付出的時空開銷,使OS具
有更好的併發性,提高CPU的利用率。程序是分配資源的基本單位,而執行緒則是系統排程的
基本單位。
37.試說明執行緒具有哪些屬性?
答:(1)輕型實體(2)獨立排程和分派的基本單位(3)可併發執行(4)共享程序資源。
38.試從排程性,併發性,擁有資源及系統開銷方面對程序和執行緒進行比較。
答:
(1)排程性。執行緒在OS 中作為排程和分派的基本單位,程序只作為資源擁有的基本單位。
(2)併發性。程序可以併發執行,一個程序的多個執行緒也可併發執行。
(3)擁有資源。程序始終是擁有資源的基本單位,執行緒只擁有執行時必不可少的資源,本
身基本不擁有系統資源,但可以訪問隸屬程序的資源。
(4)系統開銷。作業系統在建立、撤消和切換程序時付出的開銷顯著大於執行緒。
39. 為了在多執行緒OS中實現程序之間的同步與通訊,通常提供了哪幾種同步機制?
答:同步功能可以控制程式流並訪問共享資料,從而併發執行多個執行緒。共有四種同步模型:
互斥鎖、讀寫鎖、條件變數和訊號。
40.用於實現執行緒同步的私用訊號量和公用訊號量之間有何差別?
答:
(1)私用訊號量。當某執行緒需利用訊號量實現同一程序中各執行緒之間的同步時,可呼叫創
建訊號量的命令來建立一個私用訊號量,其資料結構存放在應用程式的地址空間中。
(2)公用訊號量。公用訊號量是為實現不同程序間或不同程序中各執行緒之間的同步而設定
的。其資料結構是存放在受保護的系統儲存區中,由OS為它分配空間並進行管理。
41.何謂使用者級執行緒和核心支援執行緒?
答:
(1)使用者級執行緒:僅存在於使用者空間中的執行緒,無須核心支援。這種執行緒的建立、撤銷、
執行緒間的同步與通訊等功能,都無需利用系統呼叫實現。使用者級執行緒的切換通常發生在一個
應用程序的諸多執行緒之間,同樣無需核心支援。
(2)核心支援執行緒:在核心支援下執行的執行緒。無論是使用者程序中的執行緒,還是系統執行緒
中的執行緒,其建立、撤銷和切換等都是依靠核心,在核心空間中實現的。在核心空間裡還
為每個核心支援執行緒設定了執行緒控制塊,核心根據該控制塊感知某執行緒的存在並實施控制。
42.試說明使用者級執行緒的實現方法。
答:使用者級執行緒是在使用者空間中的實現的,執行在“執行時系統”與“核心控制執行緒”的中
間系統上。執行時系統用於管理和控制執行緒的函式的集合。核心控制執行緒或輕型程序LWP
可通過系統呼叫獲得核心提供服務,利用LWP程序作為中間系統。
43.試說明核心支援執行緒的實現方法。
答:系統在建立新程序時,分配一個任務資料區PTDA,其中包括若干個執行緒控制塊TCB
空間。建立一個執行緒分配一個TCB,有關資訊寫入TCB,為之分配必要的資源。當PTDA
中的TCB 用完,而程序又有新執行緒時,只要所建立的執行緒數目未超過系統允許值,系統可
在為之分配新的TCB;在撤銷一個執行緒時,也應回收執行緒的所有資源和TCB。
第三章
第三章處理機排程與死鎖
1.高階排程與低階排程的主要任務是什麼?為什麼要引入中級排程?
答:高階排程的主要任務是根據某種演算法,把外存上處於後備佇列中的那些作業調入記憶體。
低階排程是儲存處理機的現場資訊,按某種演算法先取程序,再把處理器分配給程序。
引入中級排程的主要目的是為了提高記憶體利用率和系統吞吐量。使那些暫時不能執行的程序不再佔用記憶體資源,將它們調至外存等待,把程序狀態改為就緒駐外存狀態或掛起狀態。
2.何謂作業、作業步和作業流?
答:作業包含通常的程式和資料,還配有作業說明書。系統根據該說明書對程式的執行進行控制。批處理系統中是以作業為基本單位從外存調入記憶體。
作業步是指每個作業執行期間都必須經過若干個相對獨立相互關聯的順序加工的步驟。
作業流是指若干個作業進入系統後依次存放在外存上形成的輸入作業流;在作業系統的控制下,逐個作業程序處理,於是形成了處理作業流。
3.在什麼情況下需要使用作業控制塊JCB?其中包含了哪些內容?
答:每當作業進入系統時,系統便為每個作業建立一個作業控制塊JCB,根據作業型別將它插入到相應的後備佇列中。
JCB 包含的內容通常有:1) 作業標識2)使用者名稱稱3)使用者賬戶4)作業型別(CPU繁忙型、I/O芳名型、批量型、終端型)5)作業狀態6)排程資訊(優先順序、作業已執行)7)資源要求8)進入系統時間9) 開始處理時間10)作業完成時間11) 作業退出時間12) 資源使用情況等
4.在作業排程中應如何確定接納多少個作業和接納哪些作業?
答:作業排程每次接納進入記憶體的作業數,取決於多道程式度。應將哪些作業從外存調入記憶體,取決於採用的排程演算法。最簡單的是先來服務排程演算法,較常用的是短作業優先排程演算法和基於作業優先順序的排程演算法。
5.試說明低階排程的主要功能。
答:(1)儲存處理機的現場資訊(2)按某種演算法選取程序(3)把處理機分配給程序。
6.在搶佔排程方式中,搶佔的原則是什麼?
答:搶佔的原則有:時間片原則、優先權原則、短作業優先權原則等。
7.在選擇排程方式和排程演算法時,應遵循的準則是什麼?
答:
(1)面向使用者的準則:週轉時間短、響應時間快、截止時間的保證、優先權準則。
(2)面向系統的準則:系統吞吐量高、處理機利用率好、各類資源的平衡利用。
8.在批處理系統、分時系統和實時系統中,各採用哪幾種程序(作業)排程演算法?
答:批處理系統的排程演算法:短作業優先、優先權、高響應比優先、多級反饋佇列排程演算法。
分時系統的排程演算法:時間片輪轉法。
實時系統的排程演算法:最早截止時間優先即EDF、最低鬆弛度優先即LLF演算法。
9.何謂靜態和動態優先順序?確定靜態優先順序的依據是什麼?
答:靜態優先順序是指在建立程序時確定且在程序的整個執行期間保持不變的優先順序。
動態優先順序是指在建立程序時賦予的優先權,可以隨程序推進或隨其等待時間增加而改變的優先順序,可以獲得更好的排程效能。
確定程序優先順序的依據:程序型別、程序對資源的需求和使用者要求。
10.試比較FCFS和SPF兩種程序排程演算法。
答:相同點:兩種排程演算法都可以用於作業排程和程序排程。
不同點:FCFS排程演算法每次都從後備佇列中選擇一個或多個最先進入該佇列的作業,將它們調入記憶體、分配資源、建立程序、插入到就緒佇列。該演算法有利於長作業/程序,不利於短作業/程序。SPF演算法每次排程都從後備佇列中選擇一個或若干個估計執行時間最短的作業,調入記憶體中執行。該演算法有利於短作業/程序,不利於長作業/程序。
11.在時間片輪轉法中,應如何確定時間片的大小?
答:時間片應略大於一次典型的互動需要的時間。一般應考慮三個因素:系統對相應時間的
要求、就緒佇列中程序的數目和系統的處理能力。
12.通過一個例子來說明通常的優先順序排程演算法不能適用於實時系統?
答:實時系統的排程演算法很多,主要是基於任務的開始截止時間和任務緊急/鬆弛程度的任務優先順序排程演算法,通常的優先順序排程演算法不能滿足實時系統的排程實時性要求而不適用。
13.為什麼說多級反饋佇列排程演算法能較好地滿足各方面使用者的需求?
答:(1)終端型作業使用者提交的作業大多屬於較小的互動型作業,系統只要使這些作業在第一佇列規定的時間片內完成,終端作業使用者就會感到滿足。
(2)短批處理作業使用者,開始時像終端型作業一樣,如果在第一佇列中執行一個時間片段即可完成,便可獲得與終端作業一樣的響應時間。對於稍長作業,通常只需在第二和第三佇列各執行一時間片即可完成,其週轉時間仍然較短。
(3)長批處理作業,它將依次在第1,2,…,n個佇列中執行,然後再按輪轉方式執行,使用者不必擔心其作業長期得不到處理。所以,多級反饋佇列排程演算法能滿足多使用者需求。
14.為什麼在實時系統中,要求系統(尤其是CPU)具有較強的處理能力?
答:實時系統中通常有著多個實時任務。若處理機的處理能力不夠強,有可能因為處理機忙不過來而使某些實時任務得不到及時處理,導致發生難以預料的後果。
15.按照排程方式可將實時排程演算法分為哪幾種?
答:可分為非搶佔式和搶佔式兩種演算法。而非搶佔式演算法又分為非搶佔式輪轉和優先排程演算法;搶佔式排程演算法又分為基於時鐘中斷的搶佔式優先權和立即搶佔式優先權排程演算法。
16.什麼是最早截止時間優先排程演算法?舉例說明。
答:根據任務的開始截止時間確定的任務優先順序排程演算法。截止時間越早則優先順序越高。該演算法要求在系統中保持一個實時任務就緒佇列,該佇列按各任務截止時間的先後排序。
舉例:非搶佔式排程方式用於非週期實時任務。圖3-9是將該演算法用於非搶佔排程方式之例。該例中具有四個非週期任務,它們先後到達。系統首先排程任務1執行,在任務1執行期間,任務2、3又先後到達。由於任務3的開始截止時間早於任務2,故系統在任務1後將排程任務3執行。在此期間又到達作業4,其開始截止時間仍是早於任務2的,故在任務3執行完後,系統又排程任務4執行,最後才排程任務2執行。
圖3-9 EDF演算法用於非搶佔排程的排程方式
17.什麼是最低鬆弛度優先排程演算法?舉例說明之。
答:該演算法是根據任務緊急(或鬆弛)的程度,來確定任務的優先順序。任務的緊急程度愈高,
為該任務所賦予的優先順序就愈高,以使之優先執行。例如,一個任務在200 ms 時必須完
成,而它本身所需的執行時間就有100 ms,因此,排程程式必須在100 ms 之前排程執行,
該任務的緊急程度(鬆弛程度)為100 ms。又如,另一任務在400 ms 時必須完成,它本身
需要執行 150 ms,則其鬆弛程度為 250 ms。
18.何謂死鎖?產生死鎖的原因和必要條件是什麼?
答:死鎖是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當程序處於這種僵持狀
態時,若無外力作用,它們都將無法再向前推進。
產生死鎖的原因為競爭資源和程序間推進順序非法。其必要條件是:互斥條件、請求和
保持條件、不剝奪條件、環路等待條件。
19.在解決死鎖問題的幾個方法中,哪種方法最易於實現?哪種方法使資源利用率最高?
答:解決死鎖的四種方法即預防、避免、檢測和解除死鎖中,預防死鎖最容易實現;
避免死鎖使資源的利用率最高。
20.請詳細說明可通過哪些途徑預防死鎖。
答:(1)擯棄“請求和保持”條件,就是如果系統有足夠資源,便一次性把程序需要的所
有資源分配給它;
(2)擯棄“不剝奪”條件,就是已經擁有資源的程序,當它提出新資源請求而不能立即
滿足時,必須釋放它已保持的所有資源,待以後需要時再重新申請;
(3)擯棄“環路等待”條件,就是將所有資源按型別排序標號,所有程序對資源的請求
必須嚴格按序號遞增的次序提出。
21.在銀行家演算法的例子中,如果P0發出請求向量由Request(0,2,0)改為Request(0,1,0),
問系統可否將資源分配給它?(此答案有點問題,需重新考慮)
答:(1)可以。銀行家演算法各種資源數量分別為10、5、7,在T0時刻的資源分配如圖所示:
(2)具體分析如下:
① Requst0(0,1,0)<=Need0(7,4,3);
②Requst0(0,1,0)<=Available(2,3,0);
系統先假定可為P0分配資源,並修改Available0,Allocation0和Need0向量,由此形成
的資源變化情況如下圖所示:
(3)P0請求資源:P0發出請求向量Requst0(0,1,0),系統按銀行家演算法進行檢查:
① Requst0(0,1,0)<=Need0(7,4,3);
②Requst0(0,1,0)<=Available(2,3,0);
③ 系統暫時先假定可為P0分配資源,並修改______________有關資料,如下圖所示
綜上所述系統可以將資源分配給它。
22.銀行家演算法中出現以下資源分配,試問(1)該狀態是否安全?(2)若程序P2提出
Request(1,2,2,2)後,系統能否將資源分配給它?
試問: (1)該狀態是否安全?
(2)若程序P2提出請求Request(1,2,2,2)後,系統能否將資源分配給它?(參考答案有錯)
答: (1)安全,因為存在安全序列{P0,P3,P4,P1,P2}
(2)系統能分配資源,分析如下。
① Request(1,2,2,2) <=Need2(2,3,5,6);
② Request(1,2,2,2) <=Available2(1,3,5,4)改成Available2(1,6,2,2);
③系統先假定可為P2分配資源,並修改Available2,Allocation2和Need2向量,
由此形成的資源變化情況如下圖所示:
④ 再利用安全性演算法檢查此時系統是否安全。如下圖
由此進行的安全性檢查得知,可以找到一個安全序列{P2,P0,P1,P3,P4}。
第四章
1.為什麼要配置層次式儲存器?
答:設定多個儲存器可以使儲存器兩端的硬體能並行工作;採用多級儲存系統,特別是
Cache 技術,是減輕儲存器頻寬對系統性能影響的最佳結構方案;在微處理機內部設定各
種緩衝儲存器,減輕對儲存器存取的壓力。增加CPU中暫存器數量大大緩解對儲存器壓力。
2.可採用哪幾種方式將程式裝入記憶體?它們分別適用於何種場合?
答: (1)絕對裝入方式,只適用於單道程式環境。
(2)可重定位裝入方式,適用於多道程式環境。
(3)動態執行時裝入方式,用於多道程式環境;不允許程式執行時在記憶體中移位置。
3.何謂靜態連結?何謂裝入時動態連結和執行時的動態連結?P120
答:靜態連結是指在程式執行前,先將各目標模組及它們所需的庫函式,連結成一個完整的
裝配模組,以後不再拆開的連結方式。
裝入時動態連結是指將使用者源程式編譯後得到的一組目標模組,在裝入記憶體時採用邊裝
入邊連結的連結方式。
執行時動態連結是指對某些目標模組的連結,是在程式執行中需要該目標模組時,才對
它進行的連結。
4.在進行程式連結時,應完成哪些工作?
答:由連結程式Linker將編譯後形成的一組目標模組,以及它們需要的庫函式連結在一起,
形成一個完整的裝入模組Load Module。主要工作是修改程式內的相對地址和修改目標程
序中的外部呼叫標號。
5.在動態分割槽分配方式中,應如何將各空閒分割槽連結成空閒分割槽鏈?
答:在每個分割槽的起始部分,設定一些控制分割槽分配的資訊,以及用於連結各分割槽所用的前
向指標;在分割槽尾部設定一個後向指標,通過前後向連結指標,將所有空閒分割槽鏈成一個雙
向鏈。當分割槽分配出去後,把狀態位由“0”改為“1”。
6.為什麼要引入動態重定位?如何實現?
答:在程式執行過程中,每當訪問指令或資料時,將要訪問的程式或資料的邏輯地址轉換成
實體地址,引入了動態重定位;
具體實現方法是在系統中增加一個重定位暫存器,用來裝入程式在記憶體中的起始地址,
程式執行時,真正訪問的記憶體地址是相對地址與重定位暫存器中的地址相加之和,從而實現
動態重定位。
7.在採用首次適應演算法回收記憶體時,可能出現哪幾種情況?應怎樣處理這些情況?
答:在採用首次適應演算法回收記憶體時可能出現4種情況:
(1)回收區前鄰空閒區。將回收區與前鄰空閒區合併,將前鄰空閒區大小修改為兩者之和。
(2)回收區後鄰空閒區。將兩區合併,改後鄰空閒區始址為回收區始址,大小為兩者之和。
(3)回收區前後均鄰空閒區。將三個分割槽合併,修改前鄰空閒區大小為三者之和。
(4)回收區前後均不鄰空閒區。為回收區設定空閒區表項,填入回收區始址和大小並插入
空閒區佇列。
8.令 表示大小為 、地址為x 的塊的夥伴系統地址,試寫出的通用表示式。
答:當 時, ;當 時,
9.分割槽儲存管理中常用那些分配策略?比較它們的優缺點。
答:分割槽儲存管理中的常用分配策略:首次適應演算法、迴圈首次適應演算法、最佳適應演算法、最壞適應演算法。
首次適應演算法優缺點:保留了高址部分的大空閒區,有利於後來的大型作業分配;低址部分不斷被劃分,留下許多難以利用的小空閒區,每次查詢都從低址開始增加了系統開銷。
迴圈首次適應演算法優缺點:記憶體空閒分割槽分佈均勻,減少了查詢系統開銷;缺乏大空閒分割槽,導致不能裝入大型作業。
最佳適應演算法優缺點:每次分配給檔案的都是最適合該檔案大小的分割槽,記憶體中留下許多難以利用的小空閒區。
最壞適應演算法優缺點:剩下空閒區不太小,產生碎片機率小,對中小型檔案分配分割槽操作有利;儲存器中缺乏大空閒區,對大型檔案分割槽分配不利。
10.在系統中引入對換後可帶來哪些好處?
答:交換技術將暫不需要的作業移到外存,讓出記憶體空間以調入其它作業,交換到外存的作
業也可以被再次調入。目的是解決記憶體緊張問題,帶來的好處是進一步提高了記憶體利用率和
系統吞吐量。
11.為實現對換,系統應具備哪幾方面的功能?
答:系統應具備三方面功能:對換空間管理,程序換出,程序換入。
12.在以程序為單位進行對換時,每次是否都將整個程序換出?為什麼?
答:在以程序為單位進行對換時,並非每次都將整個程序換出。這是因為:
(1)從結構上講,程序由程式段、資料段和程序控制塊組成的,其中程序控制塊總有部分或全部常駐記憶體,不被換出。
(2)程式段和資料段可能正被若干程序共享,此時它們也不能換出。
13.為實現分頁儲存管理,需要哪些硬體的支援?
答:動態重定位技術、虛擬儲存技術、多道程式設計技術。
14.較詳細的說明引入分段儲存管理是為了滿足使用者哪幾方面的需要。
答:
1) 方便程式設計。使用者通常把自己的作業按照邏輯關係劃分為若干段,每段都從0 編址,並
有自己名字和長度。因此,希望要訪問的邏輯地址是由段名和段內偏移量決定。
2) 資訊共享。在實現對程式和資料的共享時,是以資訊邏輯單位為基礎。分頁系統中的頁
是存放資訊的物理單位,無完整意義,不便於共享;段是資訊的邏輯單位。為了實現段
的共享,希望儲存管理能與使用者程式分段的組織方式相適應。
3) 資訊保護。對資訊的邏輯單位進行保護,分段能更有效方便地實現資訊保護功能。
4) 動態增長。在實際應用中,有些段特別是資料段,在使用過程中會不斷增長,事