考研OR工作----計算機操作系統簡答題及疑難知識點總結(第五章 虛擬存儲器)

  在第五章的學習中,主要理解虛擬存儲器的基本概念和它的具體實現方法,當然也需要朋友們對請求分頁系統的基本原理知識有所瞭解,看這篇文章的時候,會更加能夠吸收相應的“簡答”題型或者是會“計算”相應的題型。本章的內容參考《計算機操作系統》(第四版 湯子瀛)的書籍相應章節。阿婆主只是知識的搬運工~

  目錄(檢索你需要知道的知識點)

  第五章操作系統的基礎知識點

  5.1 虛擬存儲器基本概念中的典型問題分析

  5.1.1 什麼是虛擬存儲器?如何實現頁式虛擬存儲器?

  5.1.2 “整體對換從邏輯上也擴充了內存,因此也實現了虛擬存儲器的功能”這種說法是否正確,請說明理由。

  5.2 請求分頁/段系統中的典型問題分析

  5.2.1 在請求分頁系統中,爲什麼說一條指令執行期間可能產生多次缺頁中斷?

  5.2.2 在置換算法中,LRU和LFU哪個更常用?爲什麼?

  5.2.3 在一採取局部置換策略的請求分頁系統中,分配給某個作業的內存塊數爲4,其中存放的四個頁面的情況如下表所示...

  5.2.4 在一個請求分頁系統中,假如一個作業的頁面走向爲4,3,2,1,4,3,5,4,3,2,1,5,目前它還沒有任何頁裝入內存,當分配給該作業的物理塊數目M分別爲3和4時,請分別計算採用LRU和FIFO頁面淘汰算法時,訪問過程中所發生的缺頁次數和缺頁率,並比較所得的結果。

  5.2.5 某頁式虛擬存儲管理系統中,頁面大小爲1K字節,一進程分配到的內存塊數爲3,並按下列地支順序引用內存單元:3635,3632,1140,3584,2892,3640,0040,2148,1700,2145,3209,0000,1102,1100。如果上述數字均爲十進制數,而內存中尚未裝入任何頁,請:

  (1)給出使用LRU算法時的缺頁次數,並與使用FIFO算法時的情況進行比較;

  (2)用流程圖的方式解釋地址變換的過程(缺頁時只需指出產生缺頁中斷以請求調頁,具體的中斷處理流程不需畫出)。

  5.2.6 有一二維數組:

  VAR A:ARRAY[1..100,1..100] OF integer;

  按先行後列的次序存儲。對一採用LRU置換算法的頁式虛擬存儲器系統,假設每頁可存放200個整數。若分配給一個進程的內存塊數爲3,其中一塊用來裝入程序和變量i、j,另外兩塊專門用來存放數組(不作他用),且程序段已在內存,但存放數組的頁面尚未裝入內存。請分別就下列程序,計算執行過程中的缺頁次數。

  5.2.7 某虛擬存儲器的用戶空間共有32個頁面,每頁1KB,主存16KB。假定某時刻系統爲用戶的第0、1、2、3頁分配的物理塊號爲5、10、4、7,而該用戶作業的長度爲6頁,試將十六進制的虛擬地址0A5C、103C、1A5C轉換成物理地址。

  5.2.8 考慮一個請求調頁系統,它採用全局置換策略和平均分配內存塊的算法(即,若有m個內存塊和n個進程,則每個進程分得m/n個內存塊)。如果在該系統中測得如下的CPU和對換盤利用率,請問能否增加多道程序的度數來增加CPU的利用率?爲什麼?

  5.2.9 現有一請求調頁系統,頁表保存在寄存器中。若一個被替換的頁未被修改過,則處理一個缺頁中斷需要8毫秒;若被替換的頁已被修改過,則處理一個缺頁中斷需要20毫秒。內存存取時間爲1微妙,訪問頁表的時間可忽略不計。假定70%被替換的頁被修改過,爲保證有效存取時間不超過2微妙,可接受的最大缺頁率是多少?

  5.2.10 假如一個程序的段表如下表,其中存在位爲1表示段在內存,存區控制字段中W表示可寫,R表示可讀,E表示可執行。對下面可執行。對下面的指令,在執行時會產生什麼樣的結果?

  5.2.11 請求分頁管理系統中,假設某進程的頁表內容如下表。  頁面大小爲4KB,一次內存的訪問時間是100ns,一次快表(TLB)的訪問時間是10ns,處理一次缺頁的平均時間爲108ms(已含更新TLB和頁表的時間),進程的駐留集大小固定爲2,採用LRU置換算法和局部淘汰策略。假設a、TLB初始爲空;b、地址轉換時先訪問TLB,若TLB未命中,再訪問頁表(忽略訪問頁表之後的TLB更新時間);c、有效位爲0表示頁面不再內存,產生缺頁中斷,缺頁中斷處理後,返回到產生缺頁中斷的指令處重新執行。設有虛地址訪問序列2362H、1565H、25A5H,請問依次訪問上述三個虛地址,各需多少時間?給出計算過程。

 

  第五章操作系統的基礎知識點

  5.1 虛擬存儲器基本概念中的典型問題分析

  5.1.1 什麼是虛擬存儲器?如何實現頁式虛擬存儲器?

  答:虛擬存儲器是指具有請求調入功能和置換功能,能從邏輯上對內存容量進行擴充的一種存儲系統。從用戶觀點看,虛擬存儲器具有比實際內存大得多的容量,其邏輯容量由邏輯地址結構以及內存和外存容量之和決定,其運行速度接近於內存的速度,而每位成本卻又接近於外存。

  爲實現虛擬存儲器,首先需要擴充頁表,增加狀態位以指出所需頁是否在內存,增加外存始址以便調入頁面,增加引用位以供置換算法用,增加修改位使得換出時減少寫入磁盤次數。另外,還要使用以下兩種關鍵技術。

  (1)請求調頁技術。該項技術是指及時將進程所要訪問的、不在內存中的頁調入內存。該功能是由硬件(缺頁中斷機構發現缺頁)和軟件(將所需頁調入內存)配合實現的。

  (2)置換頁技術。該項技術是指當內存中已無足夠空間用來裝入即將調入的頁時,爲了保證進程能繼續運行,系統必須換出內存中的部分頁,以騰出足夠的空間。具體的置換操作並不複雜,其關鍵是應將哪些頁換出,即採取什麼置換算法。

 

  5.1.2 “整體對換從邏輯上也擴充了內存,因此也實現了虛擬存儲器的功能”這種說法是否正確,請說明理由。

  答:上述說法是錯誤的。整體對換將內存中暫時不用的某個程序及其數據換出至外存,騰出足夠的內存空間以裝入在外村中的、具備運行條件的進程所對應的程序和數據。虛擬存儲器是指僅把作業的一部分裝入內存便可運行作業的存儲器系統,它的實現必須建立在離散分配的基礎上。雖然整體對換和虛擬存儲器均能從邏輯上擴充內存空間,但整體對換不具備離散型,實際上,在具有整體對換功能的系統中,進程的大小仍將受到實際內存容量的限制。

 

  5.2 請求分頁/段系統中的典型問題分析

  5.2.1 在請求分頁系統中,爲什麼說一條指令執行期間可能產生多次缺頁中斷?

  答:因請求調頁時,只要作業的部分頁在內存,該作業就能執行,而在執行過程中發現所要訪問的指令或數據不在內存時,則產生缺頁中斷,將所需的頁面調入內存。在請求調頁系統中,一條指令(如 copy A to B)可能跨了兩個頁,而其中要訪問的操作數可能與指令不在同一個頁上,且操作數本身也可能跨了兩個頁。當要執行這類指令,而相應的頁都不在內存時,就將產生多次缺頁中斷。

 

  5.2.2 在置換算法中,LRU和LFU哪個更常用?爲什麼?

  答:LRU置換算法比LFU置換算法更常用。

  置換算法總是希望被換出的頁(段),在不久的將來再被訪問的概率儘可能小。然而LFU算法往往不能實現這一點。因爲在LFU算法中,某頁被訪問的次數是用計數器計數的,在有些情況下,剛被調入的頁(段)由於局部性原理,可能立即被訪問多次,因而其計數器的計數值會很大;但過了這一小段時間後,該頁(段)又不再被訪問。這樣,在根據置換算法確定的原則選擇某一頁(段)將之換出時,這樣的頁(段)會被留在內存中,而將其他頁(段)換出去。如此被調出的頁(段),雖然在剛纔一段時間內其被訪問次數的計數值較小,但有可能馬上又要訪問。可見,LFU算法的置換選擇可能導致較壞的選擇。

  但在LRU算法中,由於是選擇最近最久未被訪問的頁(段)置換出去,即預計在最近的將來該頁被訪問的概率也很小。所以,這種置換算法可能導致較好的選擇,這使LRU算法或其近似算法,獲得了較好的應用。

 

  5.2.3 在一採取局部置換策略的請求分頁系統中,分配給某個作業的內存塊數爲4,其中存放的四個頁面的情況如下表所示:

