Linux 内核对内存的使用方式

在Linux 中内存被划分为几个功能区域,如下图所示:

1、Linux内核占据在物理内存的最开始部分。

2、接下来是用于提供硬盘或者软盘设备等块设备使用的高速缓冲区部分。(当一个进程需要读取块设备的时中的数据的时候,系统会首先将数据读取到高速缓冲区中;当有数据需要写到块设备上的时候,系统也需要将数据放到高速缓冲区中,然后由块设备的驱动程序写到设备上。)

3、最后部分是提供,所以程序可以随时申请使用的主内存区。内核程序在使用主内存区的时候,同样是向内核的内存管理模块提出申请,在申请成功之后方能使用。

4、对于含有RAM虚拟盘的系统,主内存区头部还要划分去一部分,公虚拟盘存放数据。

但是对于急速哪几种所含的数据物理内存是有限的,因此CPU通常需要提供内存管理机制(软硬件结合的系统策略,区分MMU,这是内存管理单元,是CUP的内部硬件,mmu是实现内存管理机制的硬件基础)对系统重的内存进行有效的管理(这里可以看做是CPU和MCU的一大区别)。

常见的内存管理系统:内存分段系统 和 内存分页系统 (可同时使用)

而分页管理系统是可以选择的,可以通过编程的方式确定是否使用。

三种地址

当进程地址映射的时候,我们需要首先分清三种地址以及之间的变换概念:

程序的逻辑地址;CPU的线性地址;实际物理内存地址

1、逻辑地址:是指程序产生的与段相关的偏移地址部分

2、线性地址:是逻辑地址到物理地址转变之间的中间层;程序代码会产生逻辑地址,加上相应的段基地址就形成了一个线性地址。如果启用了分页机制,那么线性地址可以在经过变换生成一个物理地址,如果没有启用分页机制,那么线性地址就是物理地址。

3、物理地址:指的是在CPU外部地址总线上寻址物理内存的地址信号,是地址转换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和项表中的项变换成物理地址。如果没有启用分页机制,线性地址就可以转接成为物理地址。

虚拟内存

是指计算机呈现出来的内存量比实际的内存大得多。

(一个很恰当的比喻:不需要很长的轨道就能让火车开从上海开往北京,只需要足够长就行,采用的方式是把后边的轨道立刻铺到火车前面,只要操作足够快并满足要求,火车就能像在一条完整的轨道上运行一样。)这也就行虚拟内存管理需要完成的任务。假设内核给每一个程序划分了总容量为64MB的虚拟内存空间,因此程序的逻辑地址的范围就是0x0000000~0x4000000。(有时候也把逻辑地址成为虚拟地址,因为概念类似,都与实际的物理内存无关)。

分段管理机制

在内存分段系统中,一个程序的逻辑地址是通过分段机制自动的映射到中间层的线性地址上去的。每次对内存的引用都是对内存段中内存的引用。当一个程序引用了内存地址的时候,通过把相应的基地址加到逻辑地址上就形成了对应的线性地址,此时若没有启用分页机制,该线性地址就被送到CPU的外部地址总线上,用于直接寻址对应的物理地址。

分页管理机制

若是采用了分页机制。此时线性地址只是一个中间结果,还需要使用分页机制进行变换,最终映射到实际物理地址内存上,与分段机制类似,分页机制允许我们重定向内次的内存引用,以适应特殊要求,使用分页机制最普遍的场景是在系统内存被分为很多凌乱的块的时候,他可以建立一个大而连续的内存空间的影响,分页机制增强了分段机制的性能,页地址变换是建立在段变换的基础上的,任何分页机制的保护措施,并不会取代段变换的保护措施,而只是进行更近一步的检查操作。

地址映射

CPU进行地址映射的目的就是为了解决虚拟内存空间到物理内存空间的映射问题。虚拟内存空间的含义是指一种利用二级或者外部存储空间,使程序能够不受实际的物理内存限制而使用的一种方式。

虚拟内存管理的实现原理

原理上与上面讲到的火车运行类似。首先当一个程序需要使用一块不存在的内存空间(就是在内存页表项中已经标记处相应的内存页面不存在于内存中)的时候,就会触发CPU产生页错误异常中断,并把引起中断的线性地址放到CR2寄存器中,因此处理该中断过程就知道就可以知道发生页异常的确切地址,从而可以把进程要求的页面从二级存储空间加载到物理内存中。如果此时的物理内存已经满了,那么可以借助二级存储空间的一分部作为交换缓冲区,把内存中暂时不用的页面交换到二级缓冲区中,然后把要求的页面调入到内存中,这就是内存管理的缺页加载机制。

逻辑地址到线性地址的转换

在Linux 0.11中,程序的逻辑地址到线性地址的变换过程使用的是CPU的全局段描述符GDT和局部描述符LDT。由GDT映射的地址空间叫做全局地址空间,由LDT映射的地址空间叫做局部地址空间,二者构成了虚拟地址空间。

从Linux0.99之后内存空间的使用方式发生了变化,每个进程可以单独的享用整个4GB的地址空间范围。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值