进程与虚拟内存空间

简介

进程与程序

程序是一个静态的概念,它就是一些预先编译好的指令和数据集合的一个文件,一般程序都存储在硬盘当中。进程则是正在运行的程序的实例,是一个动态的概念,它描述了程序在运行时的各种状态,往往被加载到内存之中。

从实现的角度来看,进程就是一种数据结构,目的在于清晰的刻画动态系统的内在规律,有效的管理和调度进入计算机系统主存储器运行的程序。

有人做过一个很有意思的比喻,说把程序和进程的概念跟做菜相比较的话,那么程序就是菜谱,计算机的CPU就是人,相关的厨具则是计算机的其他硬件,整个炒菜的过程就是一个进程。计算机按照程序的指示把输入数据加工成输出数据,就好像菜谱指导着人把原料做成菜肴。

虚拟地址

在早期的计算机中,程序是直接运行在物理内存上的,也就是说,程序在运行时所访问的地址都是物理地址,这种情况下只要程序所需要的内存空间不超过物理内存的大小就不会有问题。但是大多数情况下我们必须同时运行多个程序这样必定会造成内存空间的重叠现象,并且程序去直接操作物理内存也是十分危险的,那么我们如何将计算机有限的物理内存分配给多个程序使用呢?

我们在这里加入了一个中间层,即使用一种间接的地址访问方法。我们把程序给出的地址看作是一种虚拟地址,然后通过某些映射的方法,将这个虚拟地址转换成实际的物理地址。这就多个程序可以同时运行且各个程序之间能够访问的物理内存区域不重叠,也杜绝了程序直接操作地址的现象,同时也提高物理地址的使用效率。这种呈现出比实际拥有的地址空间大得多的内存我们叫做虚拟内存。

这里有一个形象的比喻:就像你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟地址管理需要完成的任务。

进程与虚拟地址

32位系统下每个进程都会分配4G的虚拟内存空间,而其实所有进程都共享着同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上。每次访问内存空间的某个地址,都需要把地址翻译为实际物理内存地址。
这时我们需要一个东西它就是MMU(内存管理单元),它的主要作用就是完成地址的映射,也就是页表的建立、映射过程。页表就是用来记录进程中哪些内存地址上的数据在物理内存上以及它们所在的位置的一个结构。每个进程都有一个页表,当进程需要访问某个虚拟地址时,就会去访问页表,页表实现从页号到物理块号的地址映射。

进程与虚拟内存空间_第1张图片

如图所示,存储在硬盘上的可执行程序被操作系统装载为进程,放入虚拟内存空间。当需要访问内存空间的某个地址时,再通过MMU实现虚拟内存对物理地址的映射,达到访问物理地址的目的。

你可能感兴趣的:(操作系统,进程相关)