操作系统之存储器管理

时间:2022-10-05 14:25:30

1.多层结构的存储器设备
(1)对于通用计算机而言,存储层次至少具有三层:最高层为CPU寄存器,中间为主存,最底层为辅存。在较高档的计算机中,还可以根据具体的功能分为寄存器、高速缓存、主存储器、磁盘缓存,固定磁盘和可移动存储介质。
(2)在计算机系统的存储层次中,寄存器和主存储器又被称为可执行存储器。进程可以在很少的时钟周期内使用一条load或store指令对可执行存储器进行访问,但对辅存的访问则需要通过I/O设备实现。

2.主存储器和寄存器
(1)主存储器:简称内存或主存,是计算机系统中的主要部件,用于保存进程运行时的程序和数据,也可称为可执行存储器。CPU与外围设备交换的信息一般也依托于主存储器的地址空间。由于主存储器访问速度远低于CPU执行命令的速度,为了缓和这一矛盾,在计算机系统中引入寄存器和高速缓存。
(2)寄存器:具有与处理机相同的速度,故对寄存器的访问速度最快,完全能与CPU协调工作,但价格十分昂贵,因此容量不可能做得很大。

3.高速缓存和磁盘缓存
(1)高速缓存:是现代计算机结构中的一个重要部件,它是介于寄存器和存储器之间的存储器,只要用于备份主存中较为常用的数据,以减少处理机对主存储器的访问次数,这样可大幅度地提高程序的执行速度。通常,进程的程序和数据主要存放在主存储器中,每当要访问的时候,才被临时复制到一个速度较快的高速缓存中。这样,当CPU访问一组特定信息时,需要先检查它是否在高速缓存中,如果存在,就直接从中读取,如果不存在,就需要从主存中读取。
(2)磁盘缓存:目前磁盘的I/O速度远低于对主存的访问速度,为了缓和两者之间在速度上的不匹配,而设置了磁盘缓存,主要用于暂时存放频繁使用的一部分磁盘数据和信息,以减少访问磁盘的次数。磁盘缓存并不是一种实际存在的存储器,而是利用主存中的部分存储空间暂时存放从磁盘中读出(或写入)的信息。主存也可以看作是辅存的高速缓存。辅存中的数据必须复制到主存方能使用,数据也必须先存在主存,才能输出到缓存。

4.程序装入内存变成可执行程序的步骤:
(1)编译:由编译程序对用户程序进行编译,形成若干个目标模块。
(2)链接:由链接程序将编译后形成的目标模块以及它们需要的库函数链接在一起,形成一个完整的装入模块。
(3)装入:装入程序将装入模块装入内存。

5.程序的装入
有三种装入方式:
(1)绝对装入方式:当计算机系统很小,且仅能运行单道程序时,完全有可能知道程序将驻留在内存的什么位置,此时可以采用绝对装入方式。用户程序经编译后,将产生绝对地址(即物理地址)的目标代码。绝对装入程序便可按照装入模块中的地址,将程序和数据装入内存。装入模块被装入内存后,由于程序中的相对地址(即逻辑地址)与实际内存地址完全相同,故不需要对数据和程序的地址进行修改。
(2)可重定位装入方式:在多道程序环境下,编译程序不可能知道编译后得到的目标模块应放在内存中的何处。可重定位装入方式,可以根据内存的具体情况将装入模块装入内存的适当位置。在采用可重定位装入程序将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存后的物理地址不同。在把装入时对目标程序中指令和数据地址的修改过程称为重定位。又因为地址变换通常是在进程装入时一次完成的,以后不再改变,故称为静态重定位。
(3)动态运行时装入方式:把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正执行时才进行。因此,装入内存后的所有地址都是逻辑地址。

6.程序的链接
(1)静态链接方式:在程序运行之前,先把各目标模块及它们需要的库函数链接成一个完整的装配模块,以后不再拆开。把这种事先进行链接以后不再拆开的链接方式称为静态链接方式。在将目标模块装配成一个装入模块时,需要解决两个问题:对相对地址进行修改和变换外部调用符号。
(2)装入时动态链接:指用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的链接方式。即在装入一个目标模块时,若发生一个外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并把它装入内存。优点:便于修改和更新,便于实现对目标模块的共享。
(3)运行时动态链接:将对某些模块的链接推迟到程序执行时才进行。也就是,在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块,并将之装入内存,将其链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,这样不仅能加快程序的装入过程,而且可节省大量的内存空间。

