linux储存管理

linux系统使用的是地址空间的概念来管理内存数据。如果把物理地址暴露给进程会带来几个问题:
1.非法程序可能会破坏操作系统。
2.很难实现并发。
所以引入了地址空间的概念:地址空间是一个进程可用于寻址内存的一套地址集合。
简单来说,地址空间为进程创造了一种抽象的内存。每个进程都有自己的地址空间,并且这个地址空间独立于其他进程的寻址空间。
要保证多个应用程序同时处于内存中并且互相不影响,需要解决两个问题:保护和重定位。

解决内存超载

有两种处理内存超载的方法:
1.最简单的测略就是交换技术:一个进程先在内存中运行,等到空闲的时候运行在磁盘中,则休眠的时候就不会占用内存。在交换的时候,把空闲进程从磁盘交换到内存的时候,在内存上的位置会和交换到磁盘前的内存位置不同。所以要对地址进行重定位。为了避免进程在运行的时候因为内存增长而导致内存不够的情况,我们在申请内存的时候都会额外分配一些额外的内存来预留给内存。

2.虚拟内存: 每个程序都拥有自己的地址空间,这个空间被分割成许多块,每块都被称作一页。每一页是连续的地址范围。这些页被映射到物理内存。当程序引用到一部分在物理内存中地址空间时,通过硬件执行必要的映射。当程序应用到一部分不在物理内存的地址空间的时候,通过操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
虚拟内存技术解决了程序大小比物理内存大小还大的问题,节省了计算机的资源。在这里插入图片描述
虚拟内存主要提供了三个能力:
1.把主存看成是一个储存在磁盘上的地址空间的高速缓存,在主存中只保存活动活动于,并根据需要在磁盘和主存之间来回传送数据,是得能够运行比内存大得多的程序。
2.为进程提供了一致的地址空间,简化了存储器管理。
3.保护每个进程的地址空间不被其他进程破坏。

虚拟地址空间是由若干个页面组成。操作系统会给每一个进程维护一个页表,页表中存储的是进程的页到内存的页帧的映射。在这里插入图片描述
在不同的进程中,如果两个变量的逻辑地址相同,但是由于每个进程的页表不同,所以映射后的结果也不同。所以物理地址完全不同。

加速分页过程

对大而快速的页映射的需求成为了构建计算机的重要约束。所以有如下两种方法加速映射:
1.转换检测缓冲区(TLB):是一种硬件设备。
2.软件TLB管理;

针对大内存的页表

1.多级页表:避免把全部页表一直保存在内存中。一级页表中包好二级页表。
2.倒排页表:每一个页框有一个表项,而不是每一个虚拟页面有一个表项。

猜你喜欢

转载自blog.csdn.net/ALITAAAA/article/details/109430969