地址转换
地址转换:硬件对每次的内存访问进行处理,将指令的虚拟地址转换为数据实际的物理地址。
但是仅仅靠硬件无法解决,它只能提高效率。还需要操作系统的帮助。
这使得每个程序好像拥有了自己私有的内存空间,存放着自己的代码和数据。但实际上是多个程序共用内存。
动态重定位
每个CPU需要两个硬件寄存器:基址寄存器和界限寄存器。这两个寄存器能够让我们将地址空间放在物理内存的任何位置,同时又保证程序只访问自己的地址空间。
采用这种硬件的地址转换方式,进程中的内存引用都是虚拟地址,而虚拟地址加上基址寄存器中的内容,可以算出来真实的物理地址,再发送给内存系统。
由于这个由虚拟内存转换为具体的物理内存的过程是在运行时发生的,所以又叫做动态重定位。
这里面的界限寄存器,就是用来保证进程只访问自己范围内的空间,如果越界,则cpu会触发异常,进程会被终止。
操作系统要做什么
1、进程创建时,操作系统要为进程的地址空间找到内存空间。这就需要操作系统来维护哪些空间是可用的,哪些是已经被使用了的。
2、当进程运行结束时,操作系统要负责回收它的内存,供其他进程使用。当进程结束时,操作系统会把这些内存放入空闲列表。
3、每个cpu只有一个界限寄存器和基址寄存器,但对于每个运行的程序,他们要存入的值都是不同的。所以在发生上下文切换时,操作系统需要保存当前正在运行进程的界限寄存器和基址寄存器的值,以便后续恢复该进程时使用。
4、操作系统需要提供异常处理。比如当一个程序要越界访问时,cpu会触发异常,而操作系统需要终止该程序。
参考
《操作系统导论》