linux内存分段管理,Linux內存管理之分段機制
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內存管理之分段機制相关推荐
- oracle11g ora00838,管理oracle11g內存設置 解決ora-02097 ora-00838 ora-00845報錯問題
Oracle對內存的管理的 優化從未間斷,從8i到11g不斷地提出新的管理概念.每個本版都對內存管理進行了簡化:1.8i->9i:PGA的自動管理;2.9i->10g:SGA的自動管理;3 ...
- linux内存段页,linux内存管理-段式和页式管理
该博文参考国嵌视频和http://www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html,在此感谢作者. 一.地址类型 物理地址:CPU通过 ...
- linux 内存大页,Linux大页内存管理等---菜鸟初学
1. 查看linux的内存情况: free -m 2. 查看是否开启大页的方法: cat /proc/meminfo |grep -i HugePage AnonHugePages: 276480 k ...
- linux内存映射原理,Linux内存管理实践-使用fault()实现内存映射
内核态与用户态进行数据交互通常是这样一种模型:内核利用自身的特权通过特定的服务程序采集.接收和处理数据:接着,用户态程序和内核服务程序进行数据交互,或接收内核态的数据,或向内核态写入数据.通过传统的那 ...
- linux内存分析命令,Linux進程內存分析pmap命令
轉自: http://blog.csdn.net/u013982161/article/details/52654256 名稱: pmap - report memory map of a proce ...
- linux内存测试工具memtest,Linux-内存检测利器Memtest86+v1.70
[Linux]内存检测利器Memtest86+ v1.70 Memtest86+是一款基于Linux核心的内存检测工具,由x86-secret小组在Chris Brady的Memtest86的基础上增 ...
- linux内存寻址实例,Linux内存寻址
我会尽力以最简洁清晰的思路来写这篇文章. 所谓内存寻址也就是从写在指令里的地址,转化为实际物理地址的过程.因为操作系统要兼顾许多东西,所以也就变得复杂. 逻辑地址 → 线性地址 → 物理地址 逻辑地址 ...
- linux内存使用统计,Linux 中free命令检查内存使用情况
我们都知道, IT 基础设施方面的大多数服务器(包括世界顶级的超级计算机)都运行在 Linux 平台上,因为和其他操作系统相比, Linux 更加灵活.有的操作系统对于一些微乎其微的改动和补丁更新都需 ...
- 深度讲解Linux内存管理和Linux进程调度-打通任督二脉
我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU.内存资源等的真正分布,具体的工作机制,这使得他 ...
- linux内存热插拔系统,Linux Memory Hotplug
这篇翻译源于linux/Documentation/memeory-hotplug.txt. 内存的热插拔技术 这个文档主要介绍内存的热插拔技术的使用以及该技术的当前情况.因为该技术当期人然处于开发阶 ...
最新文章
- 干货丨一份不可多得的深度学习技巧指南
- ASP.NET页面生命周期与应用程序生命周期
- trackr: An AngularJS app with a Java 8 backend – Part IV 实践篇
- 存储系统管理服务器,Mainframe的存储管理系统和架构
- 如何用苹果手机生成扫描件
- 全国计算机等级考试题库二级C操作题100套(第40套)
- 【java设计模式】之 工厂(Factory)模式
- 简单解决Python文件中文编码问题
- 前缀(波兰表达式) 中缀 后缀(逆波兰表达式)
- 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile
- python你!_你都用 Python 来做什么?
- 类编程的WAF(下)
- 谷歌f12能看到php代码吗,谷歌浏览器F12基本用法
- 借助Net-Speeder对服务器进行优化
- 我,35岁大专,高龄入职鹅厂,试用期未过被劝退(分享java面试宝典)
- 使用GHOST对Windows操作系统进行备份和还原
- 微信小程序实现获取当前系统时间
- code wars_从开发人员的角度看Browser Wars™(扩展)
- vm fusion Linux系统克隆
- Vue - 本地上传 Excel 文件页面表格预览(配合 ElementUI / 带分页)