【操作系统】存储器管理 知识要点

存储器的结构已经在计算机系统组成中说过了。此处不表。包括哪几部分:寄存器、高速缓存、内存、外存缓存、外存、光盘软盘等。

一、程序的上机过程

程序在处理机上运行,前提是把程序放到处理机上,让处理机知道。这个处理包括:编译(产生目标模块Object Mudule),链接(Linker和库函数文件链接在一起,形成一个完整的装入模块),装入(Loader将装入模块通过装入程序放在内存上,此时处理机可以读取数据开始处理)。

1、程序的装入

程序的装入包括绝对装入方式(程序在编译过后会产生相对地址,然后装入程序会根据这个地址把程序放在对应的地址上,绝对装入方式的意思是编译产生的相对地址和实际物理地址一样样的),可重定位装入方式(多道程序环境下,编译时无法获知本程序会装入内存的哪个位置,所以只能产生相对地址,在装入时,把存放在寄存器中的地址偏移量和相对地址相加,得到真实物理地址),动态运行时的装入方式(即在程序运行的时候才去找真正的物理地址,而装入内存后,程序所指的地址依然是相对地址)。

2、程序的链接

程序的链接包括静态链接(对相对地址进行修改,变换外部符号),装入时动态链接(各个模块是分开存放的,所以地址要根据具体的装入位置进行修改),运行时动态链接(即运行时才确定下来物理地址)。

二、内存分配方法

1、连续分配

连续分配一段内存给程序的方法称为连续分配存储管理,有固定分区分配动态分区分配。动态分区分配就和数据结构中的内存管理一致了,主要采用可利用内存空间链表来管理。
采用连续分配的管理方式,在给一个程序分配一段内存的时候,可采用基于顺序搜索链表的方式,也可以采用基于索引搜索的分配方式。前者就不细述,后者主要包括快速适应算法(给定所有具有相同容量的空闲分区制作一个链表,这样就能快速找到最适合该程序的内存大小),伙伴系统(指把所有分区都按照2的幂来划分,也相当于是建立了索引),哈希算法(建立了一个完全索引,速度当然是非常快的)。

这种方法容易产生碎片,因此需要进行紧凑,在这种机制中,有一个重定位寄存器,它可以将内存碎片根据重定位寄存器中的数据求得即将存入的内存地址,实现程序搬家。

三、对换技术

对换的含义就是在多道批处理程序运行在处理机上,由于资源紧张,需要将部分占用资源但阻塞的进程的状态信息移到外存上,这个过程叫做对换,也即内存调度,中程调度

对换的主要目标就是将进程信息换入换出,提高效率。所以,对换空间都采用的是连续分配方式。在磁盘外存,也分为文件区对换区两个部分。

1、分页式存储管理

然而,将整个进程所占内存全部都换出的代价比较大,我们更希望将需要的部分换出即可,这样可以提高效率,因此提出了分页存储管理方式。分页系统将全部的内存分为了大小一致的物理块,每一块称为一页,这样就形成了页表数据结构。用户程序有一张页表,其中存放了该程序将指令和数据存放在哪些页上,而页表写明了这些页对应的物理块到底在哪些地方,通过这种方式实现了分页管理用户程序。

地址变换机构是一种为分页系统提供逻辑地址到物理地址映射的一种机制,这是用寄存器硬件来完成的。为了加快地址变换的速度,还提出了快表两级或者多级页表等策略,并不难理解,具体不表了。

2、分段存储管理方式

几乎所有的原理都与页表相同,主要区别就是分段是为了程序员的操作方便而设定的。段的大小也比页大许多。如果采用分页系统对程序和数据实现共享,则需要程序员操作的代码量比较大,而采用分段则只需要一次操作即可。因为段的形成是基于程序中某一个子功能而定义的。

3、段页式存储管理方式

将分段和分页相结合构成段页式存储管理方式,首先程序存储对应着段表,段表中的每个段都对应着一个页表,由页表映射到真实的物理地址。

四、虚拟存储器

虚拟内存主要是在外存上开辟一块空间,用来存放暂时不运行的内存上的代码,从逻辑上扩充内存。显然,虚拟存储器需要对内存和外存上的数据进行置换,因此需要分页或者分段系统的支持。为了满足分页或分段系统的支持,硬件上需要:页表机制、段表机制、地址变换机构、缺页中断机构、缺段中断机构。这些机构提供的主要功能就是:将整个系统放在分段、分页机制上运行,如果程序运行时出现了缺页,则需要请求中断处理,这属于内部中断陷入,这时,和外存想要请求的页或者段进行置换。

页面置换算法

最佳置换算法:该算法的思想是根据未来的最长时间内不再被访问的页面来置换,显然我们无法预知未来,因此该算法无法实现,但这是最优的一种选择方法。

先进先出页面置换算法:指把最先进入内存的那一张页面置换掉。

最久没使用算法和最少使用置换算法:很好理解。

Clock算法:这种算法是最近最久未使用的页面算法的一种近似算法。具体过程是将程序所有的页建立成一个链表,然后依次处理。

页面缓冲算法:指的是,既然当内存达到极限的时候很容易出现页面置换,导致抖动大量产生,效率低下,不如直接预先在内存中开辟一块空间作为页面置换的缓冲,以减少抖动,提高效率。

猜你喜欢

转载自blog.csdn.net/dongrixinyu/article/details/78897645