天天看點

作業系統第九章作業paging-multileveltranslate

作業系統第九章作業 paging-multileveltranslate

第一次來寫部落格,計算機專業的廢渣一枚,主要分享一些湖大的作業實驗及平時一些敲代碼的心得

本次作業和第八章作業類似,需要在ubantu環境下運作一個多級頁表的程式,加深對多級頁表的了解

壓縮包下載下傳網址

http://pages.cs.wisc.edu/~remzi/OSTEP/Homework/HW-Paging-MultiLevelTranslate.tgz

使用win10自帶的浏覽器下載下傳這個壓縮包的時候,解壓出來不知道是什麼鬼,建議換個pdf浏覽器,親測使用adobe下載下傳正常,同實驗八一樣,是一個.py檔案和一個readme文本。

作業系統第九章作業paging-multileveltranslate

在運作的時候,室友都能夠使用./進行運作,但是我在使用時會出現權限不夠的問題

作業系統第九章作業paging-multileveltranslate

經過多次嘗試,使用python指令可以解決這一問題

(1)With a linear page table, you need a single register to locate the page table, assuming that hardware does the lookup upon a TLB miss. How many registers do you need to locate a two-level page table?A three-level table?

虛拟位址的長度固定了,頁的大小也固定了,VPN的長度也就固定了,線性頁表和多級頁表的差別也就是頁表的大小會有變化,但隻需要一個寄存器儲存。

(2)Use the simulator to perform translations given random seeds 0,1, and 2, and check your answers using the -c flag. How many memory references are needed to perform each lookup?

S=0

作業系統第九章作業paging-multileveltranslate

所需要求的虛拟位址轉換

作業系統第九章作業paging-multileveltranslate

對于第二個位址0x3da8轉化為二進制 011110110101000(隻有十五位,去掉高位)

對虛拟位址進行劃分01111 01101 01000

PDRB為108

Page 108:

作業系統第九章作業paging-multileveltranslate

01111轉化為10進制為15,是以取頁中的第十六位d6

轉化為二進制為11010110

根據readme文檔中的提示

作業系統第九章作業paging-multileveltranslate

有效位為1,頁号為1010110

轉化為10進制為86号頁

作業系統第九章作業paging-multileveltranslate

01101轉化為10進制為13,取頁中的第14個元素7f

轉化為二進制為01111111

有效位為0,傳回fault。

檢視答案驗證:

作業系統第九章作業paging-multileveltranslate

(3)Given your understanding of how cache memory works, how do you think memory references to the page table will behave in the cache? Will they lead to lots of cache hits (and thus fast accesses?)Or lots of misses (and thus slow accesses)?

catch memory 緩存。用來存儲近期或者常用的指令或者資料,在多級頁表的記憶體管理中,catch memory和TLB的作用很相似。我們知道從記憶體中去資料比從緩存中取資料話費的時間要多得多,那麼如果對于近期HIT命中的或者使用頻率高頁表,我們很可能在接下來會申請。把這些頁表存放在TLB即緩存(catch memory)中,可以大大減少再次通路記憶體的次數,進而降低時間。如果是連續通路相鄰的記憶體位址,這樣會增加cache hits。如果連續通路的記憶體位址相隔比較大,就會增加cache miss。

繼續閱讀