計算機組織 === --- ###### tags: `OS` `Memory Management` --- # Cache Memory :::info 硬體: CPU L1、L2 ... Memory 作用: 暫存在 Physical Address 上的資料 欄位: | Valid | Tag | Data | | ----- | --- | ---- | ::: ![](https://i.imgur.com/Xa4tr7V.png) Physical Address 分成三部分: | Physical Address Tag | Cache Index | Block offset | | -------------------- | ----------- | ------------ | 每次存取 Physical Address 前,會先查看 Cache 有沒有暫存 1. 搜尋對應的 Cache Index 2. 看 Tag 是否一樣 - 一樣則回傳 Cache 內的 Data - 不一樣的話,再實際去 Main Memory 存取 # TLB :::info 硬體: MMU 作用: 加快 Virtual Address 轉譯為 Physical Address 的速度 欄位: | Valid | Dirty | Ref | Page Number | Frame Number | | ----- | ----- | --- | ----------- | ------------ | ::: - Valid 是否有值,只是用來 Check 這筆紀錄中裡面是否有實際存著一筆 (Page Number, Frame Number) 對應關係 - Dirty Check 此 Memory 上有無改動,主要幫助 Replacement 加速 - Ref Check 此 Memory 最近有被存取,主要幫助 Replacement 加速 - 運作流程 Virtual Memory 分為兩部分 : | Page Number | Offset | | ----------- | ------ | 一個 Virtual Memory 進入 TLB - 若 TLB 有存此 Page Number 對應什麼 Frame Number - Physical Memory = Fram Number + Offset - 若沒有 - TLB Miss,再去查 PTE # PTE :::info 硬體: 存在與 Main Memory (RAM) 作用: 將 Virtual Address 轉譯為 Physical Address 欄位: | Valid | Dirty | Ref | Frame Number | | ----- | ----- | --- | ------------ | ::: 基本上跟 TLB 一樣,但是卻沒有 Page Number 欄位 可以將 PTE 想成一個 Array - 運作流程 一個 Virtual Memory 進入 PTE - Physical Memory = PTE[Page Number].(Frame Number) + offset 由此可知,Page Number bit 太大,會導致PTE超級大張(2^(Page Number Bit)) - 圖表 ![](https://i.imgur.com/ZIVw7hg.png)