网站运营
位置:首页>> 网站运营>> Linux内存管理和寻址详细介绍

Linux内存管理和寻址详细介绍

作者:人生一世,草木一秋。  发布时间:2023-11-03 16:34:26 

标签:Linux,内存管理,内存寻址

1.概念

内存管理模式

段式:内存分为了多段,每段都是连续的内存,不同的段对应不用的用途。每个段的大小都不是统一的,会导致内存碎片和内存交换效率低的问题。

页式:内存划分为多个内存页进行管理,如在 Linux 系统中,每一页的大小为 4KB。由于分了页后,就不会产生细小的内存碎片。但是仍然也存在内存碎片问题。

段页式:段式和页式结合。

地址类型划分

逻辑地址:程序所使用的地址,通常是没被段式内存管理映射的地址,称为逻辑地址

线性地址:通过段式内存管理映射的地址,称为线性地址,也叫虚拟地址

虚拟地址:通过段式内存管理映射的地址,称为线性地址,也叫虚拟地址

物理地址:物理内存地址

说明:

Inetel处理器中,逻辑地址是「段式内存管理」转换前的地址,线性地址则是「页式内存管理」转换前的地址。

段式内存管理映射而成的地址不再是“物理地址”了,Intel 就称之为“线性地址”(也称虚拟地址)。于是,段式内存管理先将逻辑地址映射成线性地址,然后再由页式内存管理将线性地址映射成物理地址。

linux内存主要是页式内存管理,同时也有涉及段式机制。当前Linux内核所采取的办法是使段式映射的过程实际上不起什么作用。

Intel最早处理器80286是纯段式管理,80386段式和页式均存在。

Linux内存管理和寻址详细介绍

2.页式管理

x86架构32位cpu

二级页表选址方式,一个内存页4KB大小,一级页目录表1024项,二级页表1024项,一个页表项4字节。一级页目录表项全部分配,二级页表在需要的时候创建。(局部性原理)。

虚拟地址32位

10+10+12,分别索引1级页表号,2级页表项,记录物理基地址的偏移地址。使用PAE机制之后32bit系统支持最大的内存是64GB(地址是32+4=36位)。

线性地址寻址物理地址步骤

先根据10位寻址1级页表号,1级页表号中记录了2级页表的地址

找到2级页表地址后,接着根据虚拟地址的另10位寻找2级页表中表项的位置

找到2级页表的表项之后,表项中记录了该虚拟地址映射物理地址的起始地址,表项的大小是4字节32bit

根据找到的物理地址的起始地址结合虚拟地址的后12位作为偏移计算出最终的物理地址

Linux内存管理和寻址详细介绍

x86架构 64位cpu

存在更多级页表