表:具有四個頁面的作業表
物理塊 虛頁號 裝入時間 最後一次訪問時間 訪問位 修改位
0 2 60 157 0 1
1 1 160 161 1 0
2 0 26 158 0 0
3 3 20 163 1 1

    表中的所有數字均爲十進制數,所有時間都是從進程開始運行時,從0開始計數的時鐘數。請問,如果系統採用下列置換算法,將選擇哪一頁進行換出?

  (1)FIFO算法;

  (2)LRU算法;

  (3)改進的Clock算法。

  分析:FIFO算法即先進先出算法,它選擇最先裝入內存的頁面進行換出;LRU算法即最近最久未用置換算法,它選擇最近最長時間沒被使用的頁面進行換出;改進的Clock算法是一種常用的LRU近似算法,它優先選擇訪問位和修改位均爲0的頁面進行換出。

  答:(1)FIFO算法選擇的換出頁是物理塊3中的第3頁。

  (2)LRU算法選擇的換出頁是物理塊0中的第2頁。

  (3)改進的Clock算法選擇的換出頁是物理塊2中的第0頁。

 

  5.2.4 在一個請求分頁系統中,假如一個作業的頁面走向爲4,3,2,1,4,3,5,4,3,2,1,5,目前它還沒有任何頁裝入內存,當分配給該作業的物理塊數目M分別爲3和4時,請分別計算採用LRU和FIFO頁面淘汰算法時,訪問過程中所發生的缺頁次數和缺頁率,並比較所得的結果。

  分析:如果所訪問的頁還沒裝入內存,便將發生一次缺頁中斷,訪問過程中發生缺頁中斷的次數就是缺頁次數,而缺頁的次數除以總的訪問次數,就是缺頁率。

  答:(1)使用LRU算法時,訪問過程中發生缺頁的情況爲:當M=3時,缺頁次數爲10,缺頁率爲10/12(如下表1);當M爲4時,缺頁次數爲8,缺頁率爲8/12(如下表2)。可見,增加分配給作業的內存塊數,可減少缺頁次數,從而降低缺頁率。

