在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

淺析Linux系統中的內存管理

冬至配餃子 ? 來源:廣廣的隨筆 ? 作者:廣廣的隨筆 ? 2022-08-17 16:27 ? 次閱讀

當使用Inter 80x86微處理器時,必須區分三種地址:

邏輯地址:有段基址和段偏移量組成。

線性地址:32位無符號整數。

物理地址

CPU通過分段單元將邏輯地址轉換為線性地址,再通過分頁單元將線性地址轉化為物理地址

硬件的分段單元

從80386CPU開始,Intel微處理器能執行兩種不同的地址轉換模式,分別稱為實模式(為了與早期OS兼容)和保護模式,這里重點放在保護模式上。

寄存器

一個邏輯地址由兩部分組成,一個段標識符(16位)和一個相對地址的偏移量(32位),段寄存器是用來存放段選則符的,包括cs,ss,ds,es,fs,gs。

cs:代碼段寄存器,用于存放程序指令的段。

ss:棧段寄存器,指向當前存放程序棧的段;什么是程序棧空間,即主要用來 存放函數和數組等。

ds:數據段寄存器,指向存放靜態數據(永久性不變的數據)或者外部數據的段。

其它三個寄存器做一般用途,可以用來訪問任意段。

cs寄存器還有一個兩位域,用來指明cpu的特權級,linux中只有0和3級,分別為內核態和用戶態。

段描述符

占8字節,段描述符被放在全局描述符表(GDT)或者局部描述符表(LDT)。

系統通常只定義一個GDT(其地址被存放在GDTR寄存器中),每個進程可以有自己的LDT(其地址被存放在LDTR寄存器中)。

其中,系統段存儲內核數據結構,任務狀態段用于保存處理器寄存器的內容。

poYBAGL8pW-AGAWRAAHG9TXbiqo817.png

段選擇符

為了加速邏輯地址到線性地址的轉換,Intel處理器提供一種附加的非編程的寄存器(不能被程序員設置),這樣在訪問段寄存器中段選擇符時,就不能(不需要)訪問GDT或LDT了。

poYBAGL8pZCADVOQAAB7_2jDXOg703.png

段單元

邏輯地址轉化為線性地址總覽:

poYBAGL8pZWAKmXeAACQTXbd8y8728.png

Linux中的段

Linux更喜歡分頁的方式,當所有的進程使用相同的段寄存器值時,內存管理變得更簡單,它們能共享相同的線性地址。而且許多RISC處理器不支持段功能,Linux不好做移植。

硬件的分頁單元

分頁單元認為所有的RAM被分成固定長度的頁框,每一個頁框包含一頁。在Intel處理器中,通過設置CR0寄存器的PG標志啟動分頁。當PG=0時,線性地址就被解釋成物理地址。

常規分頁

從i80386起,Intel處理器的分頁單元處理4KB的頁。32位線性地址被分成三個域:目錄(10),頁表(10),偏移量(12)。

正在使用的頁目錄表的物理地址存放在處理器的CR3寄存器中。

pYYBAGL8pa2AEsipAAB19_aIcCI268.png

這里要說明下,在頁目錄和頁表表項中由Page Size標志為1,頁目錄項指的是4MB的頁框。如果Present為0,分頁單元就把這個線性地址存放在處理器的CR2寄存器中,并產生14號缺頁異常。

擴展分頁

從奔騰處理器開始,Intel80x86微處理器引進了擴展分頁,它允許頁框大小為4KB或4MB(頁目錄10位,偏移量22位)。

pYYBAGL8pcCADBJEAABvfjdl1u0649.png

之后就是引入cache和TLB(計算機組成原理內容),就不詳細說了。

Linux的分頁

Linux采用三級分頁,頁全局目錄(10),頁中間目錄(10),頁表(10),偏移量(13)。

poYBAGL8pdOAQmGMAACqMsGtvIM563.png

保留的頁框

內核代碼和數據結構存放在一組保留的頁框中,這些頁框所含的頁從不動態分配或者交換到內存中。

作為一條常規,Linux內核被安裝在RAM物理地址0x00100000開始的地方,為什么從這個地方開始?

因為頁框0由BIOS使用,存放硬件配置。

物理地址0x000a0000到0x000fffff被BIO程序使用同時映射ISA上的顯存。

前1MB的其它頁框可能被保留用作特定的計算機模式。

為了避免把內核裝入一組不連續的頁框,Linux更愿跳過第1MB的RAM。(內核小于1MB _text---_etext)

pYYBAGL8peaAbwPJAAB8xS_WqQA758.png



審核編輯:劉清

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

    關注

    31

    文章

    5363

    瀏覽量

    121205
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10906

    瀏覽量

    213052
  • 微處理器
    +關注

    關注

    11

    文章

    2274

    瀏覽量

    82785
  • Linux系統
    +關注

    關注

    4

    文章

    596

    瀏覽量

    27512
  • LINUX內核
    +關注

    關注

    1

    文章

    316

    瀏覽量

    21747
