文档章节

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
04/20
0
0
聊聊:Linux的内存管理机制

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

问题终结者
08/19
0
0
Linux小知识-5:内核结构

Linux内核主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 稍微加以理解:CPU资源——内存资源——外存资源——外部资源——通信。 进程调度(SCHED):控制进...

lp_king
2013/09/28
0
0
Linux内存管理(简洁概括)

虚拟内存是为了满足物理内存不足采用的策略,利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的空间也就是交换分区。 作为物理内存的扩展,Linux会在物理内存不足时,使用交换分区的逻辑内存,...

Taisuke
2014/06/16
0
0
Linux与Android的关系

大家都知道Android是基于Linux内核的操作系统,也曾经和Linux基金会因为内核问题产生过分歧,本文将开始对Android的内核进行剖析,主要介绍Android和Linux之间的关系,后续还会讲到Android系...

开心303
2011/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RESTful架构详解

1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主...

kitty1116
8分钟前
0
0
精通Spring Boot——第十篇:Quartz动态配置定时任务

定时任务简述 定时任务,在企业开发中尤其重要,很多业务都是需要定时任务去做的。比如说10点开售某件东西,凌晨0点统计注册人数,统计其他各种等等。这个时候不可能说让人为的去开启某个开关...

developlee的潇洒人生
10分钟前
0
0
将一些内容输出到文件中

看到一个面试题,如下: 第八题: 一个字符串将其输入到一个文件中,代码如下: <?php$a = '[{"teamId": "43", "serial": "1"},{"teamId": "1", "serial": "2"},{"teamId": "14", "serial":...

vinci321
19分钟前
0
0
nginx的简单使用:负载均衡

nginx:反向代理的服务器;用户发送请求到nginx,nginx把请求发送给真正的服务器,等待服务器处理完数据并返回,再把数据发送给用户。 nginx作为一个反向代理服务器,能缓存我们项目的静态文...

osliang
今天
2
0
网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百...

网站安全
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部