表1 訪問過程中的缺頁情況(M=3,LRU算法)
頁面走向 4 3 2 1 4 3 5 4 3 2 1 5
缺頁(Y/N) Y Y Y Y Y Y Y N N Y Y Y
最近最長時間未用的內存頁     4 3 2 1 4 3 5 4 3 2
                     \downarrow   4 3 2 1 4 3 5 4 3 2 1
最近剛使用過的內存頁 4 3 2 1 4 3 5 4 3 2 1 5
被換出的頁       \downarrow \downarrow \downarrow \downarrow     \downarrow \downarrow \downarrow
表2 訪問過程中的缺頁情況(M=4,LRU算法)
頁面走向 4 3 2 1 4 3 5 4 3 2 1 5
缺頁(Y/N) Y Y Y Y N N Y N N Y Y Y
最近最長時間未用的內存頁       4 3 2 1 1 1 5 4 3
 \downarrow     4 3 2 1 4 3 5 4 3 2
 \downarrow   4 3 2 1 4 3 5 4 3 2 1
最近剛使用過的內存頁 4 3 2 1 4 3 5 4 3 2 1 5
被換出的頁             \downarrow     \downarrow \downarrow \downarrow

  (2)使用FIFO算法時,訪問過程中發生缺頁的情況爲:當M=3時,缺頁次數爲9,缺頁率爲9/12(如下表3);當M爲4時,缺頁次數爲10,缺頁率爲10/12(如下表4).可見,增加分配給作業的內存塊數,反而增加了缺頁次數,提高了缺頁率,這種異常現象被稱作Belady現象。

