进程的加载过程

来源:互联网 发布:免费货代软件 编辑:程序博客网 时间:2024/06/01 09:27

假如有一个可执行程序,它有自己的大小。将可执行程序加载到内存空间有各种方法,以下是我们便于理解的一种方法。

这里写图片描述

如上图,如果想再加载一个程序进去,理论上空间够用,但实际上放不进去,因此这种管理方案浪费的内存较大,会产生外部碎片

因此我们可以使用页表来对内存进行管理,下图是使用页表的方法。

页表:操作系统会为每一个进程维护一个页表,页表主要记录其加载时每个块对应的页号。
分页的特点:不要求所有的块连续,可以避免外部碎片,但是会产生内部碎片。

这里写图片描述

由上图,分页将物理内存上的空间划分为很小的区块,这个区块成为页。内存上的程序使用完后释放,再循环使用,可以提高空间使用率。

假如上图的内存有20个区块,可执行程序有5个区块,则内存可以加载20/5=4个程序,此时内存就已经使用完了。当内存空间不够用的时候,就使用虚拟内存。

虚拟内存
概念:虚拟内存是在磁盘空间开辟空间作为内存的一个补充。
进程可以一部分驻留在内存上,而其他部分存储在虚拟内存上。

虚拟内存的优点
1、操作系统同时执行的进程数量会大幅提升。
2、操作系统可以执行比内存空间大的多的进程。

接下来详细描述一下进程的加载过程:

当一个程序加载到内存时,刚开始只加载0号块,剩下的块暂时不会访问到,不用加载到内存,放在虚拟内存上就可以。因此上图内存可以同时加载20块,即20个程序。假如系统有3G的内存,第一个进程只占4k,其他剩余的3G-4k的内存可以加载其他程序。
但是当去内存访问0号块完毕时,如果要访问1号块,但此时1号块不在内存上而在虚拟内存上,此时就会发生页中断(页错误)。此时CPU无法执行,中断处理程序会扫描虚拟内存,然后找到1号块所在的虚拟内存的空间,将其加载到内存,CPU再次扫描,程序正常执行。

使用虚拟内存这种管理方式的缺点是浪费时间,中断处理程序执行时,CPU需要等待,会浪费时间。

接下来讲一个名词,叫做系统抖动
系统抖动概念:在请求分页存储管理中,从内存刚刚换出某一页面后,根据请求又马上换入该页,这种反复换入换出的现象,叫系统抖动,或系统颠簸。

系统抖动是因为页错误太多,频繁出现页中断,浪费CPU大部分时间。

为了降低系统抖动,降低页错误次数,就要使用页面置换算法(FIFO),原则是先进先出,但这种算法只是在按顺序访问地址空间时是理想的。因此我们可以使用另一种算法,即最近最久未使用算法(LRU),它是置换最近过去一段时间最久未使用的页面。

原创粉丝点击