每個 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的資訊。
Reentrant code
= pure code
: 在execution 期間都不會改變。例如 text editor等等 library。因為不會變,所以只需要一份copy。
不同的process 有不同的virtual addr, 但可以指向同樣的 physical addr(指向library的位置)
一般來說不同process之間的 page table使用的entry位置是互不重複的(memory detection),但是假如他們有使用相同的 library, 就可以指向相同的位置。
隨著程式越長越大,page table entry 的數目非常大,佔據很大的空間,而且必須在實體記憶體空間上連續(因為是由MMU讀的,沒有mapping),要找到這樣的空間很難,也是一個很沒有效率的限制。
所以發展出各種不同的structure來縮小page table的空間,或者把 page table 拆成很多小的 table,這樣就不需要有連續的多個frame來存放。
把 page table 拆成很多段 inner table
,再用一個 outer table
來記錄這些 inner table 放在哪裡。
level 1 outer table
: 紀錄小 inner table 放在哪
level 2 inner table
: 紀錄資料所在的 frame num
真實在使用的時候, level 2 inner table 裡面不會按照順序使用,這樣即使還沒有使用,還是需要把他 allocate 出來。
缺點
-
entry 不減反增,因為還要多用一個 table 來記錄這些小table放在哪。
-
需要 3 個 memory access (查位置table, 查小table, 讀資料),更慢:
優點
因為切成很多小table,就可以不用佔據很大的連續空間,可以把他們散佈到各處的 frame。
但假如是現代的電腦 64-bit 怎麼辦?
2- level還是切得不夠小 → 切更多個 level
但是每切一層就會再多一個 memory access,就會變慢。
實際應用最多切到 4 level。
為了解決 Hierarchical 會增加 memory access 的問題,使用 hash
先用籃子分類,再去查找。
bucket 的數量是有彈性的,bucket 多,找的時間就比較短。
優點
因為是hash,所以沒有用到的page就不會存在bucket裡(?),這是比 Hierarchical 有效率的地方。
缺點
有很多pointer,會有比較多的memory access,會浪費掉 4 byte,浪費掉一倍的空間。
查找的時候要走linked-list,一次只能看一個值,不對的話要再看一個 memory。→ 改進做法: 每個 linked-list 不會只放一個 entry,而是放一個 entry list。
不要用 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 要紀錄 page
跟 PID
優點
隨著 process 增多, page table 也會越來越多,越來越大。 frame 是硬體,大小不變,可以事先 allocate,大小是被硬體所限制的。
所有 page table size總和 >> frame table
缺點
- 做 addr translation 時間比較長,因為要去 search frame table。因為 frame table 所記載的 page 是沒有順序的。
- 沒辦法做 shared page ,因為 一個 frame 只對應到一個 page。(最大缺點,所以大家很少用這個方法。)
圖片中依然稱 page table, 但他其實是 frame table
整個系統就是一個 table。