精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解Linux系統文件頁表目錄和Linux系統頁表結構

書生途 ? 來源:書生途 ? 作者:書生途 ? 2022-05-11 09:22 ? 次閱讀

兩級頁表如何實現地址轉換:

  • 頁表:是一種特殊的數據結構,記錄著頁面和頁框的對應關系。(映射表)
  • 頁表的作用:是內存非連續分區分配的基礎,實現從邏輯地址轉化成物理地址。
pYYBAGJ6ZJ2AG2klAACTtTGxTzw118.jpg
  1. (1) 按照地址結構將邏輯地址拆成三個部分。
  2. (2) 從PCB中讀取頁目錄起始地址,再根據一級頁號查頁目錄表,找到下一級頁表在內存中存放位置。
  3. (3) 根據二級頁號查表,找到最終想要訪問的內存塊號。
  4. (4) 結合頁內偏移量得到物理地址。

虛擬存儲技術

再解決了頁必須連續存放的問題后,再看如何第二個問題:沒有必要讓整個頁表常駐內存,因為進程一段時間內可能只需要訪問某幾個特定的頁面。
解決方案:可以在需要訪問頁面時才把頁面調入內存——虛擬存儲技術(后面再說)。可以在頁表中增加一個標示位,用于表示該頁表是否已經調入內存。

應用

若采用多級頁表機制,則各級頁表的大小不能超過一個頁面。

舉例說明,某系統按字節編址,采用40位邏輯地址,頁面大小為4KB,頁表項大小為4B,假設采用純頁式存儲,則要采用()級頁表,頁內偏移量為()位?

頁面大小 = 4KB,按字節編址,因此頁內偏移量為12位。
頁號 = 40 - 12 = 28位。
頁面大小 = 4KB,頁表項大小 = 4B,則每個頁面可存放1024個頁表項。因此各級頁表最多包含1024個頁表項,需要10個二進制位才能映射到1024個頁表項,因此每級頁表對應的頁號應為10位二進制。共28位的頁號至少要分為3級。

1、 進程的4G 線性空間被劃分成三個部分:進程空間(0-3G)、內核直接映射空間(3G – high_memory)、內核動態映射空間(VMALLOC_START - VMALLOC_END)

2、 三個空間使用同一張頁目錄表,通過 CR3 可找到此頁目錄表。但不同的空間在頁目錄表中頁對應不同的項,因此互相不沖突

3、 內核初始化以后,根據實際物理內存的大小,計算出 high_memory、VMALLOC_START、VMALLOC_END 的值。并為“內核直接映射”空間建立好映射關系,所有的物理內存都可以通過此空間進行訪問。

4、 “進程空間”和“內核動態映射空間”的映射關系是動態建立的(通過缺頁異常)

假設在有三個線性地址 addr1, addr2, addr3 ,分別屬于三個線性空間不同部分(0-3G、3G-high_memory、vmalloc_start-vmalloc_end),但是最終都映射到物理頁面1:

1、 三個地址對應不同的頁表和頁表項

2、 但是頁表項的高 20bit 肯定是1,表示物理頁面的索引號是1

3、 同時,根據高 20 bit,可以從 mem_map[] 中找到對應的 struct page 結構,struct page 用于管理實際的物理頁面(就是實際物理頁面的物理地址了,到這里就不繞彎子了,順便想到高速緩沖的匹配命中操作是用哈希表,換算出的要訪問的實際物理地址拿到哈希表的輸入計算一下哈希值,看看有沒命中)(紅線)

4、 從線性地址最終的,根據頁目錄表,頁表,可以找到物理地址

5、 Struct page 和物理地址之間很容易互相轉換

6、 從物理地址,可以很容易的反推出在內核直接映射空間的線性地址(藍線)。要想得到在進程空間或者內核動態映射空間的對應的線性地址,則需要遍歷相應的“虛存區間”鏈表。


關于頁目錄表:
1、 每個進程有一個屬于自己的頁目錄表,可通過 CR3 寄存器找到
2、 而內核也有一個獨立于其它進程的頁目錄表,保存在 swapper_pg_dir[] 數組中

3、 當進程切換的時候,只需要將新進程的頁目錄把地址加載到 CR3 寄存器中即可

4、 創建一個新進程的時候,需要為它分配一個 page,作為頁目錄表,并將 swapper_pg_dir[] 的高 256 項拷貝過來,低 768 項則清0

linux0.11版本,所有進程共享同一個頁目錄而各自使用不同的頁表,該共享的頁目錄就放在物理地址最前面的4k

poYBAGJ6ZJ6AdSSmAACsd8Aievs752.jpg

標題:Linux系統文件頁表目錄和頁表結構(圖文詳解)

