1. 程式人生 > >現代作業系統 第三章 記憶體管理 習題

現代作業系統 第三章 記憶體管理 習題

Chapter03

第三章 記憶體管理 習題


知識點小記

  1. 當一個程序發生缺頁中斷的時候,程序會陷入核心態,執行以下操作: 1、檢查要訪問的虛擬地址是否合法 2、查詢/分配一個物理頁 3、填充物理頁內容(讀取磁碟,或者直接置0,或者啥也不幹) 4、建立對映關係(虛擬地址到實體地址)
  2. 當發生缺頁中斷/缺頁錯誤時,作業系統要找一個較少使用的頁框,把它的內容寫回磁碟。把剛才需要訪問的頁面讀到剛回收的頁框中,修改MMU中的對映關係,有兩處:將回收的虛擬頁面的表項標記為未對映,把新裝入的虛擬頁面的頁框號修改成回收的頁框,並標記為已對映。
  3. 16位的虛擬地址分為4位的頁號和12位的偏移量。四位頁號可以表示16個頁面。頁號作為頁表的索引,以得到對應於虛擬頁面的頁框號。
  4. 加速分頁過程: 1.轉換檢測緩衝區(快表)(TLB):將一個虛擬地址放入MMU中進行轉換時,硬體首先將該虛擬頁號與TLB中所有表項同時(並行)進行匹配,如果發現了有效匹配就直接從TLB中取出頁框號,而不必再訪問頁表。如果沒有有效匹配項,MMU就會進行正常的頁表查詢,接著從TLB中淘汰一個表象,用新找到的頁表項代替它。 2.軟體TLB管理。
  5. 針對大記憶體的頁表: 1.多級頁表:頂級頁表-二級頁表-······· 2.倒排頁表(反置頁表):表項和實體記憶體中的頁框數量一樣
  6. 頁面置換演算法:
  • OPT最優頁面置換演算法(不可能實現)
  • NRU最近未使用頁面置換演算法:訪問位R,修改位M,初始值設定為0,R位被定期清零。
  • FIFO先進先出頁面置換演算法:發生缺頁中斷時,淘汰表頭的頁面並把新調入的頁面加到表尾。
  • Second Chance第二次機會頁面置換演算法:對FIFO的修改,如果表頭的R位是0,則淘汰,若為1,則將R清零,並放回表尾。
  • Clock時鐘頁面置換演算法:把所有頁面儲存在環形連結串列中,用一個錶針指向最老的頁面,避免了在連結串列中移動頁面。發生缺頁中斷時,首先檢查指標指向的頁面,如果R位是0,則淘汰,若為1,則將R位清零,並把指標前移一個位置。
  • LRU最近最少未使用頁面置換演算法:在缺頁中斷髮生時,置換未使用時間最長的頁面,實現代價很高。
  • NFU最不常用演算法:每個頁面與一個軟體計數器相關聯,每次發生時鐘中斷,將每個頁面的R位加到計數器上。
  • Aging老化演算法:修改NFU,變成老化演算法可以很好的模擬LRU。每次記錄R位時,先將計數器右移,然後把R的值加到最高位。發生缺頁中斷時,將置換計數器值最小的頁面。有兩點區別:1.無法區分一個時鐘滴答中頁面訪問的先後順序。2.老化演算法的計數器位數是有限的,限制了對以往頁面的記錄。
  • 工作集頁面置換演算法:發生缺頁中斷時,淘汰一個不在工作集中的頁面。工作集是最近k次記憶體訪問所使用過的頁面的集合。但是計算出工作集並不容易,常見的方法是用一定時間內記憶體訪問的頁面的集合作為工作集的近似。需要記錄上次訪問時間。
  • WSClock工作集時鐘頁面置換演算法 :與時鐘演算法有點類似,把所有頁面儲存在環形連結串列中。發生缺頁中斷時,首先檢查指標指向的頁面,若為1,則將R位清零,並把指標前移一個位置。如果R位是0,則計算生存時間,並與t比較,若大於t且頁面是乾淨的(在磁碟上有副本),則淘汰頁面,否則指標前移。
  • PFF缺頁中斷率演算法:計算每秒的缺頁中斷數,調整分配集(給程序在記憶體中分配多少頁框)的大小。