收藏 人收藏

    評論

    相關推薦

    Linux內存管理是什么,Linux內存管理詳解

    Linux內存管理 Linux內存管理是一個非常復雜的過程,主要分成兩個大的部分:內核的
    的頭像 發表于 05-11 17:54 ?6161次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>詳解

    走進Linux內存系統探尋內存管理的機制和奧秘

    Linux 內存是后臺開發人員,需要深入了解的計算機資源。合理的使用內存,有助于提升機器的性能和穩定性。本文主要介紹Linux 內存組織結構
    的頭像 發表于 01-05 09:47 ?1692次閱讀

    關于Linux內存管理的詳細介紹

    Linux內存管理是指對系統內存的分配、釋放、映射、管理、交換、壓縮等一系列操作的
    發表于 03-06 09:28 ?1092次閱讀

    Linux內核的內存管理詳解

    內存管理的主要工作就是對物理內存進行組織,然后對物理內存的分配和回收。但是Linux引入了虛擬地址的概念。
    發表于 08-31 14:46 ?830次閱讀
    <b class='flag-5'>Linux</b>內核的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>詳解

    嵌入式Linux內存管理是什么

    點擊 嵌入式 Linux 內存管理
    發表于 11-05 07:01

    淺析SoC中斷與Linux內存管理

    什么是SoC中斷?Linux內存管理包括哪些?linux的進程調度時機有哪些?
    發表于 11-30 06:18

    linux內存管理機制淺析

    本內容介紹了arm linux內存管理機制,詳細說明了linux內核內存管理,
    發表于 12-19 14:09 ?73次下載
    <b class='flag-5'>linux</b><b class='flag-5'>內存</b><b class='flag-5'>管理</b>機制<b class='flag-5'>淺析</b>

    linux內存管理

    linux內存管理
    發表于 10-24 11:12 ?3次下載
    <b class='flag-5'>linux</b><b class='flag-5'>內存</b><b class='flag-5'>管理</b>

    基于Linux內存管理與Android內存分配機制

    Android采取了一種有別于Linux的進程管理策略,有別于Linux的在進程活動停止后就結束該進程,Android把這些進程都保留在內存
    的頭像 發表于 03-30 14:52 ?6279次閱讀

    你知道linux內存管理基礎及方法?

    linux內存管理采取的分頁存取機制,會將內存不經常使用的數據塊交換到虛擬內存
    發表于 04-28 17:12 ?1206次閱讀

    嵌入式 Linux 內存管理

    點擊 嵌入式 Linux 內存管理
    發表于 11-02 10:36 ?12次下載
    嵌入式 <b class='flag-5'>Linux</b> <b class='flag-5'>中</b>的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>

    Linux內存管理體系介紹

    內存是計算機最重要的資源之一,內存管理是操作系統最重要的任務之一。內存管理并不是簡單地
    的頭像 發表于 08-08 09:28 ?1695次閱讀

    Linux內存管理系統開發必知的3個結構概念

    Linux內存管理系統使用節點(node)、區域(zone)和頁(page)三級結構描述物理內存
    的頭像 發表于 08-28 09:34 ?962次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b><b class='flag-5'>內存</b><b class='flag-5'>管理</b>子<b class='flag-5'>系統</b>開發必知的3個結構概念

    Linux 內存管理總結

    一、Linux內存管理概述 Linux內存管理是指對系統
    的頭像 發表于 11-10 14:58 ?595次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>內存</b><b class='flag-5'>管理</b>總結

    Linux下如何管理虛擬內存 使用虛擬內存時的常見問題

    Linux系統,虛擬內存管理是操作系統內核的一個重要功能,負責
    的頭像 發表于 12-04 09:19 ?632次閱讀
    主站蜘蛛池模板: 轻点灬大ji巴太粗太长了h | 免费欧美黄色片 | 欧美黑人性受xxxx精品 | 欧美午夜精品 | 成人午夜小视频手机在线看 | 青草午夜精品视频在线观看 | 久久精品亚洲精品国产色婷 | 天堂视频在线视频观看2018 | 福利片免费一区二区三区 | 欧美专区一区二区三区 | 午夜爽爽爽 | 国产中日韩一区二区三区 | www.4虎| 日本在线不卡一区二区 | 淫操| 久久久久国产一级毛片高清片 | 亚洲一级毛片中文字幕 | 手机看片国产免费久久网 | 最好免费高清视频观看韩国 | 黄色欧美网站 | 天天草夜夜骑 | 免费视频爱爱 | 无人区理论片手机看片 | 欧美a网站| 狠狠色丁香婷婷综合视频 | 夜夜操天天干 | 三级免费黄录像 | 夜夜夜夜操 | 天天操天天舔 | 免费视频爰爱太爽了 | 国产精品青草久久 | 韩国三级理论在线观看视频 | 日日干夜夜操视频 | 五月天激情综合网 | 欧美成人一区二区三区在线视频 | 中文字幕第8页 | 伊人久久天堂 | 婷婷亚洲综合一区二区 | 久久草在线视频国产一 | av免费网站在线观看 | 色多多免费视频 |