全局页目录项 PGD(Page Global Directory上层页目录项 PUD(Page Upper Directory)中间页目录项 PMD(Page Middle Directory)页表项 PTE(Page Table Entry)

线性地址寻址物理地址步骤

线性地址为48bit,最大物理地址为52bit,实际物理内存地址总线宽度是40bit,也就是支持1TB物理内存x86_64有四级页表,原理同x86系统,也是一层层的寻址CR3寄存器保存最高层一级表的起始物理地址,因此寻址首先就是要获取到CR3寄存器中的值每个PTE表项的大小是8个字节也就是64bit

Linux内存管理和寻址详细介绍

TLB

在 CPU 芯片中,加入了一个专门存放程序最常访问的页表项的 Cache,这个 Cache 就是 TL(Translation Lookaside Buffer) 。通常称为页表缓存、转址旁路缓存、快表等。那么在CPU的内存管理单元MMU寻址时,会先查 TLB,如果没找到,才会继续查常规的页表。

专有名词

PDT:页目录表,多级页表一级页表,32bit系统有1024个页目录
PTT:页表项表,多级页表二级页表,32bit系统有每个页目录下有1024个页表项,每个表项4个字节
PDE:页表的基址,是PDT中一项
PTE:是页的基址,是PTT中一项
GDT:全局描述符表,逻辑地址转为线性地址用到
LDT:局部描述符表,逻辑地址转为线性地址用到

Linux内存管理和寻址详细介绍

3.地址划分

32系统
内核1G: 0xC0 00 00 01 - 0xFF FF FF FF
用户3G: 0x00 00 00 00 - 0xC0 00 00 00
0xC0 00 00 00 == 3G

64位系统:
内核128T: 0xFF FF 80 00 00 00 00 00 - 0xFF FF FF FF FF FF FF FF (高位)
0xFF FF 7F FF FF FF FF FF - 0xFF FF FF FF FF FF FF FF(自己计算)

用户128T: 0x00 00 00 00 00 00 00 00 - 0x00 00 7F FF FF FF FF FF (低位)
0x00 00 80 00 00 00 00 00 - 0x00 00 80 00 00 00 00 00 (自己计算)

0x00 00 7F FF FF FF FF FF == 127T
     疑问:64位系统128T是分界线是127T?

访问权限

进程在用户态时,只能访问用户空间内存
只有进入内核态后,才可以访问内核空间的内存

PAE机制

CPU位宽指的是一个时钟周期内CPU能处理的二进制位数,普通场景中32位系统CPU的地址总线可以是32位,但是引入了PAE机制之后,16位CPU的地址总线位宽可以是20位(物理内存1M),32位CPU的地址总线可以是36位(物理内存64GB),64位CPU的地址总线位宽可以是40位(物理内存1TB)。因此我们不能简单的说32位系统只支持最大4GB的内存条。

4. 调试

程序寄存器

cs:是代码段寄存器
ds:是数据段寄存器
ss:是堆栈段寄存器
es:是扩展段寄存器
fs:是标志段寄存器  32位之后才有
gs:是全局段寄存器 32位之后才有

示例一个内核宕机的日志:

RIP: 0010:[

查看程序寄存器

使用GDB随意调试一个linux 32位上的ELF32的可执行文件,使用info r命令查看一下寄存器情况:

Linux内存管理和寻址详细介绍

段寄存器有0x23和0x2b两种情况:

十六进制:0023
二进制:0000000000100 0 11 - 段序号:4 - 表类型:GDT - 特权级:Ring3
十六进制:002B
二进制:0000000000101 0 11 - 段序号:5 - 表类型:GDT - 特权级:Ring3

段序号:从第四位开始  表类型:第三位  特权级:第1、2位

Linux下没有找到可以直接用什么命令或者工具查看GDT的方式,于是去源代码中寻找答案:

Linux内存管理和寻址详细介绍

看到了吗,这两项所描述的段和Windows一样,基地址为0,大小为4GB。

Windows和Linux都选择了通过这种方式架空了CPU的分段内存管理机制。

但需要说明一下的时,虽然两个操作系统都是这种情况,但并不意味着段机制彻底没用到,CPU的任务管理TSS还是需要用到,这一点大家知道就行了,在linux64位系统下分段机制不被待见,但是操作系统仍然会保持先分段再分页的寻址方式。

来源:https://www.cnblogs.com/nm90/p/15655108.html

0
投稿

猜你喜欢

  • 现在这里还没有关于维护vsftp服务器的资料。vsFTP使用的一些补充补充一:如何有选择的把用户限制在家目录中呢?我们要自己建一个文件,在/
  • 在11月5日举行的2009第二届易观新媒体营销年会上,51.com副总裁程悦就51.com的发展进行了分享,并表示在病毒式传播中获得了很大成
  • 一款“开心农场”让众多网民非网民们见识到了WebGame的力量到底有多大,那些起早摸黑半夜钻出被窝不惧寒冷只为偷菜的人们,在所有人看来这是极
  • 前言今天发现es日志未记录,检查了filebeat、elasticsearch、logstash之后发现es的索引都变成了只读状态,手动修改
  • 美国主机空间商实在太多太多了,共性的东西很多,每个空间有各有其个性的地方,经常有朋友问到有什么区别啊,空间商有什么特色啊,今天美国主机评论家
  • 阅读上一篇:一个完美网站的101项指标.第二部分.内容为王完美的内容是用来使用的,不管您的内容多么精彩,如果它们很难访问,用户照样会离开,易
  • 11月12日,据境外媒体报道,比尔·盖茨(Bill Gates)近日表示,华尔街高管们的薪水“通常
  • Kesioncms V6版本系列产品开发的网站已支持多种的运行方式如全静态、全动态、部分静态、伪静态(带问号,无需组件)、rewrite组件
  • 北京时间10月16日消息,据国外媒体报道,互联网安全软件厂商AVG周四发布报告称,包括MyGirlySpace、Ferraritone、Ma
  • 笔者阿霸的站长资源群有很多初级站长朋友,在群里日常的交流中,发现这些初级站长对SEO是有所了解。但是站长们在网站制作的细节上,往往掌握不到一
  • 一个文档标题,最好的定义方法是什么?要回答这个问题,先设想我们要在一个页面上定义文章的标题,通常我们有三个方法来实现这个简单目的:方法一:
  • 有才不遇,就要多加主动出击。因此,无论你的博客内容多么精彩,预期中会多么受欢迎,你得让别人看到,只有别人发现了您的内容,价值才能得以体现。在
  • 有GoDaddy用户问该如何设置GoDaddy独立服务器呢?如果已购买了独立服务器,并且我们已经完成初始配置,只需要登陆到Dedicated
  • 序言偶尔你们会有机会了解一件事情的来龙去脉和其中的内幕,今天你就很幸运,因为我将带你领略当今最热门,同时也可能是你已经熟悉了的技术:万维网。
  • 对于我们靠网络赚钱的人来说,学一些软文写作的知识,是非常必要的。因为做网赚必须要了解网络广告,软文是网络广告非常重要的组成部分。什么是软文:
  • 背景最近在复习Linux命令,到df的时候发现了一个之前忽略的东西。也就是 -i 这个选项,列出文件系统分区的inode信息。这个inode
  • Discuz与UCenter同步删除用户的问题,一直得不到解决。由于论坛采用的是注册审核制,每天都要删除大量的恶意注册用户,不能在UCent
  • 老马说,你现在混日子,小心将来日子混了你。我们中的很多站长都在混日子,也许,我们仿佛找到了理想,伸出一把手却又没有抓住,一点感觉都没有似的。
  • 在安装完VMware后,启动时可能会遇到一下问题: 出现这类问题的原因可能是之前安装过VMware,但是卸载后未将vmx86文件清
  • 做一个有个性的个人网站,首先要明确自己的内容规划。A/符合自己的个性 网站有很多种不同的类型,你的网站属于什么类型?一个资源下载站?一个网络
手机版 网站运营 asp之家 www.aspxhome.com