7.分頁守護程序:定期被喚醒以檢查記憶體的狀況,空閒頁框過少,則根據演算法選擇頁面換出記憶體,如果頁面被修改過,就寫回磁碟。如果想使用一個被淘汰的頁面,且頁框還沒有被覆蓋,則可以從空閒頁框緩衝池中移出並恢復該頁面。

8. 缺頁中斷處理

  • 硬體陷入核心,堆疊儲存程式計數器PC,把當前指令的狀態儲存在特殊的CPU暫存器中。
  • 啟動彙編程式碼例程儲存通用暫存器和易失資訊。
  • 作業系統嘗試發現需要那個虛擬頁面,如果硬體暫存器沒有包含這一資訊,作業系統必須檢索程式計數器,取出指令,並用軟體分許。
  • 知道了發生缺頁中斷的虛擬地址後,先檢查這個地址是否有效,並檢查存取與保護是否一致:若不一致,向程序發出訊號或殺死程序;若地址有效且沒有保護錯誤,則檢查是否有空閒頁框,若沒有則用頁面置換演算法尋找一個頁面來淘汰。
  • ·······
  • 當磁碟中的頁面內容全部裝入頁框後,向作業系統傳送一箇中斷。作業系統更新記憶體中的頁表項,將虛擬頁面對映的頁框號更新為寫入的頁框,並將頁框標記為正常狀態。
  • 恢復缺頁中斷髮生前的狀態,程式指令器重新指向引起缺頁中斷的指令。
  • 排程引起頁面中斷的程序,作業系統返回彙編程式碼例程。
  • 彙編程式碼例程恢復現場,將之前儲存在通用暫存器中的資訊恢復。

9. 32位虛擬地址包含10位目錄,10位頁面和12位偏移量。


1.IBM360有一個設計,為了對2KB大小的塊進行加鎖,會對每個塊分配一個4bit的金鑰,這個金鑰存在PSW(程式狀態字)中,每次記憶體引用時,CPU都會進行金鑰比較。但該設計有諸多缺陷,除了描述中所言,請另外提出至少兩條缺點。

A:金鑰只有四位,故記憶體只能同時容納最多十六個程序;需要用特殊硬體進行比較,同時保證操作迅速。


2.在圖3-3中基址和界限暫存器含有相同的值16384,這是巧合,還是它們總是相等?如果這只是巧合,為什麼在這個例子裡它們是相等的?

A:巧合。基地址暫存器的值是程序在記憶體上載入的地址;界限暫存器指示儲存區的長度。


3.交換系統通過緊縮來消除空閒區。假設有很多空閒區和資料段隨機分佈,並且讀或寫32位長的字需要10ns的時間,緊縮128MB大概需要多長時間?為了簡單起見,假設空閒區中含有字0,記憶體中最高地址處含有有效資料。

A:32bit=4Byte===>每位元組10/4=2.5ns 128MB=1282^20=2^27Byte 對每個位元組既要讀又要寫,22.5*2^27=671ms


4.在一個交換系統中,按記憶體地址排列的空閒區大小是10MB,4MB,20MB,18MB,7MB,9MB,12MB,和15MB。對於連續的段請求:

(a) 12MB

(b) 10MB

(c) 9MB

使用首次適配演算法,將找出哪個空閒區?使用最佳適配、最差適配、下次適配演算法呢?

A: 首次適配演算法:20MB,10MB,18MB; 最佳適配演算法:12MB,10MB,9MB; 最差適配演算法:20MB;18MB;15MB; 下次適配演算法:20MB;18MB;9MB;


5.實體地址和虛擬地址有什麼區別?

A:實際記憶體使用實體地址。這些是儲存器晶片在總線上反應的數字。虛擬地址是指一個程序的地址空間的邏輯地址。因此,具有32位字的機器可以生成高達4GB的虛擬地址,而不管機器的記憶體是否多於或少於4GB。


6.對下面的每個十進位制虛擬地址,分別使用4KB頁面和8KB頁面計算虛擬頁號和偏移量:20000,32768,60000。

