文档章节

Linux的内存管理

刘女士zh
 刘女士zh
发布于 2017/07/21 16:47
字数 1032
阅读 13
收藏 0

         Linux的进程虚拟空间为4G,内核空间为1G,用户空间为3G。在Linux的内存管理中,所有进程共享内核空间,各自拥有自己的用户空间。如图1所示

               

图1

         虽然系统空间占据了1G,但是在物理的内存中却总是从0开始,所以,系统空间到物理地址上的映射是简单的线性映射,0xC0000000是两者之间的偏移量。   即:物理地址=虚拟地址+偏移量。

        下面讲讲用户空间到物理地址空间上的映射。

一、分段管理

        在分段管理中,Intel在8086 CPU系列中设置了4个段寄存器:CS、DS、SS和ES,分别用于可执行代码即指令、数据、堆栈和其他。每个段寄存器是16位,对应于地址总线的高16位。每条访内指令中的内部指令是16位,但是在送上地址总线之前CPU全部会自动的与某个寄存器中的内容相加。形成一个20位的实际地址。这样就实现了内部地址到实际地址的转换或说“映射”。------------实模式

实地址模式:8086/8088系列处理在早期的时候采用的是这种管理模式。没有地址空间的保护机制。

因为实模式的地址映射没有安全机制,所以Intel又实现了保护模式的地址映射。

保护模式保留了实模式下的4个段寄存器,并且还增加了两个段寄存器FS和GS。在保护模式下,基地址已经升级位一个包含基地址,地址长度和其他一些信息的数据结构的指针。为了防止不具备特权的用户程序通过玩弄某些诡计而改变内核和用户空间。在80386CPU中增设了两个寄存器:一个是全局性的段描述符表寄存器(GDTR)和局部性段描述符表寄存器(LDTR),分别可以用来指向存储在内存中的一个段描述符结构数组,或称段描述符表。每个段描述符为8字节。

在此基础上,段寄存器的高13位用作访问段描述符表中具体描述结构的下标。如图2所示:

13位下标 TI RPL

TI:0表示使用的是GDTR,1表示使用的是LDTR

 RPL:表示特权级别,00表示最高级别,11表示最低级别 

13位表下标:表示从8192个段描述符表项中选择一个描述符。

GDTR或LDTR中的描述符表指针和段寄存器中给出的下标结合在一起,才决定了具体的段描述符表项在内存中的什么地方,也可以理解成,将段寄存器内容的低3位屏蔽掉以后与GDTR或LDTR中的基地址相加得到描述符表项的起始地址。每个段描述表项的大小是8字节。每个描述符表项含有段的基地址和段的大小和其它一些信息。8字节段描述符表项的定义如下图所示:

二、页式存储管理结构

    linux的内存管理结构是分段和分页两个结合来实现的。因为保护模式下的分段管理的系统结构决定了分页管理的结构,所以,分页管理的线性地址是通过分段管理映射而来的。

   每页的大小为4K,一旦启用了页式存管,所有的线性地址都要经过页式映射,连GDTR和LDTR给出的段描述表项起始地址也不例外的。在页式存管中对线性地址的重新定义如下:

页面目录 页面表    页内偏移offset

    在页式存管中,又增加了一个新的寄存器CR3,用来存放页目录表项的基地址。从线性地址到物理地址的映射过层如下图1.5:

© 著作权归作者所有

共有 人打赏支持
刘女士zh
粉丝 0
博文 1
码字总数 1032
作品 0
萍乡
私信 提问
深入理解Linux内存管理-之-目录导航

转自:https://blog.csdn.net/gatieme/article/details/52384965 1 内存描述 2 页表管理 3 初始化内存管理

zwfgogo
2018/04/20
0
0
聊聊:Linux的内存管理机制

导读 经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。 这是Linux内存管理的一个...

问题终结者
2018/08/19
0
0
Linux 内核剖析

简介: Linux® 内核是一个庞大而复杂的操作系统的核心,不过尽管庞大,但是却采用子系统和分层的概念很好地进行了组织。在本文中,您将探索 Linux 内核的总体结构,并学习一些主要的子系统和...

晨曦之光
2012/03/02
165
0
linux内核中没有分页内存

linux内核中没有分页内存吗?是的,没有,那么windows的内核为何就有呢?毕竟不是一个家族不好做全方位的评判,我的结论就是linux上的任何的程序只将内核作为一个平台而不依赖内核。这个事实...

晨曦之光
2012/04/10
234
0
指针的意义和linux的内存回收艺术

linux的内存回收机制设计得简直是一种艺术,精通c语言的不一定不会把c语言玩得导致内存泄漏,精通java的虽然再也不用玩指针了,那也不能完全相信java的内存回收机制,毕竟一个java程序出事了...

晨曦之光
2012/04/10
448
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据处理也要安全--关于MaxCompute的安全科普

摘要: 企业从未像今天这样可以轻易地存储和使用大数据。然而,当您在使用大数据产品时,是否考虑过其中的安全问题呢?庆幸的是,阿里云产品专家和安全专家早就想你所想急你所急,先行一步将...

阿里云云栖社区
30分钟前
1
0
vue如何编写组件可以通过Vue.use()使用

一般平时用别人的组件时都是通过import引入然后Vue.use()来使用,那么如何让我们写的组件也可以用这种方式使用呢? 1.首先新建一个文件夹例如:Home,然后在该文件中新建两个文件Home.vue和i...

北辰丨丶
30分钟前
2
0
SpringBoot自动配置原理

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面Spring的文章(以学习的顺序排好): Spring入门这一篇就够了 Spring【依赖注...

Java3y
34分钟前
2
0
如何伪装成一个服务端开发(十) -- Spring MVC 源码

前言 在第七篇我们已经聊过了一些Spring MVC的运行原理,当然大多数人应该还是和我一样迷迷糊糊,只知道一个大概的运行过程,这一篇,我想要从源码的角度更加进一步去了解Spring MVC的整个运...

街角的小丑
39分钟前
1
0
应用前台耗电怎么破?功耗避雷指南已“佩奇”

使用应用时被用户吐槽手机掉电快、卡顿、过度发热,导致用户体验差,以上情况的产生,应用的功耗设计不足是直接症结。 当前,人们对性能体验的追求前所未有,应用设计功能越来越强大,界面也...

安卓绿色联盟
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部