表3 訪問過程中的缺頁情況(M=3,FIFO算法)
頁面走向 4 3 2 1 4 3 5 4 3 2 1 5
缺頁(Y/N) Y Y Y Y Y Y Y N N Y Y N
最早進入內存的頁面     4 3 2 1 4 4 4 3 5 5
 \downarrow   4 3 2 1 4 3 3 3 5 2 2
最晚進入內存的頁面 4 3 2 1 4 3 5 5 5 2 1 1
被換出的頁      

\downarrow

\downarrow

 2

 \downarrow

 1

 \downarrow

   

\downarrow

 3

 \downarrow

 
表4 訪問過程中的缺頁情況(M=4,FIFO算法)
頁面走向 4 3 2 1 4 3 5 4 3 2 1 5
缺頁(Y/N) Y Y Y Y N N Y Y Y Y Y Y
最早進入內存的頁面       4 4 4 3 2 1 5 4 3
 \downarrow     4 3 3 3 2 1 5 4 3 2
 \downarrow   4 3 2 2 2 1 5 4 3 2 1
最晚進入內存的頁面 4 3 2 1 1 1 5 4 3 2 1 5
被換出的頁            

\downarrow

3\downarrow

2

\downarrow

\downarrow \downarrow \downarrow

 

  5.2.5 某頁式虛擬存儲管理系統中,頁面大小爲1K字節,一進程分配到的內存塊數爲3,並按下列地支順序引用內存單元:3635,3632,1140,3584,2892,3640,0040,2148,1700,2145,3209,0000,1102,1100。如果上述數字均爲十進制數,而內存中尚未裝入任何頁,請:

  (1)給出使用LRU算法時的缺頁次數,並與使用FIFO算法時的情況進行比較;

  (2)用流程圖的方式解釋地址變換的過程(缺頁時只需指出產生缺頁中斷以請求調頁,具體的中斷處理流程不需畫出)。

  答:(1)根據題意,分配給作業的內存塊數爲3,而頁面的引用次序爲3、3、1、3、2、3、0、2、1、2、3、0、1、1。因此,可以計算出,採用LRU算法時,缺頁次數爲8;採用FIFO算法時,缺頁次數爲6.

  LRU算法用最近的過去作爲預測最近的將來的依據,因爲程序執行的局部性規律,一般有較好的性能,但實現時,要記錄最近在內存的每個頁面的使用情況,比FIFO算法困難,其開銷也大。有時,因頁面的過去和未來的走向之間並無必然的聯繫,如上面,LRU算法的性能就沒想象中那麼好。

  (2)地址變換的流程圖如下(摘自書中)。

                                                                                  圖 地址變換流程圖

 

 5.2.6 有一二維數組:

  VAR A:ARRAY[1..100,1..100] OF integer;

  按先行後列的次序存儲。對一採用LRU置換算法的頁式虛擬存儲器系統,假設每頁可存放200個整數。若分配給一個進程的內存塊數爲3,其中一塊用來裝入程序和變量i、j,另外兩塊專門用來存放數組(不作他用),且程序段已在內存,但存放數組的頁面尚未裝入內存。請分別就下列程序,計算執行過程中的缺頁次數。

  程序 1:

    FOR I := 1 TO 100 DO

           FOR j := 1 TO 100 DO

           A[i,j] := 0

  程序 2:

    FOR j := 1 TO 100 DO

           FOR i := 1 TO 100 DO

           A[i,j] := 0

  答:對程序1,首次缺頁中斷(訪問A[0,0]時產生)將裝入數組的第1、2行共200個整數,由於程序是按行對數組進行訪問的,只有在處理完200個整數後纔會再次產生缺頁中斷;以後每調入一頁,也能處理200個整數,因此,處理100*100個整數共將發生50次缺頁。

  對程序2,首次缺頁中斷同樣將裝入數組的第1、2行共200個整數,但由於程序是按列對數組進行訪問的,因此在處理完2個整數後又會再次產生缺頁中斷;以後每調入一頁,也只能處理2個整數,因此,處理100*100個整數共將發生5000次缺頁。

 

  5.2.7 某虛擬存儲器的用戶空間共有32個頁面,每頁1KB,主存16KB。假定某時刻系統爲用戶的第0、1、2、3頁分配的物理塊號爲5、10、4、7,而該用戶作業的長度爲6頁,試將十六進制的虛擬地址0A5C、103C、1A5C轉換成物理地址。

  答:由題目所給條件可知,該系統的邏輯地址有15位,其中高5位爲頁號,低10位爲頁內地址;物理地址有14位,其中高4位爲塊號,低10位爲塊內地址。另外,由於題目中給出的邏輯地址是十六進制數,故可先將其轉換成二進制數以直接獲得頁號和頁內地址,再完成地址的轉換。

  (1)如下圖,邏輯地址(0A5C)的頁號爲(00010),即2,故頁號合法;從頁表中找到對應的內存塊號爲4,即(0100);與頁內地址(10 0101 1100)拼接形成物理地址(010010 0101 1100),即(125C)。

  

                                                                              圖 十六進制的地址轉換

  (2)邏輯地址(103C)的頁號爲4,頁號合法,但該頁未裝入內存,故產生缺頁中斷。

  (3)邏輯地址(1A5C)的頁號爲6,爲非法頁號,故產生越界中斷。

 

  5.2.8 考慮一個請求調頁系統,它採用全局置換策略和平均分配內存塊的算法(即,若有m個內存塊和n個進程,則每個進程分得m/n個內存塊)。如果在該系統中測得如下的CPU和對換盤利用率,請問能否增加多道程序的度數來增加CPU的利用率?爲什麼?

  (1)CPU的利用率爲13%,盤利用率爲97%;

  (2)CPU的利用率爲87%,盤利用率爲3%;

  (3)CPU的利用率爲13%,盤利用率爲3%;

  答:(1)這種情況表示系統在進行頻繁的置換,已致絕大部分時間被花在頁面置換上,此時,增加多道程序的度數會進一步增加缺頁率,是系統性能進一步惡化,所以,不能用增加多道程序的度數來增加CPU的利用率,反而應減少內存中的作業道數。

  (2)在這種情況下,CPU的利用率已相當高,但對換盤的利用率卻相當低,這表示運行進程的缺頁率很低,可以適當增加多道程序的度數來增加CPU的利用率。

  (3)在這種情況下,CPU的利用率相當低,而且對換盤的利用率也非常低,表示內存中可運行的程序數不足,此時,應該增加多道程序的度數來增加CPU的利用率。

 

  5.2.9 現有一請求調頁系統,頁表保存在寄存器中。若一個被替換的頁未被修改過,則處理一個缺頁中斷需要8毫秒;若被替換的頁已被修改過,則處理一個缺頁中斷需要20毫秒。內存存取時間爲1微妙,訪問頁表的時間可忽略不計。假定70%被替換的頁被修改過,爲保證有效存取時間不超過2微妙,可接受的最大缺頁率是多少?

  答:如果用p表示缺頁率,則有效訪問時間不超過2微妙可表示爲:

  (1-p)*1 us + p*(0.7*20ms + 0.3*8ms + 1us) <= 2us

  因此可計算出:p<= 1/16400  (=0.00 006),即可接受的最大缺頁率爲0.00006。

  

  5.2.10 假如一個程序的段表如下表,其中存在位爲1表示段在內存,存區控制字段中W表示可寫,R表示可讀,E表示可執行。對下面可執行。對下面的指令,在執行時會產生什麼樣的結果?

  (1)STORE R1,[0,70]

  (2)STORE R1,[1,20]

  (3)LOAD R1,[3,20]

  (4)LOAD R1,[3,100]

  (5)JMP    [2,100]