A:轉換為二進位制分別為:0100111000100000 虛擬地址應該是16位 1000000000000000 1110101001100000 4KB頁面偏移量範圍0~4027,需要12位來儲存偏移量,剩下4位作為頁號; 同理8KB頁面需要13位來儲存偏移量,剩下3位作為頁號; 所以, 4KB | 8KB 頁號 | 偏移量 | 頁號 | 偏移量 20000 | 0100 111000100000 | 010 0111000100000 32768 | 1000 000000000000 | 100 0000000000000 60000 | 1110 101001100000 | 111 0101001100000


7. 使用圖3-9的頁表,給出下面每個虛擬地址對應的實體地址:

(a) 20

(b) 4100

(c) 8300

A: (a)20+40962=8212 (b)4100=4096+(4100-4096)=4100 (c)8300=64096+(8300-4096*2)=24684


8. Inlel 8086處理器不支援虛擬記憶體,然而一些公司曾經設計過包含未作任何改動的8086 CPU的分頁系統。猜想一下,他們是如何做到這一點的。(提示:考慮MMU的邏輯位置。)

A:他們製作了MMU,並連線在CPU與地址匯流排之間,這樣從處理器進入MMU的地址全部被視為虛擬地址,並被轉換為實體地址,然後被送到地址匯流排,對映到記憶體中。


9.為了讓分頁虛擬記憶體工作,需要怎樣的硬體支援?

A:需要一個MMU能夠將虛擬頁面重新對映到物理頁面。此外,當缺頁中斷時,需要對作業系統設定陷阱,以便可以獲取頁面。


10.寫時複製是使用在伺服器系統上的好方法,它能否在手機上起作用。

A: “寫時複製“技術,也就是隻有程序空間的各段的內容要發生變化時,才會將父程序的內容複製一份給子程序。 如果智慧手機支援多重程式設計,iPhone、Android和Windows手機都支援多重程式設計,那麼支援多個程序。如果程序發出fork()系統呼叫和頁面在父程序和子程序之間共享,則複製對寫是有意義的。智慧手機比伺服器小,但從邏輯上講,它並沒有什麼不同。


11.考慮下面的C程式:

int X[N];

int step = M; //M是某個預定義的常量

for (int i = 0; i < N; i += step) X[i] = X[i] + 1;

a)如果這個程式執行在一個頁面大小為4KB且有64 個TLB 表項的機器上時,M和N取什麼值會使得內層迴圈的每次執行都會引起TLB失效?

b)如果迴圈重複很多遍,結果會和a)的答案相同嗎?請解釋。

A: a)M必須至少為1024,以確保對X元素的每一次訪問都有一個TLB缺失。因為N隻影響X訪問多少次,N取大於M的任何值都可以。 b)M應該至少是1024,以確保對X元素的每次訪問都遺漏TLB。但是現在N應該大於64K,以便處理TLB,也就是說,X應該超過256KB。


12.儲存頁面必須可用的磁碟空間和下列因素有關:最大程序數n,虛擬地址空間的位元組數v,RAM的位元組數r,給出最壞情況下磁碟空間需求的表示式。這個數量的真實性如何?

A:所有程序的整個虛擬地址空間為nv,這就是頁面儲存所需的。不過,可以在RAM中儲存量為r,因此需要的磁碟儲存量僅為nv-r。該量比實際所需的要大得多,因為極少有n個程序實際執行,而且這些程序也極少需要其最大允許的虛擬記憶體。


13.如果一條指令執行1ns,缺頁中斷執行額外的Nns,且每條k指令產生一個缺頁,請給出一個公式,計算有效指令時間。

A: (1*(k-1)+(1+N))/k = 1+N/k ns


14.一個機器有32位地址空間和8KB頁面,頁表完全用硬體實現,頁表的每一表項為一個32位字。程序啟動時,以每個字100ns的速度將頁表從記憶體複製到硬體中。如果每個程序執行100ms(包含裝入頁表的時間)用來裝人頁表的CPU時間的比例是多少?

