内存管理的概念
操作系统作为系统资源的管理者,也需要对内存进行管理,要管理些什么呢?
1.内存空间的分配和回收
首先看几个问题?
- 进程需要投入运行就需要先把数据放到内存中,内存中有的区域已经分配出去,有的区域是空闲的。操作系统要怎么记录这些区域呢?
- 现有一个新的进程需要投入运行,内存中空闲的区域还很多,那么这个进程具体要存到哪块区域呢?
- 当进程运行结束后,如何将进程占用的内存空间回收?
可以先回答文章开头的大问题,操作系统作为系统资源的管理者,也需要对内存进行管理,要管理些什么呢?
答:①操作系统负责内存空间的分配和回收。
这个回答范围比较庞大,之后的文章会逐步拆解,现在先来了解部分相关知识点。
内存空间的扩展
新的问题,现在许多电脑游戏占用容量非常庞大,一般都有几十GB的大小,按理说这个游戏运行之前需要把几十GB的数据全部放入内存。然后,我们普通电脑内存才4GB到32GB,为什么游戏可以顺利运行呢?——虚拟技术(操作系统的虚拟性)
因此可以补充回答,②操作系统需要提供某种技术从逻辑上对内存空间进行扩充。
地址转换
为了使编程更方便,程序员写程序时应该只需要关注指令、数据的逻辑地址。而逻辑地址到物理地址的转换(这个过程叫==地址重定位)==应该由操作系统负责,这样就保证了程序员写代码时不需要关注内存的实际情况。
补充回答,③操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换。
内存保护
补充回答,④操作系统需要提供内存保护功能。保证各进程在各自存储空间内运行,互不干扰。
如上图,假设进程1的逻辑地址空间0到179;实际物理地址空间为100到279。
操作系统怎么进行内存呢?
方法一
在cpu中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。如下图:
方法二:
采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器),进行越界检查。重定位寄存中存放的是进程的起始物理地址,界地址寄存器中存放的是进程的最大逻辑地址。
重定位寄存中存放的是进程的起始物理地址,界地址寄存器中存放的是进程的最大逻辑地址。
相比于方法一,都是使用了两个寄存器,只不过存放内容不一样而已。