虚拟内存
在一个系统中,进程与其他进程是共享cpu和内存的。如果一个进程不小心写了另一个进程所使用的内存,那么可能会引起令人迷惑的错误。为了更加有效的管理内存并减少出错,现代系统提出了虚拟内存的概念。虚拟内存是硬件异常、硬件地址翻译、主存、磁盘和内核的完美交互,为每个进程提供了一个等同的私有的地址空间。
那么是怎么通过虚拟内存来进行内存管理的呢?总的来说就是一个地址的转换工作:将虚拟地址转换为物理地址。概念上而言,虚拟内存是被组织在磁盘上的N个连续的字节单元。为了更好的进行内存管理,将内存看成磁盘的一个缓存,将虚拟内存分割成块,每块大小相同,并且物理内存也进行相应的分割,每个小块成为一页,即虚拟页、物理页。同时提出了页表的概念来方便管理。页表存放在物理内存中,每个进程有单独的页表。如图索示,每个进程的页表位置可以有页表基址寄存器(PTBR)得到,由虚拟地址的虚拟页号可以得到相应页表条目(PTE),从而可以得到对应的物理页号,物理页号加上虚拟页偏移量就是所求的物理地址。当然,有可能引起缺页,此时会引发一个缺页异常。值得说明的是,页面命中完全是由硬件来处理的,缺页异常则要求硬件和内核协作完成。