1. 程式人生 > >LINUX虛擬儲存系統

LINUX虛擬儲存系統

  • linux為每個程序維持了一個單獨的虛擬地址空間,這個虛擬地址空間包括程式碼,資料,堆,共享庫以及棧段。這部分虛擬地址儲存器位於使用者棧之上。
    這裡寫圖片描述
  • 核心將虛擬儲存器組織成一些區域(也較段)的集合,一個區域就是已經分配的虛擬儲存器的連續片。例如:程式碼段,資料段,共享庫段以及使用者棧都是不同的區域。
  • 核心為每個程序維護一個單獨的任務結果(task_struct).任務結構中的元素包含或者指向核心執行該程序所需要的所有資訊(例如:pid,指向使用者棧的指標,可執行目標檔案的名字以及程式計數器)
    這裡寫圖片描述
  • task_struct中的mm_struct他描述了虛擬儲存器的當前狀態,在mm_struct中我們主要關心pgd和mmap,pgd指向第一級頁表的基址。mmap則指向vm_area_struct(區域結構)的連結串列,其中每一個vm_area_structs都描述了一個當前虛擬地址空間的區域.
    1.vm_start:指向這個區域的起始地址
    2.vm_end:指向這個區域的結束處
    3.vm_port:指向這個區域包含的所有頁的讀寫許可許可權
    4.vm_flags:描述這個區域頁面是與其他程序共享的還是私有的
    4.vm_next:指向連結串列下一個區域結構