作業系統-精髓與設計原理(第八版)複習題 - 隨筆分類 - 浩楠honer - 部落格園 (cnblogs.com) 轉至此
作業系統--精髓與設計原理(第八版)第一章複習題答案
1.1 列出並簡要定義計算機的四個組成部分。
- 處理器:控制計算機的操作,執行資料處理功能。
- 記憶體:也叫主儲存器,儲存資料和程式。
- 輸入/輸出模組:在計算機和外部環境之間移動資料。
- 系統匯流排:在處理器、記憶體和輸入輸出間提供通訊的設施。
1.2 定義處理器暫存器的兩種主要類別。
- 使用者可見暫存器: 優先使用這些暫存器,可以使機器語言或者組合語言的程式設計師減少對主儲存器的訪問次數。對高階語言而言,由最佳化編譯器負責決定把哪些變數應該分配給主儲存器,一些高階語言,如C語言,允許程式言建議編譯器把哪些變數儲存在暫存器中。
- 控制和狀態暫存器:用以控制處理器的操作,且主要被具有特權的作業系統例程使用,以控制程式的執行。
1.3 一般而言,一條機器指令能指定的四種不同操作是什麼?
- 處理器-暫存器:資料可以從處理器傳送到儲存器,或者從儲存器傳送到處理器。
- 處理器-I/O:透過處理器和I/O模組間的資料傳送,資料可以輸出到外部裝置,或者從外部裝置輸入資料。
- 資料處理:處理器可以執行很多關於資料的算術操作或者邏輯操作。
- 控制:某些指令可以改變執行順序。
1.4 什麼是中斷?
中斷是指計算機執行過程中,出現某些意外情況需主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。
1.5 多箇中斷的處理方式是什麼?
處理多中斷有兩種方法。
- 第一種方法是當正在處理一箇中斷時,禁止再發生中斷。
- 第二種方法是定義中斷優先順序,允許高優先順序的中斷打斷低優先順序的中斷處理器的執行。
1.6 記憶體層次各個元素間的特徵是什麼?
儲存器的三個重要特性是:價格,容量和訪問時間。並且各層次從上到下,每“位”價格降低,容量遞增,訪問時間遞增。
1.7 什麼是快取記憶體?
高速緩衝儲存器是比主存小而快的儲存器,用以協調主存跟處理器,作為最近儲存地址的緩衝區。
1.8 多處理器系統和多核系統的區別是什麼?
- 多處理器系統(Multiprocessor Systems)是指包含兩臺或多臺功能相近的處理器,處理器之間彼此可以交換資料,所有處理器共享記憶體,I/O 裝置,控制器,及外部裝置,整個硬體系統由統一-的作業系統控制,在處理器和程式之間實現作業、任務、程式、陣列極其元素各級的全面並行。
- 多核心(multicore chips) 是指在一枚處理器(chip) 中整合兩個或多個完整的計算引擎(核心)。
1.9 空間區域性性和時間區域性性的區別是什麼?
- 空間區域性性是指最近被訪問的元素的周圍在不久的將來可能會被訪問。
- 臨時區域性性(即時間區域性性):是指最近被訪問的元素在不久的將來可能會被再次訪問。
1.10 開發空間區域性性和時間區域性性的策略是什麼?
- 空間區域性性的開發是利用更大的緩衝塊並且在儲存器控制邏輯中加入預處理機制。
- 時間區域性性的開發是利用在高速緩衝儲存器中保留最近使用的指令及資料,並且定義緩衝儲存的優先順序。
作業系統--精髓與設計原理(第八版)第二章複習題答案
2.1 作業系統設計的三個目標是什麼?
- 方便:作業系統使計算機更易於使用。
- 有效:作業系統允許以更有效的方式使用計算機系統資源。
- 擴充套件的能力:在構造作業系統時,應該允許在不妨礙服務的前提下有效地開發、測試和引進新的系統功能。
2.2 什麼是作業系統的核心?
作業系統核心是計算機上最低層的軟體,提供計算機最核心的功能,比如:程序管理、記憶體管理、I/O管理、檔案管理、網路管理等。
2.3 什麼是多道程式設計?
兩個或兩個以上程式在計算機系統中同處於開始到結束之間的狀態,這就稱為多道程式設計。也就是在計算機記憶體中同時存放幾道相互獨立的程式,使它們在管理程式控制之下,相互穿插的執行。多道程式技術執行的特徵:多道、宏觀上並行、微觀上序列。
2.4 什麼是程序?
程序由三部分組成:
- 一 段可執行的程式。
- 程式所需要的相關資料(變數、工作空間、緩衝區等)。
- 程式的執行上下文(也稱程序狀態)。
2.5 作業系統是怎麼使用程序上下文的?
執行上下文又稱為程序狀態,是作業系統用來管理和控制所需的內部資料。這種內部資訊和程序是分開的,因為作業系統資訊不允許被程序直接訪問。上下文包括作業系統管理程序以及處理器正確執行程序所需要的所有資訊,包括各種處理器暫存器的內容,如程式計數器和資料暫存器。它還包括作業系統使用的資訊,如程序優先順序以及程序是否在等待特定I/O事件的完成。
2.6 列出並簡要介紹作業系統的五種典型儲存管理職責。
- 程序隔離:作業系統必須保護獨立的程序,防止互相干擾各自的儲存空間,包括資料和指令。
- 自動分配和管理:程式應該根據需要在儲存層次間動態的分配,分配對程式設計師是透明的。因此,程式設計師無需關心與儲存限制有關的問題,作業系統有效的實現分配問題,可以僅在需要時才給作業分配儲存空間。
- 支援模組化程式設計:程式設計師應該能夠定義程式模組,並動態地建立、銷燬模組,動態地改變模組大小。
- 保護和訪問控制:不論在儲存層次中的哪一級,儲存器的共享都會產生一個程式訪問另一個程式儲存空間的潛在可能性。當某個特定的應用程式需要共享時,這是可取的。但在其他時候,他可能會威脅到程式的完整性,甚至威脅到作業系統本身。
- 長期儲存:許多應用程式需要在計算機關機後長時間的儲存資訊。
2.7 解釋實地址和虛地址的區別。
實地址:指的是主存中的地址,實際的主儲存器的地址,對應主存空間,即物理空間。
虛地址:指的是存在於虛擬記憶體中的地址,它有時候在磁碟中,有時候在主存中。
2.8 描述時間片輪詢排程技術。
輪詢排程是一種排程演算法,所有的程序存放在一個環形佇列中並按固定循序依次啟用。因為等待一些事件(例如:等待一個子程序或者一個I/O操作)的發生而不能被處理的程序將控制權交給排程器。
2.9 解釋單體核心和微核心的區別。
- 單體核心是一個提供作業系統應該提供的功能的大核心,包括排程、檔案系統、網路、裝置驅動程式、儲存管理等。核心的所有功能成分都能夠訪問它的內部資料結構和程式。典型情況下,這個大核心是作為一個程序實現的,所有元素都共享相同的地址空間。
- 微核心是一個小的有特權的作業系統核心,只提供包括程序排程、記憶體管理和程序間通訊等基本功能,要依靠其他程序擔當起和作業系統核心聯絡作用。
2.10 什麼是多執行緒?
多執行緒技術是指把執行一個應用程式的程序劃分為可以同時執行的多個執行緒。
2.11 列出對稱多處理器作業系統設計時要考慮的關鍵問題。
- 併發程序或執行緒:核心程式應可重入,以使多個處理器能同時執行同一段核心程式碼。當多個處理器執行核心的相同或不同部分時,為避免資料損壞和無效操作,需要妥善管理核心表和資料結構。
- 排程:任何一個處理器都可以執行排程,這既增加了執行排程策略的複雜度,也增加了保證排程相關資料結構不被損壞的複雜度。如果使用的是核心級多執行緒方式,就存在將同一程序的多個執行緒同時排程在多個處理器上的可能性。
- 同步:因為可能會存在多個活躍程序訪問共享地址空間或共享I/O資源的情況,因此必須認真考慮如何提供有效的同步機制這一問題。 同步用來實現互斥及事件排序。
- 記憶體管理:多處理器上的記憶體管理要處理單處理器上記憶體管理涉及的所有問題。另外,作業系統還要充分利用硬體提供的並行性來實現最優效能。不同處理器上的分頁機制必須進行調整,以實現多處理器共享頁或段時的資料一致性, 執行頁面置換。物理頁的重用是我們關注的最大問題,即必須保證物理頁在重新使用前不能訪問到它以前的內容。
- 可靠性和容錯性:出現處理器故障時,作業系統應能妥善地降低故障的影響。排程器和作業系統的其他部分必須能識別出發生故障的處理器,並重新組織管理表。
作業系統--精髓與設計原理(第八版)第三章複習題答案
3.1 什麼是指令跟蹤?
指令跟蹤是指為該程序而執行的指令序列。
3.2 通常哪些事件會導致建立一個程序?
- 新的批處理作業;
- 互動登入;
- 作業系統因為提供一項服務而建立;
- 由現有的程序派生。
3.3 簡要定義圖3.6所示程序模型中的每種狀態。
- 執行態:該程序正在執行。
- 就緒態:程序做好了準備,只要有機會就會開始執行。
- 阻塞態:程序在某些事件發生前不能執行,如I/O操作完成。
- 新建態:剛剛建立的程序,作業系統還沒有把它加入到可執行程序組中。
- 退出態:作業系統從可執行程序中釋放出的程序,或者是因為它自身停止了,或者是因為某種原因被取消。
3.4 被搶佔一個程序是什麼意思?
處理器為了執行另外的程序而終止當前正在執行的程序,這就叫程序搶佔。
3.5 什麼是交換,其目的是什麼?
交換是指把主存中某個程序的一部分或者全部內容轉移到磁碟。當主存中沒有處於就緒態的程序時,作業系統就把一個阻塞的程序換出到磁碟中的掛起佇列,從而使另一個程序可以進入主存執行。
3.6 為什麼圖3.9(b)中有兩個阻塞態?
有兩個獨立的概念:程序是否在等待一個事件(阻塞與否)以及程序是否已經被患處主存(掛起與否)。為適應這種2*2的組合,需要兩個阻塞態和兩個掛起態。
3.7 列出掛起狀態程序的4個特點。
1.程序不能立即執行。
2.程序可能是或不是正在等待一個事件。如果是,阻塞條件不依賴於掛起條件,阻塞事件的發生不會使程序立即被執行。
3.為了阻止程序執行,可以透過代理把這個程序置於掛起態,代理可以是程序自己,也可以是父程序或作業系統。
4.除非代理顯式地命令系統進行進行狀態轉換,否則程序無法從這個狀態中轉移。
3.8 對於哪類實體,作業系統為了管理它而維護其資訊表?
記憶體,I/O、檔案和程序。
3.9 列出程序控制塊中的三類資訊。
程序標識,處理器狀態資訊,程序控制資訊。
3.10 為什麼需要兩種模式(使用者模式和核心模式)?
使用者模式下可以執行的指令和訪問的記憶體區域都受到限制。這是為了防止作業系統受到破壞或者修改。而在核心模式下則沒有這些限制,從而使它能夠完成其功能。
3.11 作業系統建立一個新程序所執行的步驟是什麼?
1.給新程序分配一個唯一的程序標識號。
2.給程序分配空間。
3.初始化程序控制塊。
4.設定正確的連線。
5.建立或擴充其他的資料結構。
3.12 中斷和陷阱有什麼區別?
- 在程式執行過程中,系統出現了一個必須由CPU立即處理的情況,此時,CPU 暫時中止程式的執行轉而處理這個新的情況的過程就叫做中斷。中斷與當前正在執行的程序無關的某些型別的外部事件相關,如完成一次I/O操作。
- 陷阱指的是當異常或者中斷髮生時,處理器捕捉到一一個執行執行緒,並且將控制權轉移到作業系統中某一個固定地址的機制。陷阱與當前正在執行的程序所產生的錯誤或異常條件相關,如非法的檔案訪問。
3.13 舉出中斷的三個例子。
時鐘中斷,I/O中斷,記憶體失效。
3.14 模式切換和程序切換有什麼區別?
發生模式切換可以不改變當前正處於執行態的程序的狀態。
發生程序切換時,一個正在執行的程序被中斷,作業系統指定另一個程序為執行態。程序切換需要儲存更多的狀態資訊。
作業系統--精髓與設計原理(第八版)第四章複習題答案
4.1 表3.5列出了在一個沒有執行緒的作業系統中程序控制塊的基本元素。對於多執行緒系統,這些元素中哪些可能屬於執行緒控制塊,哪些可能屬於程序控制塊?
這對於不同的系統來說通常是不同的,但一般來說,程序是資源的所有者,而每個執行緒都有它自己的執行狀態。關於表3.5中的每一項的一些結論如下:
- 程序控制資訊:排程和狀態資訊主要處於執行緒級;資料結構在兩級都可出現;程序間通訊和執行緒間通訊都可以得到支援;特權在兩級都可以存在;儲存管理通常在程序級;資源資訊通常也在程序級;
- 程序標識:程序必須被標識,而程序中的每一個執行緒也必須有自己的ID。
- 處理器狀態資訊:這些資訊通常只與程序有關。
4.2 請列出執行緒間的模式切換比程序間的模式切換開銷更低的原因。
包含的狀態資訊更少。
4.3 在程序概念中體現出的兩個獨立且無關的特點是什麼?
- 資源所有權: 程序包括存放程序映像的虛擬地址空間;回顧第3章的內容可知,程序映像是程式、資料、棧和程序控制塊中定義的屬性集。程序總具有對資源的控制權或所有權,這些資源包括記憶體、I/O通道、I/O裝置和檔案等。作業系統提供預防程序間發生不必要資源衝突的保護功能。
- 排程/執行:程序執行時採用一個或多程式(見圖1.5)的執行路徑(軌跡),不同程序的執行過程會交替進行。因此,程序具有執行態(執行、就緒等)和分配給其的優先順序,是可被作業系統排程和分派的實體。
4.4 給出在單使用者多處理系統中使用執行緒的四個例子。
- 前臺和後臺操作
- 非同步處理
- 加速執行
- 模組化程式結構。
4.5 哪些資源通常被一個程序中的所有執行緒共享?
程序中的所有執行緒共享該程序的狀態和資源,例如地址空間,檔案資源,執行特權等。
4.6 列出使用者級執行緒由於核心級執行緒的三個優點。
- 由於所有執行緒管理資料結構都在一個程序的使用者地址空間中,執行緒切換不需要核心級模式的特權,因此,程序不需要為了執行緒管理而切換到核心模式,這節省了在兩種模式間進行切換(從使用者模式到核心模式;從核心模式返回使用者模式)的開銷。
- 呼叫可以是應用程式專用的。一個應用程式可能傾向於就按單的輪詢排程演算法,而另一個應用程式可能傾向於基於優先順序的排程演算法。排程演算法可以去適應應用程式,而不會擾亂底層的作業系統排程器。
- 使用者級執行緒可以在任何作業系統中執行,不需要對底層核心進行修改以支援使用者級執行緒。執行緒庫是一組供所有應用程式共享的應用級軟體包。
4.7 列出使用者級執行緒相對於核心級執行緒的兩個缺點。
- 在典型的作業系統中,許多系統呼叫都會引起阻塞。因此,當使用者級執行緒執行一個系統呼叫時,不僅這個執行緒會被阻塞,程序中的所有執行緒都會被阻塞。
- 在純粹的使用者級程序策略中,一個多執行緒應用程式不能利用多處理器技術。核心一次只把一個程序分配給一個處理器,因此一次程序中只能有一個執行緒可以執行。
4.8 定義”套管“jacketing.
Jacketing透過呼叫一個應用級的I/O例程來檢查I/O裝置的狀態,從而將一個產生阻塞的系統呼叫轉化為一個不產生阻塞的系統呼叫。
作業系統--精髓與設計原理(第八版)第五章複習題答案
5.1 列出與併發相關的4個設計問題。
- 作業系統必須能夠跟蹤不同的程序,這可使用程序控制塊來實現。
- 作業系統必須為每個活動程序分配和釋放各種資源。有時,多個程序想訪問相同的資源。這些資源包括:
- 處理器時間: 這是排程功能。
- 儲存器: 大多數作業系統使用虛存方案。
- 檔案。
- I/O裝置。
- 作業系統必須保護每個程序的資料和物理資源,避免其他程序的無意干擾,這涉及與儲存器、檔案和I/O裝置相關的技術。
- 一個程序的功能和輸出結果必須與執行速度無關(相對於其他併發程序的執行速度)。
5.2 產生併發的三種上下文是什麼?
- 多應用程式:多道程式設計技術允許在多個活動的應用程式間動態共享處理器時間。
- 結構化應用程式:作為模組化設計和結構化程式設計的擴充套件,一些應用程式可被有效地設計成一組併發程序。。
- 作業系統結構:同樣的結構化程式設計優點適用於系統程式,且我們已知作業系統自身常常作為一組程序或執行緒實現。
5.3 執行併發程序的最基本要求是什麼?
最基本要求是增加程序間的互斥能力。
5.4 列出程序間的三種互相知道的程度,並簡要給出各自的定義。
- 程序之間相互不知道對方的存在:這是一些獨立的程序,它們不會一起工作。關於這種情況的最好例子是多個獨立程序的多道程式設計,可以是批處理作業,也可以是互動式會話,或者是兩者的混合。儘管這些程序不會一-起工作, 但作業系統需要知道它們對資源的競爭情況(competition)。例如,兩個無關的應用程式可能都想訪問同一個磁碟、檔案或印表機。作業系統必須控制對它們的訪問。
- 程序間接知道對方的存在:這些程序並不需要知道對方的程序ID,但它們共享某些物件,如一個I/O緩衝區。這類程序在共享同-一個物件時會表現出合作行為(cooperation)。
- 程序直接知道對方的存在:這些程序可透過程序ID互相通訊,以合作完成某些活動。同樣,這類程序表現出合作行為。
5.5 競爭程序和合作程序間有何區別?
競爭程序需要同時訪問相同的資源,像磁碟,檔案或印表機。合作程序要麼共享訪問一個共有的資源,像一個記憶體訪問區,要麼就與其他程序相互通訊,在一些應用程式或活動上進行合作。
5.6 列出與競爭程序相關的三個控制問題,並簡要給出各自的定義。
- 互斥(mutual exclusion): 假設兩個或更多的程序需要訪問一個不可共享的資源,如印表機。在執行過程中,每個程序都給該I/O裝置發命令,接收狀態資訊,傳送資料和接收資料。我們把這類資源稱為臨界資源(critical resource),使用臨界資源的那部分程式稱為程式的臨界區Ccritical section)。一次只允許有一 一個程式在臨界區中,這一點非常重要。
- 死鎖(deadlock):考慮兩個程序P1和P2,以及兩個資源R1和R2,假設每個程序為執行部分功能都需要訪問這兩個資源,那麼就有可能出現下列情況:作業系統把R1分配給P2,把R2分配給P1,每個程序都在等待另一個資源,且在獲得其他資源並完成功能前,誰都不會釋放自己已擁有的資源,此時這兩個程序就會發生死鎖。
- 飢餓(starvation):假設有三個程序(P1、P2 和P3),每個程序都週期性地訪問資源R。考慮這種情況,即P1擁有資源,P2和P3都被延遲,等待這個資源。當P1退出其臨界區時,P2和P3都允許訪問R,假設作業系統把訪問權授予P3,並在P3退出臨界區之前P1又要訪問該臨界區,若在P3結束後作業系統又把訪問權授予P1,且接下來把訪問權輪流授予P1和P3,那麼即使沒有死鎖,P2也可能被無限地拒絕訪問資源。
5.7 列出對互斥的要求。
要提供對互斥的支援,必須滿足以下要求:
1. 必須強制實施互斥:在與相同資源或共享物件的臨界區有關的所有程序中,一次只允許一個程序進入臨界區。
2. 一個在非臨界區停止的程序不能干涉其他程序。
3. 絕不允許出現需要訪問臨界區的程序被無限延遲的情況,即不會死鎖或飢餓。
4. 沒有程序在臨界區中時,任何需要進入臨界區的程序必須能夠立即進入。
5. 對相關程序的執行速度和處理器的數量沒有任何要求和限制。
6. 一個程序駐留在臨界區中的時間必須是有限的。
5.8 在訊號量上可以執行什麼操作?
為達到預期效果,可把訊號量視為-一個值為整數的變數,整數值上定義了三個操作:
- 一個訊號量可以初始化成非負數。
- semWait 操作使訊號量減1。若值變成負數,則阻塞執行semWait的程序,否則程序繼續執行。
- semSignal 操作使訊號量加1。若值小於等於零,則被semwait操作阻塞的程序解除陽塞。
5.9 二元訊號量和一般訊號量有何區別?
- 二元訊號量可以初始化為0或1。
- semWaitB 操作檢查訊號的值。若值為0,則程序執行semWaitB就會受阻。若值為1,則將值改為0,並繼續執行該程序。
- semSignalB 操作檢查是否有任何程序在該訊號上受阻。若有程序受阻,則透過semWaitB操作,受阻的程序會被喚醒;若沒有程序受阻,則值設定為1。
5.10 強訊號量和弱訊號量有何區別?
強訊號量要求在訊號量上等待的程序按照先進先出的規則從佇列中移出。弱訊號量沒有此規則。
5.11 什麼是管程?
管程是由一個或多個過程,一個初始化序列和區域性資料組成的軟體模組,其主要特定如下:
- 區域性資料變數只能被管程的過程訪問,任何外部過程都不能訪問。
- 一個程序透過呼叫管程的一個過程進入管程。
- 在任何時候,只能有一個程序在管程中執行,呼叫管程的任何其他程序都被阻塞,以等待管程可用。
5.12 關於訊息,阻塞和無阻塞有何區別?
傳送者和接收者任一方阻塞則訊息傳遞需要等待,都無阻塞則不需要等待。
5.13 與讀者/寫者問題相關的條件通常有哪些?
存在一個多個程序共享的資料區,該資料區可以是一個檔案,一塊記憶體等;有些程序(reader)只能讀取這個資料區中的資料,有些程序(writer)直往資料區中寫資料。此外,還必須滿足以下條件:
- 任意數量的讀程序可以同時讀這個檔案。
- 一次只有一個寫程序可以寫檔案。
- 若一次寫程序正在寫檔案,則禁止任何讀程序讀檔案。
作業系統--精髓與設計原理(第八版)第六章複習題答案
6.1 給出可重用資源和可消耗資源的例子。
- 可重用資源是指一次僅供-一個程序安全使用且不因使用而耗盡的資源。程序得到資源單元並使用後,會釋放這些單元供其他程序再次使用。可重用資源的例子包括處理器、I/O 通道、記憶體和外存、裝置,以及諸如檔案、資料庫和訊號量之類的資料結構。
- 可消耗資源是指可被建立(生產)和銷燬(消耗)的資源。某種型別可消耗資源的數量通常沒有限制,無阻塞生產程序可以建立任意數量的這類資源。消費程序得到-一個資源時,該資源就不再存在。可消耗資源的例子有中斷、訊號、訊息和I/O緩衝區中的資訊。
6.2 產生死鎖的三個必要條件是什麼?
- 互斥。一次只有一個程序可以使用一個資源。其他程序不能訪問已分配給其他程序的資源。
- 佔有且等待。當一個程序等待其他程序時,繼續佔有已分配的資源。
- 不可搶佔。不能強行搶佔程序已佔有的資源。
6.3 產生死鎖的 4個條件是什麼?
迴圈等待。存在一個閉合的程序鏈,每個程序至少佔有此鏈中下一個程序所需的一個資源。
6.4 如何防止佔有且等待條件?
為預防佔有且等待的條件,可以要求程序一次性地請求所有 需要的資源,並阻塞這個程序直到所有請求都同時滿足。這種方法有兩個方面的低效性。首先,一個程序可能被阻塞很長時間,以等待滿足其所有的資源請求。而實際上,只要有一部分資源, 它就可以繼續執行。其次,分配給一個程序的資源可能會在相當長的一段時間不會被該程序使用,且不能被其他程序使用。另一個問題是一個程序可能事先並不知道它所需要的所有資源。
6.5 給出防止不可搶佔條件的兩種方法。
- 佔有某些資源的一個程序進一步申請資源時若被拒絕,則該程序必須釋放其最初佔有的資源,必要時可再次申請這些資源和其他資源。
- 一個程序請求當前被另一個程序佔有的一個資源時,作業系統可以搶佔另一個程序,要求它釋放資源。(只有在任意兩個程序的優先順序都不同時,這種方案才能預防死鎖)。
6.6 如何防止迴圈等待條件?
迴圈等待條件可透過定義資源型別的線性順序來預防。若一 個程序已分配了R型別的資源,則其接下來請求的資源只能是那些排在R型別之後的資源。為證明這種策略的正確性,我們給每種資源型別指定一個下標。 當i<j時,資源R排在資源R,前面。現在假設兩個程序A和B死鎖,原因是A獲得R並請求R,而B獲得R,並請求R,那麼這個條件不可能,因為這意味著i<j且j<i。
6.7 死鎖避免、 檢測和預防之間的區別是什麼?
處理死鎖通常有三種方法:預防、檢測和避免。死鎖預防透過確保不滿足死鎖的一個必要條件來避免發生死鎖。作業系統總是同意資源請求時,需要進行死鎖檢測。作業系統必須週期性地檢查死鎖,並採取行動打破死鎖。死鎖避免涉及分析新的資源請求,以確定它是否會導致死鎖,且僅當不可能發生死鎖時才同意該請求。
作業系統--精髓與設計原理(第八版)第七章複習題答案
7.1記憶體管理需要滿足哪些需求?
- 重定位
- 保護
- 共享
- 邏輯組織
- 物理組織
7.2為何需要重定位程序的能力?
在多道程式設計系統中,可用的記憶體空間通常被多個程序共享。通常情況下,程式設計師事先並不知道在某個程式執行期間會有其他哪些程式駐留在記憶體中。此外,我們還希望提供一個巨大的就緒程序池,以便把活動程序換入或換出記憶體,進而使處理器的利用率最大化。程式換出到磁碟中後,下次換入時要放到與換出前相同的記憶體區域會很困難。相反,我們需要把程序重定位(relocate) 到記憶體的不同區域。
7.3 為何不可能在編譯時實施記憶體保護?
由於程式在記憶體中的位置不可預測,因而在編譯時不可能檢查絕對地址來確保保護。此外,大多數程式設計語言允許在執行時進行地址的動態計算。因此必須在執行時檢查程序產生的所有記憶體訪問。
7.4允許兩個或多 個程序訪問記憶體某一特定區域的原因是什麼?
任何保護機制都必須具有一定的靈活性,以允許多個程序訪問記憶體的同一部分。例如,多個程序正在執行同一個程式時,允許每個程序訪問該程式的同一個副本,要比讓每個程序有自己單獨的副本更有優勢。合作完成同一個任務的程序可能需要共享訪問相同的資料結構。因此,記憶體管理系統在不損害基本保護的前提下,必允許對記憶體共享區域進行受控訪問。我們將會看到用於支援重定位的機制也支援共享。
7.5 在固定分割槽方案中,使用大小不等的分割槽有何好處?
可緩解因程式太大而無法放到固定大小的分割槽和因程式太小產生大量內部碎片的問題。
7.6 內部碎片和外部碎片有何區別?
- 內部碎片:由於裝入的資料塊小於分割槽大小,因而導致分割槽內部存在空間浪費,這種現象稱為內部碎片( internal fragmentation)。
- 外部碎片:隨著時間的推移,記憶體中形成了越來越多的碎片,記憶體的利用率隨之下降。這種現象稱為外部碎片(external fragmentation),指在所有分割槽外的儲存空間變成了越來越多的碎片,這與前面所講的內部碎片正好對應。
7.7邏輯地址、相對地址和實體地址有何區別?
- 邏輯地址(logical address) 是指與當前資料在記憶體中的物理分配地址無關的訪問地址,在執行對記憶體的訪問之前必須把它轉換為實體地址。
- 相對地址(relative address) 是邏輯地址的一個特例,它是相對於某些已知點(通常是程式的開始處)的儲存單元。
- 實體地址( physical address) 或絕對地址是資料在記憶體中的實際位置。
7.8 頁和頁框有何區別?
- 頁(page):一頁指一系列的線性地址和包含於其中的資料。
- 頁框(pageframe):分頁單元認為所有的RAM被分成了固定長度的頁框每個頁框可以包含一頁,也就是說一個頁框的長度和一個頁的長度是一樣的。頁框是記憶體的一部分,是一個實際的儲存區域。頁只是一組資料塊,可以存放在任何頁框中。
也就是說頁對應的是線性(虛擬)地址的東西,而頁框對應的是實體地址,是實際的儲存區域。
7.9頁和段有何區別?
頁大小相等,段可以大小不等;分頁對程式設計師來說是透明的,而分段通常是可見的。
8.作業系統--精髓與設計原理(第八版)第八章複習題答案
8.1 簡單分頁與虛擬記憶體分頁有何區別?
程序執行時,簡單分頁的所有頁必須都在記憶體中,除非使用了覆蓋技術,虛存分頁並非所有頁都須在記憶體頁框中,僅在需要時才讀入頁,把一頁讀入記憶體可能需要把另一頁寫出到磁碟。
8.2 什麼是抖動?
當作業系統讀取一塊記憶體時,它必須把另一塊換出。 如果一塊正好在將要用到之前換出,作業系統就不得不很快地把它取回。這類操作通常會導致一種稱為系統抖動( thrashing)的情況。這樣會使處理器的大部分時間都用於交換塊而非執行指令。
8.3 為何在使用虛擬記憶體時,區域性性原理至關重要?
區域性性原理描述了一個程序中程式和資料引用的集簇傾向。因此,假設在很短的時間內僅需要程序的一部分塊是合理的。同時,還可以對將來可能會訪問的塊進行猜測,從而避免系統抖動。區域性性原理表明虛擬記憶體方案是可行的。
8.4 哪些元素是頁表項中能找到的典型元素?簡單定義每個元素。
- 頁號: 虛擬地址的頁號部分。
- 程序標誌符:使用該頁的程序。頁號和程序標誌符共同標誌-個特定程序的虛擬地址空間的一頁。
- 控制位: 該域包含一些標記, 比如有效、訪問和修改,以及保護和鎖定資訊。
- 鏈指標: 若某項沒有鏈項,則該域為空(或用一個單獨的位來表示)。否則,該域包含鏈中下一項的索引值(0~2^m -1之間的數字)。
8.5 轉換檢測緩衝區的目的是什麼?
原則上,每次虛存訪問都可能會引起兩次實體記憶體訪問:一次取相應的頁表項,另一次取需要的資料。因此,簡單的虛擬記憶體方案會導致記憶體訪問時間加倍。為克服這個問題,大多數虛擬記憶體方案都為頁表項使用了一個特殊的快取記憶體,通常稱為轉換檢測緩衝區(TranslationLookaside Buffer, TLB)。
8.6 簡單定義兩種可供選擇的頁面讀取策略。
- 請求分頁,只有當訪問到某頁中的一個單元時才將該頁取入記憶體。若記憶體管理的其他策略比較合適,將發生下述情況:當一個程序首次啟動時,會在一段時間出現大量的缺頁中斷:取入越來越多的頁後,區域性性原理表明大多數將來訪問的頁都是最近讀取的頁。因此,在一段時間後錯誤會逐漸減少,缺頁中斷的數量會降到很低。
- 預先分頁,讀取的頁並不是缺頁中斷請求的頁。預先分頁利用了大多數輔存裝置(如磁碟)的特性,這些裝置有尋道時間和合理的延遲。若一 個程序的頁連續儲存在輔存中,則一次讀取許多連續的頁要比隔一段時間讀取一 頁有效。 當然,若大多數額外讀取的頁未引用到,則這個策略是低效的。
8.7 駐留集管理和頁面置換策略有何區別?
駐留集管理的概念為:
(1)給每個活動程序分配多少頁框。
(2)計劃置換的頁集是侷限於那些缺頁中斷的程序,還是侷限於所有頁框都在記憶體中的程序。
置換策略的概念為:在計劃置換的頁集中,選擇換出哪一頁。
8.8 FIFO 和時鐘頁面置換演算法有何聯絡?
最簡單的時鐘策略需要給每個頁框關聯一個稱為使用位的附加位。FIFO和時鐘頁面置換演算法都會掃描緩衝區,FIFO直接置換出最老的頁,而在時鐘策略中會跳過使用位為1的頁框。
8.9 頁緩衝實現什麼功能?
為提升效能,不丟棄置換出的頁,被置換出的頁任然駐留在記憶體中。因此,若程序訪問該頁,則可迅速返回該程序的駐留集,且代價很小。
8.10 為什麼不能把全域性置換策略和固定分配策略組合起來?
因為固定分配策略下,駐留集的大小是固定不變的,從記憶體中移出的一頁必須由同一個程序的另一頁置換。
8.11 駐留集和工作集有何區別?
駐留集表示程序在記憶體中的頁集,工作集表示程序在過去的一段時間中被訪問到的頁集。
8.12 請求式清除和預約式清除有何區別?
- 請求式清除(demand cleaning),只有當一頁被選擇用於置換時才被寫回輔存;
- 預約式清除(precleaning) 策略則將這些已修改的多頁在需要使用它們所佔據的頁框之前成批寫回輔存。
作業系統--精髓與設計原理(第八版)第九章複習題答案
9.1簡要描述三種型別的處理器排程。
- 長程排程:決定加入待執行程序池。
- 中稱排程:決定加入部分或全部位於記憶體中的程序集合。
- 短程排程: 決定可用I/O裝置處理哪個程序掛起的I/O請求。
9.2在互動式作業系統中,通常最重要的效能要求是什麼?
響應時間
9.3 週轉時間和響應時間有何區別?
週轉時間指一個程序從提交到完成之間的時間間隔,包括實際執行時間和等待資源(包括處理器資源)的時間;響應時間指從提交一個請求到開始接收響應之間的時間間隔。
9.4 對於程序排程, 較小的優先順序值是表示較低的優先順序還是表示較高的優先順序?
對於UNIX和許多其他作業系統中,優先順序數值越大,表示的程序優先順序越低。某些系統如Windows的用法正好相反,即大數值表示高優先順序。
9.5 搶佔式排程和非搶佔式排程有何區別?
- 非搶佔:在這種情況下,一旦程序處於執行狀態,就會不斷執行直到終止,程序要麼因為等待I/O,要麼因為請求某些作業系統服務而阻塞自己。
- 搶佔:當前正執行程序可能被作業系統中斷,並轉換為就緒態。一個新程序到達時,或中斷髮生後把一個阻塞態程序置為就緒態時,或出現週期性的時間中斷時,需要進行搶佔決策。
9.6 簡單定義FCFS排程。
每個程序就緒後,會加入就緒佇列。當前正執行的程序停止執行時,選擇就緒佇列中存在時間最長的程序執行。
9.7 簡單定義輪轉排程。
這種演算法週期性地產生時鐘中斷,出現中斷時,當前正執行的程序會放置到就緒佇列中,然後基於FCFS策略選擇下一個就緒作業執行。
9.8 簡單定義最短程序優先排程。
這是一個非搶佔策略,其原則是下次選擇預計處理時間最短的程序。
9.9 簡單定義最短剩餘時間排程。
最短剩餘時間是在SPN中增加了搶佔機制的策略。在這種情況下,排程程式總是選擇預期剩餘時間最短的程序。
9.10 簡單定義最高響應比優先排程。
當前程序完成或被阻塞時,選擇R值最大的就緒程序。排程決策基於對歸一化週轉時間的估計。
9.11 簡單定義反饋排程。
排程基於搶佔原則並使用動態優先順序機制。建立一組排程佇列,基於每個程序的執行歷史和其他一 些規則,把它們分配到各個佇列中。