A: 32位地址空間構成4GB記憶體空間,4GB/8KB=512個頁面,頁表項512項,頁表大小512·32=2^14 bit,複製頁表的時間=2^14/2^5*10ns = 5120 ns, 時間比例5120ns/100ms=5120·10^(-9) / 100·10^(-3) =51.2% 8KB頁面大小,需要13位偏移量,故頁號有19位,頁面有2^19個,頁表項也是2^19個,每項32位字。 2^19·100ns/100ms=52.4288%


15.假設一個機器有48位的虛擬地址和32位的實體地址。

a)假設頁面大小是4KB,如果只有一級頁表,那麼在頁表裡有多少頁表項? 請解釋。

b)假設同一系統有32個TLB表項,並且假設一個程式的指令正好能放入一個頁,並且該程式順序地從有數千個頁的陣列中讀取長整型元素。在這種情況下TLB的效果如何?

A: a)頁面大小4KB,偏移量有12位,則頁號有36位,有2^36項頁表項; b)TLB訪問的命中率達100%。在指令訪問下一個頁面之前讀取資料的命中率是100%,一個4KB大小的頁面包含1024個長整型資料,每訪問1024個數據就會有一次TLB失效。


16.給定一個虛擬記憶體系統的如下資料:

(a)TLB有1024項,可以在1個時鐘週期(1ns)內訪問。

(b)頁表項可以在100時鐘週期(100ns)內訪問。

(c)平均頁面替換時間是6ms。

如果TLB處理的頁面訪問佔99%,並且0.01%的頁面訪問會發生缺頁中斷,那麼有效地址轉換時間是多少?

A: 99%·1ns+1%·99.99%·100ns+1%·0.01%·6ms=7.9899 99%·1ns+0.99%·100ns+0.01%·6ms=601.98ns


17. 假設一個機器有38位的虛擬地址和32位的實體地址。

a)與一級頁表比較,多級頁表的主要優點是什麼?

b)若採用二級頁表,頁面大小為16KB,每個頁表項為4位元組,應該對第一級頁表域分配多少位,對第二級頁表域分配多少位?請解釋原因

A: a)避免把全部頁表一直儲存在記憶體中。 b) ”16KB個頁“估計是指這個二級頁表的大小是16KB,故頁表項有16KB/4B=4K個,二級頁表域需要12位,四位元組表項說明頁面大小是12 頁面大小16KB,則偏移量需要14位,每個條目4位元組


18.在3.3.4節的陳述中,奔騰Pro將多級頁表中的每個頁表項擴充套件到64位,但仍只能對4GB的記憶體進行定址。請解釋頁表項為64位時,為何這個陳述正確。

A:雖然頁表項擴充套件了,但是虛擬記憶體地址依然只有32位。


19.個32位地址的計算機使用兩級頁表。 虛擬地址被分成9位的頂級頁表域、 11位的二級頁表域和一個偏移量,頁面大小是多少?在地址空間中一共有多少個頁面?

A: 頁面大小與偏移量位數有關=2^12Byte=4KB,每個地址對應記憶體一個位元組, 地址空間的頁面數量=2^20個。


20.一個計算機使用32位的虛擬地址,4KB大小的頁面。程式和資料都位於最低的頁面(0~4095),棧位於最高的頁面。如果使用傳統(一級)分頁,頁表中需要多少個表項?如果使用兩級分頁,每部分有10位,需要多少個頁表項?

A:32位地址對應4GB記憶體,有4GB/4KB=2^20個頁面,如果使用傳統(一級)分頁:需要2^20個頁表項;如果使用兩級分頁,頂級頁表有2^10個頁表項,其中三項指向二級頁表(程式段、資料段、堆疊段),二級頁表每個也有有2^10個頁表項,總共2^12個頁表項。


21.如下是在頁大小為512位元組的計算機上,一個程式片段的執行軌跡。這個程式在1020地址,其棧指標在8192(棧向0生長)。請給出該程式產生的頁面訪問串。每個指令(包括立即常數)佔4個位元組(1個字)。指令和資料的訪問都要在訪問串中計數。

將字6144載入暫存器0

暫存器0壓棧

