Skip to content

Latest commit

 

History

History
118 lines (59 loc) · 5.76 KB

Memory Protection 056f1e27643e4b2888075d96f487a892.md

File metadata and controls

118 lines (59 loc) · 5.76 KB

Memory Protection

每個 page 都有一連串的protection bit,可以拿來 indicate 有效/無效,讓 OS 知道哪些動作能做,哪些不能。

valid-invalid bit : 能不能使用

invalid: 例如現在他被swap掉了,暫時不能用。

一個 page table 裡面,可能很大一部分都是存著 invalid的,這樣就很浪費空間。所以實際上的做法是除了存 valid/invalid之外,還會存一個 Page Table Length Register(PTLR) ,例如 PTLR=6, 則 ≤6代表都是 valid,不需要再去 create 後面很長一串 invalid。

memory limit 還是需要存在:valid/invalid bit 是以 page 為單位,但是做 memory allocation時是以byte為單位,所以有可能剛好卡在某個 page中間,該 page 前面是 valid, 後面是 invalid ,所以還是需要length的資訊。

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_10.02.28.png

Shared Pages

Reentrant code = pure code : 在execution 期間都不會改變。例如 text editor等等 library。因為不會變,所以只需要一份copy。

不同的process 有不同的virtual addr, 但可以指向同樣的 physical addr(指向library的位置)

一般來說不同process之間的 page table使用的entry位置是互不重複的(memory detection),但是假如他們有使用相同的 library, 就可以指向相同的位置。

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_10.50.04.png

不同的 page table structure

隨著程式越長越大,page table entry 的數目非常大,佔據很大的空間,而且必須在實體記憶體空間上連續(因為是由MMU讀的,沒有mapping),要找到這樣的空間很難,也是一個很沒有效率的限制。

所以發展出各種不同的structure來縮小page table的空間,或者把 page table 拆成很多小的 table,這樣就不需要有連續的多個frame來存放。

Hierarchical page table

把 page table 拆成很多段 inner table,再用一個 outer table 來記錄這些 inner table 放在哪裡。

level 1 outer table : 紀錄小 inner table 放在哪

level 2 inner table : 紀錄資料所在的 frame num

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_10.53.42.png

真實在使用的時候, level 2 inner table 裡面不會按照順序使用,這樣即使還沒有使用,還是需要把他 allocate 出來。

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_10.54.55.png

缺點

  1. entry 不減反增,因為還要多用一個 table 來記錄這些小table放在哪。

  2. 需要 3 個 memory access (查位置table, 查小table, 讀資料),更慢:

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_10.52.41.png

優點

因為切成很多小table,就可以不用佔據很大的連續空間,可以把他們散佈到各處的 frame。

實際情況

但假如是現代的電腦 64-bit 怎麼辦?

2- level還是切得不夠小 → 切更多個 level

但是每切一層就會再多一個 memory access,就會變慢。

實際應用最多切到 4 level。

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_10.57.04.png

Hashed Page Table

為了解決 Hierarchical 會增加 memory access 的問題,使用 hash

先用籃子分類,再去查找。

bucket 的數量是有彈性的,bucket 多,找的時間就比較短。

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_11.08.22.png

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_11.08.28.png

優點

因為是hash,所以沒有用到的page就不會存在bucket裡(?),這是比 Hierarchical 有效率的地方。

缺點

有很多pointer,會有比較多的memory access,會浪費掉 4 byte,浪費掉一倍的空間。

查找的時候要走linked-list,一次只能看一個值,不對的話要再看一個 memory。→ 改進做法: 每個 linked-list 不會只放一個 entry,而是放一個 entry list。

Inverted Page Table

不要用 page table,用 frame table吧。

(REVIEW: frame table = index 是 frame number,而 entry 是 page number,跟 page table 相反。)

但是 frame number 只有一個,而相同的 page number 有很多個,因為每個 process 有自己的 page。所以這個 frame table 還要存一個 PID, 這樣才知道這是哪一個 process 的 page。

整理: frame table 要紀錄 pagePID

優點

隨著 process 增多, page table 也會越來越多,越來越大。 frame 是硬體,大小不變,可以事先 allocate,大小是被硬體所限制的。

所有 page table size總和 >> frame table

缺點

  1. 做 addr translation 時間比較長,因為要去 search frame table。因為 frame table 所記載的 page 是沒有順序的。
  2. 沒辦法做 shared page ,因為 一個 frame 只對應到一個 page。(最大缺點,所以大家很少用這個方法。)

Memory%20Protection%20056f1e27643e4b2888075d96f487a892/_2020-05-20_11.50.25.png

圖片中依然稱 page table, 但他其實是 frame table

整個系統就是一個 table。