存储器
主存管理的主要功能:
1、主存的分配和回收
2、地址转换和重定位
3、存储保护和主存共享
4、存储器扩充
覆盖:由应用程序覆盖,在内存中将新的程序代码覆盖旧的程序代码
实现:使用函数库(操作系统不知覆盖),或操作系统支持
交换:由OS控制,将暂时不用执行的程序放入外存中。虚拟存储的请求调入和预调入,
内存的物理组织
1、物理地址:把内存分成若干个大小相等的存储单元,每个单元一个编号,这个编号称为内存地址(或物理地址、绝对地址、实地址),存储单元占8位,称作字节(bate)
2、物理地址空间:物理地址的集合称为物理地址空间(主存地址空间),它是一个一维线性空间。
3、程序地址:用户编程序时所使用的地址(或称逻辑地址、虚地址),基本单位可以与内存基本单位相同,也可以不同.
4、程序地址空间:程序地址的集合称之为逻辑地址空间,它编址从0开始,是一个一维的线性空间,也可以是多维空间
程序的装入:
绝对装入方式:在编译时,能将目标模块装入到内存中事先指定的位置,那么,编译程序将产生绝对地址的目标代码,
当然绝对地址也可以由程序员赋予。(适用于单批道程序环境)
可重定位装入方式:根据当前内存的情况,将程序装入到内存适合的位置,地址变换在装入是完成。装入完成后不再改变。
属于静态重定位。要求程序的地址空间是连续的。(适用于多道程序环境)
动态运行时装入方式:动态重定位,程序运行过程中程序的位置可能改变。在程序装入内存后不立即将相对地址转变为绝对地址
而是把这种地址转换推迟到程序运行时才进行。
静态连接方式:将几个目标模块装人内存时,需解决两个问题,一是相对地址进行修改,二是变换外部地址调用符号。
装入时动态链接:是在目标模块装入内存时,边装入边链接。即在装入一个目标模块时,若发现一个外部模块调用,
即引起装入程序去找出相应的外部模块,并将它装入内存以及修改目标模块中的相对地址
运行时动态链接:将某系模块的链接推迟到执行时才执行。即在执行过程中,若发现一个被调用模块尚未装入内存时,
由OS去找到该模块,将它装入内存,并把它链接到调用者模块上。
内存连续分配管理方式:
1、固定分区概念
把主存分为若干个大小固定的存储区,每个分区给一个作业使用,直到作业完成后才将该区归还系统。
固定是指在各分区的位置和大小固定,通常在系统启动时就确定了
分区分类:
分区可分为用户分区和系统分区,用户分区存放用户程序,系统分区存放系统程序和管理信息。
分区的两种划分方式:
分区大小相等、分区大小不等
存储分块表MBT:一般存放在系统分区内占用一个连续的内存空间。通常由存储分配和释放两个模块对他进行操作
当分区大小不等时系统需要对每个分区的信息进行记录,以便管理。
记录内容包括:大小、位置、状态。
2、可变分区多道管理技术:
定义:指事先未将主存划分为一块块分区,而是在作业进入主存时,按作业大小动态建立分区。
存储分块表MBT:结构与固定分区的MBT一样,但由于是可变分区,所以便有了表长难确定、查找速度慢的缺点
查找速度慢:空闲分区在表中没有安排记录,要分配内存给新作业,就慢了些。
表长难确定:分区个数在变化,所以无法确定
为了提高查找空闲分区速度主存分区用两张表来管理:已分分区表UBT、空闲分区表FBT
UBT:存放已经分配使用的分区信息
FBT:存放空闲、尚未分配的分区信息
由于以上两种表仍没有解决表长难确定的问题,引入空闲存储块链FBC
空闲存储块链FBC:采用链指针的方式将空闲分区块链连接在一起。
存储分配算法:
最佳适应法:即选择空间浪费最少的存储块,一般要求空闲块从小到大顺序排列
最先适应法:即选择最先找到的满足空间的存储块,一般要求分区按照地址递增的顺序排列
最坏适应法:选择满足条件的最大的空间块使用,一般要求存储块大小递增顺序排列
存储器的紧缩和程序的浮动:
紧缩和浮动:通过移动程序将碎片集中起来形成一个大的空闲分区。
程序在内存中移动后地址改变,若要正常运行需要将地址改为新的地址,即重定位,有两种静态(不适用)、动态
动态重定位:在程序执行过程中,每次访问指令或数据时,都将逻辑地址转变物理地址一次。
3、多重分区管理:
1、单对界管理技术:存储保护使用一对界地址寄存器,对存储器使用紧缩技术时,需要硬件支持。
2、多重分区管理技术:在系统中设置多个界地址寄存器,可以为每个作业分配多个空闲分区。
界地址寄存器:在CPU中设置一对下限寄存器和上限寄存器,存放用户作业在主存中的下限和上限地址
页式存储管理:不存在页外碎片,有少量页内碎片,主存利用率高
特点:等分主存:把主存划分为相同大小的存储块,称之为页架
用户逻辑地址空间分页:将用户的逻辑地址空间划分为若干个与页架相等的部分,每个部分称之为页
同样,按逻辑地址顺序从0开始对页进行编号,记为页号。
逻辑地址表示:在分页系统中,每个逻辑地址用一个数对表示:(p,d)p代表页号,d表示页内偏移地址。
主存分配原则:
以页架为单位进行分配;分配的页架可以连续,也可以不连续;可以将作业的任意一页放入主存的任意一页架中,
在静态页式存储管理中所有的页一次性装入主存,若主存空间不够,则作业等待。
在动态页式存储管理中不把作业一次性地全部装入内存,而只装入被认为是经常反复执行和调用的部分。其它部分则在执行过程中动态装入。
页表PMT:用于存放进程页和页架的映射关系,有两部分页号、块号(页架号)
页面大小的确定:页面大小由机器的地址结构所决定,大小取2的幂
页面较小:可以使页内碎片小,有利于提高主存利用率,但页面会增多,导致页表过长,占用主存。
页面较大:可以减少页表程度,但会使页内碎片较大,
地址转换过程:将逻辑地址转换为物理地址的过程。
段式存储管理:
段是一组逻辑信息的集合。引入段的目的是为了满足用户的方便编程和方便数据、程序共享和保护
方便编程:通常,一个程序是由若干个自然段组成,因而用户希望能够把程序按逻辑关系分成若干个段,每个段有段名和长度。
用户程序在执行时可按段名和段内地址进行访问。
共享和保护:在实现程序和数据共享和保护时,都是以信息逻辑单位为基础的。而在分页系统中,每页是存放信息的物理单位,
本身没有完整的意义,因而不便于实现信息共享和保护,而段是信息的逻辑单元。
逻辑地址空间的划分和表示:每个进程的地址空间被划分为若干段,每段有段名;每段都从0开始编址,
段的长度由相应的逻辑信息组的长度决定。段间可以不连续编址。
采用二维地址空间来表示:V=(S,W);其中S是段号,W是段内地址
主存分配:以段为单位进行主存分配;段内连续存放;每段分配一个连续的主存物理空间;段间可以不连续;
段与段之间在主存中地址可以是离散的。
段表:用于记录和管理进程分段信息的数据表称为段表。包含段号、段长、段的起始地址(物理地址)
每个进程的段表存放在主存的一个连续的地址空间中。
为实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了————段表寄存器,用于存放段表始址和段表长度
特点:没有内部碎片,存在外部碎片,段的长度受内存空闲区的限制。
页式与段式的相同点:都采用离散分配方式,通过地址映射实现地址转换。