呼叫5120處的程式,將返回地址壓棧

棧指標減去立即數16

比較實參和立即數4

如果相等,跳轉到5152處

A:程式地址範圍1020~1532。 頁面訪問串:6144-8191——5120——8190———8184———5152. A:每個頁面512B,1020地址屬於512~1023,即頁面1;棧指標8192屬於8192~8704,即頁面16,但是棧向0生長,故暫存器壓棧到8191~8188,屬於頁面15;5152地址屬於5120~5631,即頁面10. 每條指令4個位元組,故第一條指令在地址範圍1020~1023,屬於頁面1;第二條指令在地址範圍1024~1027,屬於頁面2;第三條指令地址也在頁面2,但是將資料壓棧到頁面15了。 LOAD 6144,R0 1(I), 12(D) PUSH R0 2(I), 15(D) CALL 5120 2(I), 15(D) JEQ 5152 10(I) 程式碼(I)指示指令引用,而(D)指示資料引用。


22.一臺計算機的程序在其地址空間有1024個頁面,頁表儲存在記憶體中。從頁表中讀取一個字的開銷是5n。為了減小這一開銷,該計算機使用了TLB,它有32個(虛擬頁面,物理頁框)對,能在1ns內完成查詢。請問把平均開銷降到2ns需要的命中率是多少?

A:p·1+(5+1)·(1-p)< 2 ======>p>0.8


23.TLB需要的相聯儲存裝置如何用硬體實現,這種設計對擴充套件性意味著什麼?

A:相聯儲存器本質上將key與多個暫存器的內容同時進行比較。對於每個暫存器,必須有一組比較器,將暫存器內容中的每個位與正在搜尋的鍵進行比較。實現這種裝置所需的門(或電晶體)的數量是暫存器數量的線性函式,因此這種設計對擴充套件性意味著成本變得昂貴。


24.一臺機器有48位虛擬地址和32位實體地址,頁面大小是8KB,試問頁表中需要多少個表項?

A: 實體記憶體是4GB,頁面數量是4GB/8KB=2^19項, 頁面偏移量需要2^13位,頁表域總共35位。


25.一個計算機的頁面大小為8KB,記憶體大小為256KB,虛擬地址空間為64GB,使用倒排頁表實現虛擬記憶體。為了保證平均雜湊鏈的長度小於1,散列表應該多大?假設散列表的大小為2的冪。

A:(原答案)記憶體有2^28(256KB) / 2^13(8KB) =(2^15)32768頁。32K的雜湊表的平均鏈長為1。為了使之小於1,必須使用下一個尺寸(2^16)65536項。將32768項放入65536格中使其平均鏈長為0.5,以保證快速的查詢。 (這個題目有錯吧???記憶體應該是256MB才對) 物理頁面數=256MB/8KB=2^15,若散列表為2^15,則平均雜湊長度為1,為保證平均雜湊鏈長度小於1,散列表至少為2^16.


26.一個學生在編譯器設計課程中向教授提議了一個專案:編寫一個編譯器,用來產生頁面訪問列表,該列表可以用於實現最優頁面置換演算法。試問這是否可能?為什麼?有什麼方法可以改進執行時的分頁效率?

A:這是不可能的,除了程式的執行過程在編譯時是完全可預測的少數情況。如果編譯器收集程式有關呼叫程式碼中的位置資訊,則可以在連結時使用此資訊來重新排列目的碼,以便程式位於它們呼叫的程式碼附近。這將使得程序更可能與所呼叫的程式碼在同一個頁面上。當然這從許多地方進行呼叫的程式來說是無效的。


27.假設虛擬頁碼索引流中有一些長的頁碼索引序列的重複,序列之後有時會是一個隨機的頁碼索引。例如,序列0,1,…,511,431,0,1,…,511,332, 0,1,…中就包含了0,1,…,511的重複,以及跟隨在它們之後的隨機頁碼索引431和332。

a)在工作負載比該序列短的情況下,標準的頁面置換演算法(LRU,FIFO,Clock) 在處理換頁時為什麼效果不好? b)如果一個程式分配了500個頁框,請描述一個效果優於LRU、FIFO或Clock演算法的頁面置換方法。

