1. 程式人生 > >Linux內存體系及文件系統

Linux內存體系及文件系統

通用 修改 pro 申請 緩存 lock 高效 內存映射 函數

一.linux內存體系

  1. 物理和虛擬內存
    技術分享圖片
    • Linux內核只能直接映射第一個GB的的物理內存(896M,因為還要考慮到保留的空間)。在此上的內存被稱作ZONE_NORMAL,這部分空間必須映射到最下面的1GB。
    • 虛擬內存尋址布局
      32位和64位架構Linux系統的虛擬尋址布局:
      技術分享圖片
      在32位架構上,單個進程可以利用的最大地址空間是4GB,這是受到了32位虛擬內存映射的限制;64位架構,因為沒有內存限制存在,每個進程能夠都有可能使用巨大的地址空間。
  2. 虛擬內存管理器
    • 頁幀分配:頁是物理內存或虛擬內存中一組連續的線性地址,Linux內核以頁為單位處理內存,頁的大小通常是4KB。
    • 夥伴系統:Linux內核使用名為夥伴系統(Buddy system)的機制維護空閑頁,夥伴系統維護空閑頁面,並且嘗試給發來頁面申請的進程分配頁面
    • 夥伴系統分配內存頁:
      技術分享圖片
    • 頁幀回收:當進程請求指定數量的內存頁沒有可用的內存頁時,內核會嘗試釋放特定的內存頁給新的請求使用,這個過程叫內存回收.kswapd內核線程和try_to_free_page()內核函數負責頁面回收.
      kswapd通常在task interruptible狀態下休眠,當一個區域中的空閑頁低於閾值的時候,它就會被夥伴系統喚醒。頁面主要有兩種用途:頁面緩存(page cahe)和進程地址空間(process address space)。
    • swap:是保證操作系統可以分配超出物理內存大小的空間,但是Linux使用swap的空間的辦法更加高效。

二.linux文件系統

  1. 虛擬文件系統
    虛擬文件系統(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內存體系及文件系統