linux内存管理

linux的内存管理

早期计算机中,程序是直接运行在物理内存上的,换句话说就是程序在运行过程中访问的都是物理地址,如果这个系统只运行一个程序,只要这个程序所需的内存不要超过该机器的物理内存就好,但系统都是支持多任务,多进程的,这个时候我们就要考虑到将系统内有限的物理内存如果有效第分配给多个程序了,这个事情我们称之为内存管理

先要知道几个技术点:

1)进程地址空间不能隔离;

2)内存使用的效率低;

3)程序运行的地址不能确定
linux引入了虚拟内存。就是程序和物理内存之间引入了虚拟内存的这个概念。程序只能看见虚拟内存,不能访问物理内存,每个程序都有自己独立的进程地址空间,这样给予做到了进程隔离
现在需要解决怎么从虚拟地址映射到物理地址。因为i程序最终是要运行到物理内存中的,主要有分段和分时技术两种技术;

分段技术

基本思路就是将程序所需的内存地址空间大小的虚拟空间映射到某个物理地址空间
分段技术解决了进程之间控制隔离和程序地址重定位的问题,但是对于内存映射仍然是以程序交换为单位的,内存的使用效率仍然很低。

分页机制

就是把内存地址空间分为若干个很小的固定大小的页,每一页的大小由内存决定,这样做是为了提高内存和磁盘的利用率,
linux中一般页的大小是4KB,我们把进程的地址空间按页分割,把常用的数据和代码装载到内存中,不常用的代码和数据保存在磁盘中。
分页机制的实现需要硬件的实现,这个硬件的名字叫做MMU,专门负责从虚拟地址到物理地址的转换。

原文地址:https://www.cnblogs.com/hanfei-1005/p/5678685.html