表 段 表
段號 存在位 內存始址 段長 存取控制 其他信息
0 0 500 100 W  
1 1 1000 30 R  
2 1 3000 200 E  
3 1 8000 80 R  
4 0 5000 40 R  

  分析:在執行指令的過程中,如果指令中包含有地址部分,則先必須進行邏輯地址到物理地址的轉換。在地址轉換過程中還要進行越界檢查和存取控制權限的檢查,只有在地址不越界、訪問方式也合法,並形成物理地址後,才能去完成指令規定的操作。

  答:(1)指令STORE R1,[0,70]。從段表的第0項可讀出第0段的存在位爲0,表示相應段未裝入內存,因此地址變換機構將產生一缺段中斷,以請求OS將其調入內存。

  (2)指令STORE R1,[1,20]。從段表的第1項可以看出,雖然指令中的邏輯地址合法、段也在內存,但本指令對內存的訪問方式(寫)與存取控制字段(只讀)不符,故硬件將產生保護性中斷信號。

  (3)指令LOAD R1,[3,20]。從段表的第3項可讀出第3段的存在位爲1,內存始址爲8000,段長爲80,存取控制爲R,因此,邏輯地址合法,訪問方式也合法,形成物理地址8020後,指令將把該單元的內容讀到寄存器R1中。

  (4)指令LOAD R1,[3,100]。從段表的第3項可讀出第3段的存在位爲1,內存始址爲8000,段長爲80,存取控制爲R,因此,指令的邏輯地址中段內地址超過了段長,地址變換機構將產生越界中斷信號。

  (5)指令JMP [2,100]。從段表的第2項可讀出第2段的存在位爲1,內存始址爲3000,段長爲200,訪問權限爲E,因此邏輯地址與訪問方式都合法,形成物理地址3100,指令執行後,將跳轉到內存單元3100處繼續執行。

  

  5.2.11 請求分頁管理系統中,假設某進程的頁表內容如下表。

