Linux內存管理之分段機制

邏輯地址就是我們普通的段+偏移的表現方式,而線性地址就是段+偏移之後算出來的一個地址,前者可以認

為是二維的地址,而後者可以理解是一維的。線性地址和虛擬地址的概念相接近,不知道其根本的區別。而

物理地址就是實際在地址總線上傳輸的地址,也就是物理內存訪問的真正地址。

如上圖,Linux在內存管理上,把邏輯地址通過分段機制變化成線性地址,線性地址也就是4G(32位系統)

的程序地址。線性地址再通過分頁機制轉化成物理地址,最後CPU去訪問物理地址。 去年寫個一篇關於IA32內存尋址的文章,現在再重溫下。下面是一張很好的內存尋址圖

採用分段機制的好處就是方便了程序員的編碼,把整個地址分成不同的數據段,代碼段,數據段,堆棧

等等。每個段都是動態調整的,在程序重定向的時候。那麼對於每一個段的基本信息:段的起始地址,

段的長度,段的訪問權限等,都會保存在段描述表中(上面的GDT),GDT是存在物理內存中的。也就說

我們普通的程序執行一條指令的時候(比如C語言中的&操作),我們操作的是一個邏輯地址,邏輯地址必須

通過段機制轉化成線性地址,而根據什麼轉化呢?就是GDT!GDT會告訴你在線性地址哪裡到哪裡是你的數

據段,哪裡到哪裡是代碼段。那麼我們怎麼找到GDT呢?GDT是在內存裡的,這就用到寄存器GDTR了,

GDTR會告訴你GDT在內存的起始位置,然後就可以去問GDT我要訪問的邏輯地址所對應的線性地址是什

麼。再深入點,上面說的了GDT裡面是描述每個段的基本信息的,其中就是每個段在線性地址裡對應的起始

位置。

GDT裡面存的是各個段的索引,叫做段選擇子(Seg.Selector),現代計算機為了減少對內存訪問的次數,

就把段選擇子存於我們平時說的CS寄存器,DS寄存器等,這樣,一個邏輯地址到線性地址的轉換就大大地

加快了。

現在完整地說一遍上面分段的整個流程,對於一個邏輯地址(段:偏移),首先通過GDTR找到GDT,GDT

裡面是段選擇子,直接從段寄存器獲得,通過段選擇子找到該段在內存裡的基地址,然後加上邏輯地址的偏

移部分,這就完整地得到了一個線性地址。

linux内存分段管理,Linux內存管理之分段機制相关推荐

  1. oracle11g ora00838,管理oracle11g內存設置 解決ora-02097 ora-00838 ora-00845報錯問題

    Oracle對內存的管理的 優化從未間斷,從8i到11g不斷地提出新的管理概念.每個本版都對內存管理進行了簡化:1.8i->9i:PGA的自動管理;2.9i->10g:SGA的自動管理;3 ...

  2. linux内存段页,linux内存管理-段式和页式管理

    该博文参考国嵌视频和http://www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html,在此感谢作者. 一.地址类型 物理地址:CPU通过 ...

  3. linux 内存大页,Linux大页内存管理等---菜鸟初学

    1. 查看linux的内存情况: free -m 2. 查看是否开启大页的方法: cat /proc/meminfo |grep -i HugePage AnonHugePages: 276480 k ...

  4. linux内存映射原理,Linux内存管理实践-使用fault()实现内存映射

    内核态与用户态进行数据交互通常是这样一种模型:内核利用自身的特权通过特定的服务程序采集.接收和处理数据:接着,用户态程序和内核服务程序进行数据交互,或接收内核态的数据,或向内核态写入数据.通过传统的那 ...

  5. linux内存分析命令,Linux進程內存分析pmap命令

    轉自: http://blog.csdn.net/u013982161/article/details/52654256 名稱: pmap - report memory map of a proce ...

  6. linux内存测试工具memtest,Linux-内存检测利器Memtest86+v1.70

    [Linux]内存检测利器Memtest86+ v1.70 Memtest86+是一款基于Linux核心的内存检测工具,由x86-secret小组在Chris Brady的Memtest86的基础上增 ...

  7. linux内存寻址实例,Linux内存寻址

    我会尽力以最简洁清晰的思路来写这篇文章. 所谓内存寻址也就是从写在指令里的地址,转化为实际物理地址的过程.因为操作系统要兼顾许多东西,所以也就变得复杂. 逻辑地址 → 线性地址 → 物理地址 逻辑地址 ...

  8. linux内存使用统计,Linux 中free命令检查内存使用情况

    我们都知道, IT 基础设施方面的大多数服务器(包括世界顶级的超级计算机)都运行在 Linux 平台上,因为和其他操作系统相比, Linux 更加灵活.有的操作系统对于一些微乎其微的改动和补丁更新都需 ...

  9. 深度讲解Linux内存管理和Linux进程调度-打通任督二脉

    我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU.内存资源等的真正分布,具体的工作机制,这使得他 ...

  10. linux内存热插拔系统,Linux Memory Hotplug

    这篇翻译源于linux/Documentation/memeory-hotplug.txt. 内存的热插拔技术 这个文档主要介绍内存的热插拔技术的使用以及该技术的当前情况.因为该技术当期人然处于开发阶 ...

最新文章

  1. 干货丨一份不可多得的深度学习技巧指南
  2. ASP.NET页面生命周期与应用程序生命周期
  3. trackr: An AngularJS app with a Java 8 backend – Part IV 实践篇
  4. 存储系统管理服务器,Mainframe的存储管理系统和架构
  5. 如何用苹果手机生成扫描件
  6. 全国计算机等级考试题库二级C操作题100套(第40套)
  7. 【java设计模式】之 工厂(Factory)模式
  8. 简单解决Python文件中文编码问题
  9. 前缀(波兰表达式) 中缀 后缀(逆波兰表达式)
  10. 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile
  11. python你!_你都用 Python 来做什么?
  12. 类编程的WAF(下)
  13. 谷歌f12能看到php代码吗,谷歌浏览器F12基本用法
  14. 借助Net-Speeder对服务器进行优化
  15. 我,35岁大专,高龄入职鹅厂,试用期未过被劝退(分享java面试宝典)
  16. 使用GHOST对Windows操作系统进行备份和还原
  17. 微信小程序实现获取当前系统时间
  18. code wars_从开发人员的角度看Browser Wars™(扩展)
  19. vm fusion Linux系统克隆
  20. Vue - 本地上传 Excel 文件页面表格预览(配合 ElementUI / 带分页)

热门文章

  1. 百度站内搜索应该注意哪些方面?
  2. 统计图表类库--libchart使用简介
  3. AxureRP7.0基础教程系列 部件详解Text Area 文本段落
  4. 在你的Android上执行Linux命令
  5. Oracle操作(转)
  6. jquery与javascript的引入问题
  7. 2.OAuth 2实战 --- OAuth 之舞
  8. 30.卷1(套接字联网API)---客户/服务器程序设计规范
  9. 23.卷1(套接字联网API)---高级SCTP套接字编程
  10. 11. CSS 文本属性