A: a)標準的頁面置換演算法是針對已經在記憶體中的頁面研究的。當工作負載比序列短時,會出現記憶體容量不夠而長生顛簸,這種情況下LRU、Clock、FIFO演算法達不到預期的效果,任何訪問都會引起缺頁除非記憶體的頁框數量大於512。 b)如果分配了500個頁框,那麼0~498號頁框是固定的,只有一個頁框進行頁面置換。


28.如果將FIFO頁面罝換演算法用到4個頁框和8個頁面上,若初始時頁框為空,訪問字串為0172327103,請問會發生多少次缺頁中斷?如果使用LRU演算法呢?

A: FIFO 6 LRU 7


29.考慮圖3- 15b中的頁面序列。假設從頁面B到頁面A的R位分別是11011011。 使用第二次機會演算法,被移走的是哪個頁面?

A:D。


30. 一臺小計算機有4個頁框。在第一個時鐘滴答時R位是0111(頁面0是0,其他頁面是1),在隨後的時鐘滴答中這個值是1011、1010、1101、0010、1010、 1100、0001。如果使用帶有8位計數器的老化演算法,給出最後一個滴答後4個計數器的值。

A: 0號頁框:01101110; 1號頁框:01001001; 2號頁框:00110111; 3號頁框:10001011。


31.請給出一個頁面訪問序列,使得對於這個訪問序列,使用Clock和LRU 演算法得到的第一個被選擇置換的頁面不同。假設一個程序分配了3個頁框,訪問串中的頁號屬於集合0,1,2,3。

A:0130123。 LRU將第3頁替換為第2頁。 Clock將第0頁替換為第2頁。


32.在圖3-21c的工作集時鐘演算法中,錶針指向那個R = 0的頁面。如果τ=400,這個頁面將被移出嗎?如果τ= 1000呢?(當前時間2204)

A:該頁面的生存時間是2204 - 1213 = 991。如果τ= 400,它就不在工作集中,最近沒有被引用,所以它將被移出。τ= 1000的情況不同,此時頁面在工作集中,所以它不會被刪除。


34.一個學生聲稱:“抽象來看,除了選取替代頁面使用的屬性不同外,基本頁面置換演算法(FIFO,LRU,最優演算法)都相同。”(a)FIFO、LRU、最優演算法使用的屬性是什麼?(b)請給出這些頁面置換演算法的通用演算法。

A: a)FIFO:載入時間;LRU:最近訪問時間;OPT:在未來的最近訪問時間 b)有標籤演算法和替換演算法。標記演算法用部分a給出的屬性從大到小標記每個頁面。替換演算法刪除標籤最小的頁面。


35.從平均尋道時間10ms、旋轉延遲時間10ms、 每磁軌32KB的磁碟上載入一個64KB的程式,對於下列頁面大小分別需要多少時間?

    a)頁面大小為2KB;
    b)頁面大小為4KB。
    假設頁面隨機地分佈在磁碟上,柱面的數目非常大以至於兩個頁面在同一個柱面的機會可以忽略不計。

A:      a)頁面有64KB/2KB=32個,32·(10+10)=640ms

b)頁面16個,16·20=320ms

原答案:(很迷啊,怎麼算的傳輸時間啊??):

搜尋加旋轉等待時間為10毫秒。對於2-KB頁面,傳輸時間約為0.009766毫秒,總共約10.009766毫秒。載入這些頁面的32將花費大約320.21毫秒。對於4-KB頁面,傳輸時間加倍到大約0.01953毫秒,因此每頁的總時間是10.01953毫秒。載入這些頁面的16需要大約160.3125毫秒。使用這樣快的磁碟,所有重要的是減少傳輸的數量(或者連續地將頁面放在磁碟上)。

  現在我知道是如何計算的了,參考《《現代作業系統》中文第四版 第4章檔案系統4.4.1的例子:


假設磁碟每道有1MB,其旋轉時間是8.33ms,平均尋道時間為5ms。以毫秒為單位,讀取一個k位元組的塊所需要的時間是尋道時間、旋轉延遲和傳送時間之和:
                    5 + 4.165 + (k/1000000) x 8.33