表 請求頁表
頁號 頁框(Page Frame)號 有效位(存在位)
0 101H 1
1 -- 0
2 254H 1

  頁面大小爲4KB,一次內存的訪問時間是100ns,一次快表(TLB)的訪問時間是10ns,處理一次缺頁的平均時間爲108ms(已含更新TLB和頁表的時間),進程的駐留集大小固定爲2,採用LRU置換算法和局部淘汰策略。假設a、TLB初始爲空;b、地址轉換時先訪問TLB,若TLB未命中,再訪問頁表(忽略訪問頁表之後的TLB更新時間);c、有效位爲0表示頁面不再內存,產生缺頁中斷,缺頁中斷處理後,返回到產生缺頁中斷的指令處重新執行。設有虛地址訪問序列2362H、1565H、25A5H,請問依次訪問上述三個虛地址,各需多少時間?給出計算過程。

  答:(1)邏輯地址2362H:頁號爲2,頁內地址爲362H。先訪問TLB(10ns),未命中;再去訪問頁表(100ns),獲得對應的物理塊號254H,從而拼接成物理地址254362H,同時將第2頁的信息裝入TLB中;最後根據這個物理地址訪問內存(100ns)。故訪問到虛地址對應單元的數據總共需要210ns。

  (2)邏輯地址1565H:頁號爲1,頁內地址爲565H。先訪問TLB(10ns),未命中;再去訪問頁表(100ns);存在位爲0,因此產生缺頁中斷,中斷處理的時間爲108ms,在中斷處理時,因爲內存已滿,須淘汰一個內存頁,LRU算法將選擇淘汰第0頁,然後將第101H號頁框分配給第一頁,並以此更新TLB和頁表;接着重新執行指令,訪問TLB(10ns)便可得到頁對應的物理塊號101H,與頁內地址爲565H拼接成物理地址101565H,最後根據這個物理地址訪問內存(100ns)。總共需要:10ns+100ns+108ms+10ns+100ns =(約等於) 108ms。

  (3)邏輯地址25A5H:頁號爲2,頁內地址爲5A5H。先訪問TLB(10ns),命中(在訪問2362H時已將該頁信息裝入TLB),獲得對應的物理塊號254H,從而拼接成物理地址2545A5H;最後根據這個物理地址訪問內存(100ns).故總共需要110ns。

 

 

鍥而舍之,朽木不折;鍥而不捨,金石可鏤。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章