计算机操作系统之存储器管理

将用户的一个源程序变成一个可在内存中执行的程序,通常要经过以下几个步骤:

1、编译:由编译程序,将程序编译成若干个目标模块

2、链接:由链接程序将编译后形成的一组目标模块,以及他们所需要的库函数链接在一起,形成一个完整的装入模块。

3、装入:由装入程序将装入模块装入内存

具体讨论一下如何把一个装入模块,装入内存:

1、绝对装入方式:编译程序产生带有绝对地址的目标代码,只适合于单道程序环境。

2、可重定位装入方式:所得到的模块都是以0开始的,程序中的其它地址也都是相对于起始地址计算的,此时可重定位装入方式,根据内存的情况,将装入模块装入到内存的适当位置。通常把在装入时对目标程序中指令和数据的修改过程称为重定位。又因为地址变换通常是在装入时一次完成的,以后不再改变,故称为静态重定位

3、动态运行时装入方式:上一种方式,可将装入模块装入到内存中任何位置,故可用于多道程序环境,但并不允许程序运行时在内存中移动位置。而动态运行时装入方式,是在把装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址都仍是相对地址。为了不影响转换带来的不良影响,一般使用一个重定位寄存器

程序的链接

源程序经过编译后,可得到一组目标模块,再利用链接程序将这组目标模块链接,形成装入模块。根据链接的时间的不同,可把链接分成如下三种:

1、静态链接:在程序运行之前,先将各目标模块和它们的所用的链接库,链接成一个完整的装配模块,以后不再拆开。

2、装入时动态链接:在把一系列的目标模块装入内存时,采用边装入边链接的链接方式。

3、运行时动态链接:这是指对某些目标模块的链接,是在程序执行中要该模块时,才对它进行链接。

对换:为什么要用到对换?

在多道程序环境下,在内存中的某些进程由于某事件尚未发生,而被阻塞了,但它却占用了大量的内存空间,另一方面,其他的作业却在外存上等待。这样就形成了浪费。因此引用了“对换”这个概念。

对换是把内存中能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存,再把已经具备运行条件的进程或进程所需要的程序和数据,调入内存。

如果对换的单位是整个进程,则称为整体对换,如果对换的单位是段或页,则称为部分对换。

对换空间的管理

在具有对换功能的OS中,通常把外存分为文件区和对换区。前者用于存放文件,后者用于存放从内存换出的进程。

由于对换分区的分配是连续分配方式,因而对换空间的分配与回收,与动态分区方式时的内存分配与回收方法雷同。一般用首次适应算法,循环首次适应算法或***适应算法。

进程的换入与换出:

1、如果某一个进程被阻塞了或是优先级最低的,一般会把它的程序与数据换出到对换区

2、系统应定时地查看所有的进程的状态,从中找出“就绪”状态但已经换出的进程,将其中换出时间最久的进程作为换入进程,将之换入。

基本的分页存储管理方式

连续分配方式会形成许多的碎片,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大的开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无须再进行“紧凑”。基于这一思想,产生了离散的分配方式。如果离散分配的基本单位是,则称为分页存储管理方式;如果是,则称为分段存储管理方式

在分页存储管理中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能。它要求把每个作业全部装入内存后才能运行。

页面与物理块

分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面。也把内存空间分成和页面大小相等的存储块,称为物理块或页框。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称为“页内碎片”

页面的大小

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggjyf.html