從中可以得知單位容量傳送時間 = 旋轉時間/每道容量
故本題中單位容量傳送時間 = 2^3/2^15 x 10 = 0.00244 ms/KB


42.人們已經觀察到在兩次缺頁中斷之間執行的指令數與分配給程式的頁框數直接成比例。如果可用記憶體加倍,缺頁中斷間的平均間隔也加倍。假設一條普通指令需要1μm,但是如果發生了缺頁中斷,就需要2001μs (即2ms處理缺頁中斷),如果一個程式運行了60s,期間發生了15000次缺頁中斷,如果可用記憶體是原來的兩倍,那麼這個程式執行需要多少時間?

A:該程式發生了15000次缺頁中斷,每個缺頁中斷都需要2ms的額外處理時間。處理缺頁中斷的總開銷為30s。這意味著在程式執行的60s內,一半用於缺頁中斷開銷,一半用於執行程式。如果我們執行程式的記憶體是記憶體的兩倍,我們會得到一半的記憶體頁錯誤,只有15秒的頁面錯誤開銷,所以總的執行時間將是45秒。


43.Frugal計算機公司的一組作業系統設計人員正在考慮在他們的新作業系統中減少對後備儲存數量的需求。老闆建議根本不要把程式正文儲存在交換區中,而是在需要的時候直接從二進位制檔案中調頁進來。在什麼條件下(如果有這樣的條件話)這種想法適用於程式文字?在什麼條件下(如果有這樣的條件話)這種想法適用於資料?

A:這種想法適用於無法修改的程式和不能被修改的資料。但是,通常程式不能修改,資料卻極少數無法修改。如果二進位制檔案中的資料區被更新的頁面覆蓋,下一次程式啟動時,它將不會有原始資料。


44.有一條機器語言指令將要被調入,該指令可把一個32位字裝入含有32位字地址的暫存器。這個指令可能引起的最大缺頁中斷次數是多少?

A:該指令可能跨越頁面邊界,為了獲取指令將導致兩個缺頁中斷。獲取的字也可能跨越頁邊界,產生兩個以上的缺頁中斷,總共四個。如果字必須在記憶體中對齊,則資料字只能導致一個缺頁中斷,但是在某些機器(包括奔騰)上,在具有4 KB頁面的機器上的4094地址上載入32位字的指令是合法的。


46.像在MULT1CS中那樣,當同時使用分段和分頁時,首先必須查詢段描述符,然後是頁描述符。TLB也是這樣按兩級查詢的方式工作的嗎?

答:否。搜尋鍵使用段號和虛擬頁碼,因此可以在單個匹配中找到確切的頁面。


47.一個程式中有兩個段,段0中為指令,段1中為讀/寫資料。段0有讀/執行保護,段1有讀/防寫。記憶體是請求分頁式虛擬記憶體系統,它的虛擬地址為4位頁號,10位偏移量。頁表和保護如下所示(表中的數字均為十進位制):

(表格略)

對於下面的每種情形,或者給出動態地址所對應的實(實際)記憶體地址,或者指出發生了哪種失效(缺頁中斷,或保護錯誤)。

a)讀取頁:段1,頁1,偏移3;

b)儲存頁:段0,頁0,偏移16;

c)讀取頁:段1,頁4,偏移28;

d)跳轉到:段1,頁3,偏移32。

A:還沒寫。。。


48.你能想象在哪些情況下支援虛擬記憶體是個壞想法嗎?不支援虛擬記憶體能得到什麼好處呢?請解釋。

A:一般來說,當可以瞭解和控制所有應用程式的需求時,虛擬記憶體就沒必要了。例如,特殊用途的處理器(如網路處理器),嵌入式處理器和超級計算機(如機翼設計)。在這些情況下,我們總會考慮使用更多的實體記憶體。如果作業系統沒有使用(不支援)虛擬記憶體,它的程式碼會簡單很多,系統的效能會有所提高。另一方面,一些來自虛擬記憶體的想法有利於開發,儘管有不同的設計需求。