Linux內存體系及文件系統
阿新 • • 發佈:2018-03-08
通用 修改 pro 申請 緩存 lock 高效 內存映射 函數
一.linux內存體系
- 物理和虛擬內存
- Linux內核只能直接映射第一個GB的的物理內存(896M,因為還要考慮到保留的空間)。在此上的內存被稱作ZONE_NORMAL,這部分空間必須映射到最下面的1GB。
- 虛擬內存尋址布局
32位和64位架構Linux系統的虛擬尋址布局:
在32位架構上,單個進程可以利用的最大地址空間是4GB,這是受到了32位虛擬內存映射的限制;64位架構,因為沒有內存限制存在,每個進程能夠都有可能使用巨大的地址空間。
- 虛擬內存管理器
- 頁幀分配:頁是物理內存或虛擬內存中一組連續的線性地址,Linux內核以頁為單位處理內存,頁的大小通常是4KB。
- 夥伴系統:Linux內核使用名為夥伴系統(Buddy system)的機制維護空閑頁,夥伴系統維護空閑頁面,並且嘗試給發來頁面申請的進程分配頁面
- 夥伴系統分配內存頁:
- 頁幀回收:當進程請求指定數量的內存頁沒有可用的內存頁時,內核會嘗試釋放特定的內存頁給新的請求使用,這個過程叫內存回收.kswapd內核線程和try_to_free_page()內核函數負責頁面回收.
kswapd通常在task interruptible狀態下休眠,當一個區域中的空閑頁低於閾值的時候,它就會被夥伴系統喚醒。頁面主要有兩種用途:頁面緩存(page cahe)和進程地址空間(process address space)。 - swap:是保證操作系統可以分配超出物理內存大小的空間,但是Linux使用swap的空間的辦法更加高效。
二.linux文件系統
- 虛擬文件系統
虛擬文件系統(VFS)是一個處於用戶進程和各類文件系統之間的抽象接口層,VFS提供訪問文件系統對象的通用對象模型(例如,i-node、文件對象、頁緩存、)和方法- 日誌
日誌系統解決了fsck工作完才能使用文件系統的問題,他先把要修改的數據寫入一個叫做日誌區域(journal area)的地方。 - Ext2
Ext2是一個簡單和快速的文件系統,沒有日誌功能。
Ext2的文件系統數據結構,文件系統由一個引導扇區(boot sector)開始,後面跟著塊組(block groups)。
內核首先搜索文件的i-node,在接到進程打開/var/log/messages文件的請求時,內核分析文件路徑,然後搜索/(根目錄)的條目,內核會找到/var目錄的i-node,然後再來看看/var目錄,直到找到/var/log/messages文件的i-node。一旦內核找到了文件的i-node,然後就試著訪問真正的用戶數據塊。
- Ext3
ext3擁有:可用性,數據完整性,速度,靈活性 - 日誌模式
日誌(journal) 通過記錄文件數據和元數據
有序(ordered) 該模式下只記錄元數據
回寫(writeback) 這個日誌選項提供最快的數據訪問能力 - ReiserFS
ReiserFS是一個快速的日誌文件系統,具備優化磁盤空間利用率和快速的崩潰恢復功能 - 日誌文件系統
日誌文件系統(Journal File System,JFS)是一個全64位文件系統,能支持超大文件和分區。 - XFS
支持超大文件和分區
- 日誌
Linux內存體系及文件系統