原文作者:玩轉Linux內核,地址:https://zhuanlan.zhihu.com/p/429914858 轉載注明來源

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5068

    文章

    19019

    瀏覽量

    303308
  • 內核
    +關注

    關注

    3

    文章

    1363

    瀏覽量

    40228
  • Linux
    +關注

    關注

    87

    文章

    11229

    瀏覽量

    208931
收藏 人收藏

    評論

    相關推薦

    Linux目錄結構文件操作

    Linux目錄結構為樹狀結構,最頂級的目錄為根目錄/。
    發表于 09-05 10:15 ?542次閱讀

    關于和MMU的問題

    剛開始學,好多東西都云里霧里的TT為什么在bootloader里要進行初始化然后開啟MMU,然后在進入內核后還要創建開啟MMU?這兩個有什么不一樣么?s3c2410,bootl
    發表于 05-06 17:25

    解讀Linux文件系統目錄結構

    通過命令ls/可以展示Linux系統目錄結構,主要包括以下內容:1. binbin是Binary的縮寫, 這個目錄存放著最經常使用的命令。2
    發表于 01-09 13:38

    詳解Linux目錄結構

    /:根目錄,位于Linux文件系統目錄結構的頂層,一般根目錄下只存放
    發表于 07-25 07:45

    Linux系統命令及其使用詳解 _120

    電子發燒友網站提供《Linux系統命令及其使用詳解 _120.doc》資料免費下載
    發表于 04-18 13:23 ?3次下載

    Linux設備驅動開發詳解》第5章、Linux文件系統與設備文件系統

    Linux設備驅動開發詳解》第5章、Linux文件系統與設備文件系統
    發表于 10-27 14:13 ?0次下載
    《<b class='flag-5'>Linux</b>設備驅動開發<b class='flag-5'>詳解</b>》第5章、<b class='flag-5'>Linux</b><b class='flag-5'>文件系統</b>與設備<b class='flag-5'>文件系統</b>

    linux文件系統基礎

    一 、linux文件結構 文件結構文件存放在磁盤等存貯設備上的組織方法。主要體現在對
    發表于 11-07 15:28 ?0次下載

    Windows和Linux的區別以及Linux系統目錄結構

    本文先對 Windows 和 Linux 上面文件系統原理、組織概念進行區分,并給出例子、列舉兩者的優缺點以具體說明,最后較為詳細地介紹了 Linux 系統
    的頭像 發表于 06-18 17:37 ?8584次閱讀
    Windows和<b class='flag-5'>Linux</b>的區別以及<b class='flag-5'>Linux</b><b class='flag-5'>系統</b>的<b class='flag-5'>目錄</b><b class='flag-5'>結構</b>

    Linux實用教程之Linux文件目錄操作總結

    Linux系統下除了一般文件之外,所有的目錄和設備(光驅、硬盤等)都是以文件的形式存在的,本節主要講述
    發表于 09-29 16:18 ?0次下載

    解析Linux內核管理中那些鮮為人知的秘密

    虛擬內存管理,而管理是在虛擬內存管理中尤為重要,本文主要以回答幾個管理中關鍵性問題來解析Linux內核
    的頭像 發表于 06-11 16:32 ?1616次閱讀

    Linux中匿名的訪問分析

    Linux 中 有后備文件支持的稱為文件,如屬于進程的代碼段、數據段的,內存回收的時候這些
    的頭像 發表于 10-12 17:52 ?2829次閱讀

    嵌入式Linux開發之文件系統目錄結構介紹

    前言Linux文件系統,顧名思義:文件是數據的集合,文件系統不僅包含著文件中的數據而且還有文件系統
    發表于 11-01 16:31 ?3次下載
    嵌入式<b class='flag-5'>Linux</b>開發之<b class='flag-5'>文件系統</b><b class='flag-5'>目錄</b><b class='flag-5'>結構</b>介紹

    嵌入式Linux系統編程學習之一目錄結構

    嵌入式Linux系統編程學習之一目錄結構文章目錄嵌入式Linux
    發表于 11-02 12:06 ?9次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>系統</b>編程學習之一<b class='flag-5'>目錄</b><b class='flag-5'>結構</b>

    STM32MP157 Linux系統移植開發篇7:Linux內核目錄結構詳解

    Linux內核目錄結構Linux內核源代碼非常龐大,隨著版本的發展不斷增加。它使用目錄結構,并
    發表于 12-17 18:29 ?10次下載
    STM32MP157 <b class='flag-5'>Linux</b><b class='flag-5'>系統</b>移植開發篇7:<b class='flag-5'>Linux</b>內核<b class='flag-5'>目錄</b><b class='flag-5'>結構</b><b class='flag-5'>詳解</b>

    RISC-V Linux創建

    臨時分析 MMU開啟前,需要建立好kernel、dtb、trampoline等。以便MMU開啟后,并且在內存管理模塊運行之前,kernel可以正常初始化,dtb可以正常地被解析
    的頭像 發表于 10-08 11:14 ?547次閱讀