2018-2019-1 20165225《資訊安全系統設計基礎》第九周學習總結
2018-2019-1 20165225《資訊安全系統設計基礎》第九周學習總結
教材學習內容總結
1.理解虛擬儲存器的概念和作用;
2.理解地址翻譯的概念;
3.理解儲存器對映;
4.掌握動態儲存器分配的方法;
5.理解垃圾收集的概念;
6.瞭解C語言中與儲存器有關的錯誤;
虛擬儲存器
物理和虛擬定址
計算機系統的主存被組織成一個由M個連續的位元組大小的單元組成的陣列,每位元組都有一個唯一的實體地址。CPU根據實體地址訪問儲存器的方式是物理定址。
虛擬儲存器被組織為一個由存放在磁碟上的N個連續的位元組大小的單元組成的陣列。
使用虛擬定址時,CPU通過生成一個虛擬地址VA來訪問主存,這個虛擬地址在被送到儲存器之前先轉換成適當的實體地址,地址翻譯通過CPU晶片上的儲存器管理單元完成。
地址空間
線性地址空間:地址空間中的整數是連續的。
虛擬地址空間:CPU從一個有 N=2^n 個地址的地址空間中生成虛擬地址,這個地址空間成為稱為虛擬地址空間。
地址空間的大小:由表示最大地址所需要的位數來描述。實體地址空間:與系統中的物理儲存器的M個位元組相對應。
虛擬儲存器的基本思想:主存中的每個位元組都有一個選自虛擬地址空間的虛擬地址和一個選自實體地址空間的實體地址。虛擬儲存器作為快取的工具
虛擬儲存器——虛擬頁VP,每個虛擬頁大小為P=2^平位元組。物理儲存器——物理頁PP,也叫頁幀,大小也為P位元組。
頁表
頁表是一個數據結構,存放在物理儲存器中,將虛擬頁對映到物理頁,就是一個頁表條目的陣列。
頁表的組成:有效位+n位地址欄位。
如果設定了有效位:地址欄位表示DRAM中相應的物理頁的起始位置,這個物理頁中快取了該虛擬頁。如果沒有設定有效位:
空地址:表示該虛擬頁未被分配
不是空地址:這個地址指向該虛擬頁在磁碟上的起始位置。
Linux虛擬儲存器系統
- Linux為每個程序維持了一個單獨的虛擬地址空間。核心儲存器包含核心中的程式碼和資料結構。一部分割槽域對映到所有程序共享的物理頁面另一部分包含每個程序都不相同的資料。
區域:就是已分配的虛擬儲存器的連續片,這些頁是相關聯的。每個存在的虛擬頁面都儲存在某個區域中。核心為系統中的每個程序維護一個單獨的任務結構task_struct:
一個具體區域的區域結構包括:
- vm_start:指向起始處 - vm_end:指向結束處 - vm_prot:描述這個區域包含的所有頁的讀寫許可許可權 - vm_flags:是共享的還是私有的 - vm_next:指向下一個區域 - Linux缺頁異常處理虛擬地址A是否合法? 不合法,觸發段錯誤,終止程序 合法,進入下一條 儲存器訪問是否合法?即,是否有許可權? 不合法,觸發保護異常,終止程式 合法,進入下一條 這時,是針對合法的虛擬地址進行合法的操作。所以:選擇一個犧牲頁面,如果被修改過就換新的並更新頁表。
頁命中
當CPU讀取一個字的時候,地址翻譯硬體將虛擬地址作為一個索引來定位PTE,並從儲存器中讀取它。虛擬儲存器作為儲存器管理的工具作業系統為每個程序提供了一個獨立的頁表,也就是一個獨立的虛擬地址空間。
抖個虛擬頁面可以對映到同一個共享物理頁面上。儲存器對映:將一組連續的虛擬頁對映到任意一個檔案中的任意位置的表示法。虛擬儲存器作為儲存器保護的工具
地址翻譯
一個N元素的虛擬地址空間(VAS)中的元素和一個M元素的實體地址空間(PAS)之間的對映。CPU中的一個控制暫存器頁表基址暫存器指向當前頁表,n位的虛擬地址包含兩個部分:一個p位的虛擬頁面偏移(VPO) 和一個(n-p)位的虛擬頁號,頁表條目中的物理頁頁號和虛擬地址中的VPO串聯起來,就得到了相應的實體地址。
fork函式
當fork函式被當前程序呼叫時,核心為新程序建立各種資料結構,並分配給它一個唯一的PID。為了給這個新程序建立虛擬儲存器,它建立了當前程序的mm_struct、區域結構和頁表的原樣拷貝。它將兩個程序中的每個頁面都為標記只讀,並將兩個程序中的每個區域結構都標記為私有的寫時拷貝。
當fork在新程序中返回時,新程序現在的虛擬儲存器剛好和呼叫fork時存在的虛擬儲存器相同。當這兩個程序中的任一個後來進行寫操作時,寫時拷貝機制就會建立新頁面,因此,也就為每個程序保持了私有地址空間的抽象概念。
本週錯題總結
下週一補上
結對學習
- 本週依然和5221同學一起復習。
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 3500行 | 12 | 14小時 | |
第一週 | 63/150 | 1/12 | 3小時 | |
第二週 | 150/150 | 2/12 | 10小時 | |
第三週 | 150/150 | 3/12 | 13小時 | |
第四周 | 97/150 | 4/12 | 10小時 | |
第五週 | 104/150 | 5/12 | 10小時 | |
第六週 | 95/150 | 6/12 | 8小時 | |
第七週 | 112/150 | 7/12 | 8小時 | |
第八週 | 83/150 | 8/12 | 6小時 | |
第九周 | 73/150 | 9/12 | 7小時 |