7.连续分配存储管理方式
连续分配方式可以分为四种:单一连续分配、固定分区分配、动态分区分配以及动态可重定位分区分配。
(1)单一连续分配:在单道程序环境下,当时的存储器管理方式是把内存分为系统区和用户区两部分,系统区仅提供给OS使用,它通常是放在内存的低址部分。而在用户区内存中,仅装有一道用户程序,即整个内存的用户空间由该程序独占。这样的存储器分配方式被称为单一连续分配方式。
(2)固定分区分配:
I:划分分区的方法
有两种方法将内存的用户空间划分为固定大小的空间:
a.分区大小相等(指所有的内存分区大小相等)。其缺点是缺乏灵活性,即当程序太小时,会造成内存浪费,当程序太大时,一个分区又不足以装入该程序,致使该程序无法运行。
b.分区大小不等:对常在该系统中运行的作业大小进行调查,根据用户的需要划分。
II:内存分配
当有一用户程序要装入时,由内存分配程序根据用户程序的大小检索分区使用表,从中找出一个能满足要求的、尚未分配的分区,将之分配给该程序,然后将该表项中的状态设置为”已分配”。若未找到大小足够的分区,则拒绝为该用户程序分配内存。
(3)动态分区分配:又称为可变分区分配,根据进程的实际需要,动态为之分配内存空间。
I:动态分区分配中的数据结构:空闲分区链表和空闲分区链
II:分区分配操作:分配内存和回收内存。
(4)动态可重定位分区分配:
a.连续分配方式的一个重要特点是,一个系统或用户程序必须被装入一片连续的内存空间。
b.不能被利用的小分区称为碎片或零头。
c.通过移动内存中作业的位置,将原来多个分散的小分区拼接成一个大分区的方法,称为”拼接”或”紧凑”。
d.重定位寄存器:存放程序(数据)在内存中的起始地址。程序在执行时,真正访问的内存地址是相对地址与重定位寄存器中的地址相加形成的。
e.地址变化过程是在程序执行期间,随着对每条指令或数据的访问自动进行的,故称为动态重定位。当系统对内存进行“紧凑”,而使若干程序从内存的某处移至另一处时,不需对程序做任何修改,只要用该程序在内存的新起始地址去置换原来的起始地址。

8.基于顺序搜索的动态分区分配算法
(1)首次适应算法(First fit,FF)
(2)循环首次适应算法(next fit,NF)
(3)最佳适应算法(best fit,BF)
(4)最坏适应算法(worst fit,WF)

9.基于索引搜索的动态分区分配算法
(1)快速适应算法(quick fit)
(2)伙伴系统
(3)哈希算法

10.多道程序环境下的对换技术
a.对换:是指把内存中暂时不能运行的进程或者暂时不用的程序和数据换出到外存上,以便腾出足够的空间,再把具备运行条件的进程或进程需要的程序和数据交换换入内存。对换是改善内存利用率的有效措施,可以直接提高处理机的利用率和系统吞吐量。
b.对换的类型:分为两类:
(1)整体对换:处理机中级调度实际上就是存储器的对换功能,其目的是用来解决内存紧张问题,并可进一步提高内存的利用率和系统的吞吐量。由于在中级调度中对换是以整个进程为单位的,故称之为“进程对换”或“整体对换”。
(2)页面(分段)对换:如果对换是以进程的一个“页面”或“分段”为单位进行的,则分别称之为“页面对换”或“分段对换”,又称为“部分对换”。这种对换方法是实现后面要讲到的请求分页和请求分段式存储管理的基础,其目的是为了支持虚拟存储系统。

11.对换空间的管理
a.对换空间管理的主要目标:在具有对换功能的OS中,通常把磁盘空间分为文件区和对换区两部分。
(1)对换空间管理的主要目标:文件区占用磁盘空间的大部分,用于存放各类文件。故对文件区管理的主要目标是提高文件存储空间的利用率,然后才是提高文件的访问速度。对文件区空间的管理采用离散分配方式。
(2)对对换空间管理的主要目标:对换空间只占用磁盘空间的小部分,用于存放从内存换出的进程。对对换区空间的管理采用连续分配方式,较少考虑外存中的碎片问题。
b.对换区空闲盘块管理中的数据结构:
在空闲分区表的每个表目中,应包含两项:对换区的首址及其大小,分别用盘块号和盘块数表示。
c.对换空间的分配与回收:
由于对换分区的分配采用的是连续分配方式,因而对换空间的分配与回收与动态分区方式时的内存分配与回收方式雷同。

12.进程的换出与换入
(1)进程换出:对换进程在实现进程换出时,是将内存中的某些进程调至对换区,以便腾出内存空间。
a.选择被换出的进程。b进程换出过程。
(2)进程换入

13.离散分配:允许将一个进程直接分散地装入到许多不相邻接的分区中,便可充分地利用内存空间,而无须再进行紧凑。
(1)分页存储管理方式
(2)分段式存储管理方式
(3)段页式存储管理方式

14.地址变换机构
能将用户地址空间中的逻辑地址转换为内存空间中的物理地址,在系统中必须设置地址变换机构。地址变换机构的任务实际上只是将逻辑地址中的页号转换为内存中的物理块号。又因为页面映射表的作用就是用于实现从页号到物理块号的变换,因此,地址变换任务是借助页表来完成的。