虛擬存儲系統是指什么 虛擬存儲( 三 )



TLB (Translation Lookaside Buffer,翻譯后援緩沖區),也稱為翻譯后援緩沖區或翻譯旁路緩沖區,是MMU中的一個緩沖區,其中每行保存一個由單個PTE組成的塊 。用于組選擇和行匹配的索引和標簽字段是從VPN中提取的 。如果TLB中有T = 2^t組,則TLB索引(TLBI)由VPN的t個最低位組成,而TLB標簽(TLBT)由VPN中的其余位組成 。
下圖顯示了地址轉換的流程(如果TLB命中):

第一步,CPU給MMU一個虛擬地址進行地址轉換 。
第二步和第三步,MMU通過TLB獲取對應的PTE 。
第四步:MMU通過PTE翻譯物理地址,并發送給緩存/內存 。
第五,緩存向CPU返回數據(如果緩存命中,否則需要訪問內存) 。
當TLB未命中時,MMU必須從緩存/內存中獲取相應的PTE,并將新獲取的PTE存儲在TLB中(如果TLB已滿,現有的PTE將被覆蓋) 。

Linux中的虛擬內存系統Linux為每個進程維護一個單獨的虛擬地址空空間 。虛擬地址空室分為內核空室和用戶空室 。user 空 room包括代碼、數據、堆、共享庫和棧 。kernel 空 room包含了內核中的代碼和數據結構,kernel 空 Linux還將一組連續的虛擬頁(大小等于總內存)映射到相應的一組連續的物理頁,為內核訪問物理內存中的任意特定位置提供了便捷的方式 。

Linux虛擬內存被組織成一組區域(也稱為段) 。區域的概念允許虛擬地址空之間有間隙 。區域是已分配的虛擬內存的現有塊 。比如代碼段、數據段、堆、共享庫段、用戶棧都屬于不同的區域,每個現有的虛擬頁都存儲在某個區域,而不屬于任何區域的虛擬頁都是不存在的,不能被進程引用 。
為系統中的每個進程維護一個單獨的任務結構(task_struct) 。任務結構中的元素包含或指向內核運行進程所需的所有信息(PID、指向用戶堆棧的指針、可執行目標文件的名稱、程序計數器等) 。).

描述虛擬內存的當前狀態 。Pgd指向一級頁表的基址(內核運行這個進程時,pgd會存放在CR3控制寄存器,也就是頁表基址寄存器),mmap指向一個VM _ area _ structures的鏈表,其中每個VM _ area _ structures描述了當前虛擬地址空之間的一個區域 。
Vm_starts:指向這個區域的開始 。
Vm_end:指向這個區域的結尾 。
Vm_prot:描述該區域包含的所有頁面的讀寫權限 。
Vm_flags:描述這個區域的頁面是否與其他進程共享,這個進程是否是私有的,以及其他一些信息 。
Vm_next:指向鏈表的下一個區域結構 。
存儲器交換Linux通過將虛擬內存區域與硬盤上的文件相關聯來初始化虛擬內存區域的內容 。這個過程稱為內存映射 。這種將虛擬內存系統集成到文件系統中的方法可以簡單高效地將程序和數據加載到內存中 。
【虛擬存儲系統是指什么 虛擬存儲】一個區域可以被映射到普通硬盤文件的連續部分,例如可執行目標文件 。一個節被分成頁面大小的片,每個片包含虛擬頁面的初始內容 。由于按需頁面調度的策略,這些虛擬頁面實際上不會交換到物理內存中,直到CPU引用的虛擬地址在這個區域的范圍內 。如果該區域大于文件區域,則用零填充該區域的其余部分 。
一個區域也可以映射到一個匿名文件,該文件由內核創建,包含所有二進制零 。當CPU第一次引用這樣一個區域的虛擬頁面時,內核會在物理內存中找到一個合適的犧牲頁面 。如果該頁已被修改,它將首先被寫回硬盤,然后受害頁將被二進制零覆蓋,頁表將被更新以將該頁標記為緩存在內存中 。
簡單來說,普通的文件映射就是建立一個文件和一塊內存的映射關系 。對文件的IO操作可以繞過內核,直接在用戶態完成(用戶態讀寫虛擬地址區相當于讀寫文件) 。匿名文件映射一般來說,當用戶空需要分配一段內存來存儲數據時,內核會創建匿名文件,并與內存進行映射,然后用戶態就可以通過操作這個虛擬地址來操作內存 。匿名文件映射最常見的應用場景是動態內存分配(malloc()函數) 。
Linux很多地方都采用了“懶人加載”機制,這自然包括內存映射 。無論是正常的文件映射還是匿名映射,Linux只會先劃分虛擬內存地址 。只有當CPU第一次訪問這個區域的虛擬地址時,才會真正與物理內存建立映射關系 。
只要虛擬頁面被初始化,它就會在內核維護的交換文件之間切換 。文件交換也稱為交換空空間或交換區域 。交換區不僅用于頁面交換,還可以在物理內存不夠的時候,將一些內存數據交換到交換區(利用硬盤擴展內存) 。
共享對象虛擬內存系統為每個進程提供了私有的虛擬地址空空間,可以保證進程之間不會出現錯誤的讀寫 。但是,許多流程也有相同的部分 。例如,每個C程序都使用C標準庫 。如果每個進程都在物理內存中保留這些代碼的副本,會造成內存資源的極大浪費 。

推薦閱讀