作業系統答案 第四版
第一章
1.設計現代 OS 的主要目標是什麼?
答:( 1)有效性 ( 2)方便性 ( 3)可擴充性 ( 4)開放性
2. OS 的作用可表現在哪幾個方面?
答:( 1) OS 作為使用者與計算機硬體系統之間的介面
- ) OS 作為計算機系統資源的管理者
- ) 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.什麼是硬實時任務和軟實時任務?試舉例說明。
答:硬實時任務是指系統必須滿足任務對截止時間的要求,否則可能出現難以預測的結果。舉例來說,運載火箭的控制等。
軟實時任務是指它的截止時間並不嚴格,偶爾錯過了任務的截止時間,對系統產生的影響不大。舉例:網頁內容的更新、火車售票系統。
- .在 8 位微機和 16 位微機中,佔據了統治地位的是什麼作業系統? 答:單使用者單任務作業系統,其中最具代表性的是 CP/M 和 MS-DOS.
- .試列出 Windows OS 中五個主要版本,並說明它們分別較之前一個版本有何改進。答:
- ) Microsoft Windows 1.0 是微軟公司在個人電腦上開發圖形介面的首次嘗試。
- )Windows 95 是混合的 16 位/32 位系統,第一個支援 32 位。帶來了更強大、更穩定、更實用的桌面圖形使用者介面,結束了桌面作業系統間的競爭。
- )Windows 98 是微軟公司的混合 16 位/32 位 Windows 作業系統,改良了硬體標準的支援,革新了記憶體管理,是多程序作業系統。
- )Windows XP 是基於 Windows2000 的產品, 擁有新使用者圖形介面月神 Luna 。簡化了使用者安全特性,整合了防火牆。
- )Windows Vista 包含了上百種新功能;特別是新版圖形使用者介面和WindowsAero全新介面風格、加強的搜尋功能( Windows IndexingService )、新媒體創作工具以及重新設計的網路、音訊、輸出(列印)和顯示子系統。。
- .試從互動性、及時性以及可靠性方面,將分時系統與實時系統進行比較。
答:( 1)及時性:實時資訊處理系統對實時性的要求與分時系統類似,都是以人所能接受
的等待時間來確定; 而實時控制系統的及時性, 是以控制物件所要求的開始截止時間或完成截止時間來確定的,一般為秒級到毫秒級,甚至有的要低於 100 微妙。
(2 )互動性:實時資訊處理系統具有互動性,但人與系統的互動僅限於訪問系統中某些特定的專用服務程式。不像分時系統那樣能向終端使用者提供資料和資源共享等服務。
(3 )可靠性:分時系統也要求系統可靠,但相比之下,實時系統則要求系統具有高度
的可靠性。 因為任何差錯都可能帶來巨大的經濟損失, 甚至是災難性後果, 所以在實時系統中,往往都採取了多級容錯措施保障系統的安全性及資料的安全性。
- . OS 有哪幾大特徵?其最基本的特徵是什麼?
答:併發性、共享性、虛擬性和非同步性四個基本特徵;最基本的特徵是併發性。
- .處理機管理有哪些主要功能?它們的主要任務是什麼?
答:處理機管理的主要功能是:程序管理、程序同步、程序通訊和處理機排程;
程序管理:為作業建立程序,撤銷已結束程序,控制程序在執行過程中的狀態轉換。程序同步:為多個程序(含執行緒)的執行 進行協調。
通訊:用來實現在相互合作的程序之間的資訊交換。處理機排程:
(1 )作業排程。從後備隊裡按照一定的 演算法 ,選出若干個作業,為他們分配執行所需
的資源(首選是分配記憶體)。
(2 )程序排程:從程序的就緒佇列中,按照一定演算法選出一個程序,把處理機分配給它,並設定執行現場,使程序投入執行。
- .記憶體管理有哪些主要功能 ? 他們的主要任務是什麼?
答:記憶體管理的主要功能有:記憶體分配、記憶體保護、地址對映和記憶體擴充。記憶體分配:為每道程式分配記憶體。
記憶體保護:確保每道使用者程式都只在自己的記憶體空間執行,彼此互不干擾。地址對映:將地址空間的邏輯地址轉換為記憶體空間與對應的實體地址。
記憶體擴充:用於實現請求呼叫功能,置換功能等。
- .裝置管理有哪些主要功能?其主要任務是什麼?
答:主要功能有 : 緩衝管理、裝置分配和裝置處理以及虛擬裝置等。
主要任務 : 完成使用者提出的 I/O 請求,為使用者分配 I/O 裝置;提高 CPU 和 I/O 裝置的利用率;提高 I/O 速度;以及方便使用者使用 I/O 裝置 .
- .檔案管理有哪些主要功能?其主要任務是什麼?
答:檔案管理主要功能:檔案儲存空間的管理、目錄管理、檔案的讀 /寫管理和保護。檔案管理的主要任務:管理使用者檔案和系統檔案,方便使用者使用,保證檔案安全性。
- .是什麼原因使作業系統具有非同步性特徵?
答:作業系統的非同步性體現在三個方面: 一是程序的非同步性, 程序以人們不可預知的速度向前推進, 二是程式的不可再現性, 即程式執行的結果有時是不確定的, 三是程式執行時間的不可預知性,即每個程式何時執行,執行順序以及完成時間是不確定的。
- .模組介面法存在哪些問題?可通過什麼樣的途徑來解決?
答:( 1)模組介面法存在的問題:①在 OS 設計時,各模組間的介面規定很難滿足在模組完
成後對介面的實際需求。②在 OS 設計階段,設計者必須做出一系列的決定,每一個決定
必
須建立在上一個決定的基礎上。 但模組化結構設計的各模組設計齊頭並進, 無法尋找可靠的順序,造成各種決定的無序性, 使程式設計人員很難做到設計中的每一步決定都建立在可靠
的基礎上,因此模組介面法被稱為 “無序模組法 ”。
(2 )解決途徑:將模組介面法的決定順序無序變有序,引入有序分層法。
- .在微核心 OS 中,為什麼要採用客戶 /伺服器模式?
答: C/S 模式具有獨特的優點:⑴資料的分佈處理和儲存。⑵便於集中管理。⑶靈活性和可擴充性。⑷易於改編應用軟體。
- .試描述什麼是微核心 OS 。
答: 1)足夠小的核心 2)基於客戶 /伺服器模式3)應用機制與策略分離原理 4 )採用面向物件技術。
- .在基於微核心結構的 OS 中,應用了哪些新技術?
答:在基於微核心結構的 OS 中,採用面向物件的程式設汁技術。
- .何謂微核心技術?在微核心中通常提供了哪些功能?
答:把作業系統中更多的成分和功能放到更高的層次(即使用者模式)中去執行,而留下一個
儘量小的核心, 用它來完成作業系統最基本的核心功能, 稱這種技術為微核心技術。 在微核心中通常提供了程序(執行緒)管理、低階儲存器管理、中斷和陷入處理等功能。
- .微核心作業系統具有哪些優點?它為何能有這些優點?答: 1)提高了系統的可擴充套件性
2)增強了系統的可靠性
3)可移植性
4)提供了對分散式系統的支援
5)融入了面向物件技術
第二章
- 什麼是前趨圖?為什麼要引入前趨圖?
答:前趨圖 (Precedence Graph) 是一個有向無迴圈圖,記為 DAG(DirectedAcyclic Graph) ,用於描述程序之間執行的前後關係。
- 畫出下面四條語句的前趨圖 :
S1=a : =x+y; S2=b : =z+1; S3=c : =a –b ; S4=w : =c+1;
答:其前趨圖為:
- 什麼程式併發執行會產生間斷性特徵?
答:程式在併發執行時, 由於它們共享系統資源, 為完成同一項任務需要相互合作,致使這些併發執行的程序之間,形成了相互制約關係,從而使得程序在執行期間出現間斷性。 4.程式併發執行時為什麼會失去封閉性和可再現性?
答:程式併發執行時, 多個程式共享系統中的各種資源, 因而這些資源的狀態由多個程式改
變,致使程式執行失去了封閉性,也會導致其失去可再現性。
5.在作業系統中為什麼要引入程序概念?它會產生什麼樣的影響 ?
答:為了使程式在多道程式環境下能併發執行, 並對併發執行的程式加以控制和描述, 在作業系統中引入了程序概念。
影響 : 使程式的併發執行得以實行。
6.試從動態性,併發性和獨立性上比較程序和程式 ?
答: (1) 動態性是程序最基本的特性,表現為由建立而產生,由排程而執行,因得不到資源
而暫停執行,由撤銷而消亡。程序有一定的生命期,而程式只是一組有序的指令集合, 是靜態實體。
- 併發性是程序的重要特徵,同時也是 OS 的重要特徵。引入程序的目的正是為了使
其程式能和其它程序的程式併發執行,而程式是不能併發執行的。
- 獨立性是指程序實體是一個能獨立執行的基本單位,也是系統中獨立獲得資源和獨立排程的基本單位。對於未建立任何程序的程式,不能作為獨立單位參加執行。 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 )過程和系統呼叫引數及呼叫地址資訊。
- .試說明引起程序建立的主要事件。
答:引起程序建立的主要事件有:使用者登入、作業排程、提供服務、應用請求。
- .試說明引起程序被撤銷的主要事件。
答:引起程序被撤銷的主要事件有:正常結束、異常結束(越界錯誤、保護錯、非法指令、
特權指令錯、執行超時、等待超時、算術運算錯、 I/O 故障)、外界干預(操作員或作業系統干預、父程序請求、父程序終止)。
- .在建立一個程序時所要完成的主要工作是什麼?答:
(1 ) OS 發現請求建立新程序事件後,呼叫程序建立原語 Creat() ;
(2 )申請空白 PCB ;
(3 )為新程序分配資源;
(4 )初始化程序控制塊;
(5 )將新程序插入就緒佇列 .
- .在撤銷一個程序時所要完成的主要工作是什麼?答:
(1 )根據被終止程序識別符號,從 PCB 集中檢索出程序 PCB ,讀出該程序狀態。
(2 )若被終止程序處於執行狀態,立即終止該程序的執行,置排程標誌真,指示該程序被終止後重新排程。
(3 )若該程序還有子程序,應將所有子孫程序終止,以防它們成為不可控程序。
(4 )將被終止程序擁有的全部資源,歸還給父程序,或歸還給系統。
(5 )將被終止程序 PCB 從所在佇列或列表中移出,等待其它程式蒐集資訊。
- .試說明引起程序阻塞或被喚醒的主要事件是什麼?
答: a. 請求系統服務; b. 啟動某種操作; c. 新資料尚未到達; d. 無新工作可做 . 16 .程序在執行時存在哪兩種形式的制約?並舉例說明之。
答:
(1 )間接相互制約關係。舉例:有兩程序 A 和 B,如果 A 提出列印請求,系統已把唯一的
一臺印表機分配給了程序 B,則程序 A 只能阻塞; 一旦 B 釋放印表機, A 才由阻塞改為就
緒。
(2 )直接相互制約關係。舉例:有輸入程序 A 通過單緩衝向程序 B 提供資料。當緩衝空時,
計算程序因不能獲得所需資料而阻塞,當程序 A 把資料輸入緩衝區後,便喚醒程序 B ;反
之,當緩衝區已滿時,程序 A 因沒有緩衝區放資料而阻塞,程序 B 將緩衝區資料取走後便喚醒 A 。
17 .為什麼程序在進入臨界區之前應先執行 “進入區 ”程式碼?而在退出前又要執行 “退出區”程式碼?
答:為了實現多個程序對臨界資源的互斥訪問, 必須在臨界區前面增加一段用於檢查欲訪問的臨界資源是否正被訪問的程式碼,如果未被訪問,該程序便可進入臨界區對資源進行訪問,
並設定正被訪問標誌,如果正被訪問,則本程序不能進入臨界區,實現這一功能的程式碼為 "
進入區 "程式碼;在退出臨界區後,必須執行 "退出區 "程式碼,用於恢復未被訪問標誌,使其它程序能再訪問此臨界資源。
- 同步機構應遵循哪些基本準則?為什麼?
答:同步機構應遵循的基本準則是:空閒讓進、忙則等待、有限等待、讓權等待原因:為實現程序互斥進入自己的臨界區。
- 試從物理概念上說明記錄型訊號量 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 連結串列中的第一個等待程序喚醒。
- .你認為整型訊號量機制是否完全遵循了同步機構的四條準則?
答:整型訊號量機制不完全遵循同步機制的四條準則,它不滿足 “讓權等待 ”準則。
- .如何利用訊號量機制來實現多個程序對臨界資源的互斥訪問?並舉例說明之。
答:為使多個程序互斥訪問某臨界資源,只需為該資源設定一互斥訊號量 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
- .試寫出相應的程式來描述圖 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
- .在生產者消費者問題中,如果缺少了 signal(full) 或 signal(empty), 對執行結果有何影
響?答:
如果缺少 signal(full) ,那麼表明從第一個生產者程序開始就沒有改變訊號量 full 值,
即使緩衝池產品已滿,但 full 值還是 0,這樣消費者程序執行 wait(full) 時認為緩衝池是空而取不到產品,消費者程序一直處於等待狀態。
如果缺少 signal(empty) ,在生產者程序向 n 個緩衝區投滿產品後消費者程序才開始從
中取產品,這時 empty=0 ,full=n ,那麼每當消費者程序取走一個產品 empty 值並不改變,直到緩衝池取空了, empty 值也是 0 ,即使目前緩衝池有 n 個空緩衝區,生產者程序要想 再往緩衝池中投放產品也會因為申請不到空緩衝區被阻塞。
- .在生產消費者問題中,如果將兩個 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) 互換位置後只是影響程序對臨界資源的釋放次序,而不會引起系統死鎖,因此可以互換位置。
- .我們在為某一臨界資源設定一把鎖 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
- .試修改下面生產者-消費者問題解法中的錯誤 :
答: 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
- .試利用記錄型訊號量寫出一個不會出現死鎖的哲學家進餐問題的演算法 .
答: 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;
- .在測量控制系統中的資料採集任務,把所採集的資料送一單緩衝區;計算任務從該單緩衝中取出資料進行計算 .試寫出利用訊號量機制實現兩者共享單緩衝的同步演算法。 答:
- 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
- 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
- .畫圖說明管程由哪幾部分組成,為什麼要引入條件變數?
答:管程由四部分組成: ①管程的名稱; ②區域性於管程內部的共享資料結構說明; ③對該資料結構進行操作的一組過程;④對區域性於管程內部的共享資料設定初始值的語句;
當一個程序呼叫了管程, 在管程中時被阻塞或掛起, 直到阻塞或掛起的原因解除, 而在此期間,如果該程序不釋放管程,則其它程序無法進入管程, 被迫長時間地等待。為了解決這個
問題,引入了條件變數 condition 。
- .如何利用管程來解決生產者與消費者問題?
答:首先建立一個管程,命名為 ProclucerConsumer ,包括兩個過程:
- ) Put (item )過程。生產者利用該過程將自己生產的產品放到緩衝池,用整型變
量 count 表示在緩衝池中已有的產品數目,當 count ≥n 時,表示緩衝池已滿,生產者須等待。
- ) get (item )過程。消費者利用該過程從緩衝池中取出一個產品,當 count ≤0 時,表示緩衝池中已無可取的產品,消費者應等待。
PC 管程可描述如下:
type producer-consumer =monitor Var in,out,count:integer;
buffer:array[0, -1,n]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
- .什麼是 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
- .什麼是訊號量集?試利用訊號量集寫出讀者一寫者問題的解法。
答:對 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
- .試比較程序間的低階與高階通訊工具。
答:使用者用低階通訊工具實現程序通訊很不方便, 效率低,通訊對使用者不透明,所有操作都必須由程式設計師來實現, 而高階通訊工具彌補了這些缺陷, 使用者直接利用作業系統提供的一組通訊命令,高效地傳送大量的資料。
- .當前有哪幾種高階通訊機制?
答:共享儲存器系統、訊息傳遞系統以及管道通訊系統。
- .訊息佇列通訊機制有哪幾方面的功能?
答:( 1)構成訊息( 2 )傳送訊息( 3)接收梢息( 4)互斥與同步。36 .為什麼要在 OS 中引入執行緒?
答:在作業系統中引入執行緒, 則是為了減少程式在併發執行時所付出的時空開銷, 使 OS 具
有更好的併發性, 提高 CPU 的利用率。 程序是分配資源的基本單位 ,而執行緒則是系統排程的基本單位。
37 .試說明執行緒具有哪些屬性?
答:( 1) 輕型實體( 2)獨立排程和分派的基本單位( 3)可併發執行( 4 )共享程序資源。
- 試從排程性,併發性,擁有資源及系統開銷方面對程序和執行緒進行比較。答:
(1 )排程性。執行緒在 OS 中作為排程和分派的基本單位, 程序只作為資源擁有的基本單位。
(2 )併發性。程序可以併發執行,一個程序的多個執行緒也可併發執行。
(3 )擁有資源。程序始終是擁有資源的基本單位,執行緒只擁有執行時必不可少的資源,本身基本不擁有系統資源,但可以訪問隸屬程序的資源。
(4 )系統開銷。作業系統在建立、撤消和切換程序時付出的開銷顯著大於執行緒。
- 為了在多執行緒 OS 中實現程序之間的同步與通訊,通常提供了哪幾種同步機制?
答:同步功能可以控制程式流並訪問共享資料, 從而併發執行多個執行緒。 共有四種同步模型:互斥鎖、讀寫鎖、條件變數和訊號。
- .用於實現執行緒同步的私用訊號量和公用訊號量之間有何差別?答:
(1 )私用訊號量。當某執行緒需利用訊號量實現同一程序中各執行緒之間的同步時,可呼叫建立訊號量的命令來建立一個私用訊號量,其資料結構存放在應用程式的地址空間中。
(2 )公用訊號量。公用訊號量是為實現不同程序間或不同程序中各執行緒之間的同步而設定
的。其資料結構是存放在受保護的系統儲存區中,由 OS 為它分配空間並進行管理。
- .何謂使用者級執行緒和核心支援執行緒?
答:
( 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 演算法。