简单分页/分段

简单分页

前述固定分区和可变分区存储技术存在着一定的缺点;
分页技术思想的由来;
分页存储管理技术中的基本作法;
 等分主存;(页架、页框、帧)
 用户逻辑地址空间的分页;(页)
 逻辑地址的表示。(数对(p, d))
主存分配原则;
 分页情况下,系统以页架为单位把主存分给进程,分给一个进程的各页架不一定是相邻和连续的;
 页表—指出每个进程的各页放在主存的哪些页架中;
 分页系统中的地址结构—分为两部分;
 页面尺寸应是2的幂—可以省去除法运算,拆分地址场中的数即可。
地址转换过程:
首先将逻辑地址左边表示页号部分的页号抽取出来;
以页号作为索引查找该进程页表,找出该页存放的主存页架号;
用此页架号(二进制形式)取代逻辑地址的左边部分,并与右边的页内地址合并成相应的物理地址去访问主存。
简单分页方法的优点:
它基本没有页内碎片,只是在每个进程的最后一页中,会有页内碎片;也不会有小到不可再用的页外碎片,主存的利用率高;
不管采用哪种数据结构(空闲页架表、位图、空闲页架链表等),分配和释放存储都很快;
管理简单(类似于固定分区的情况)。

简单分段

为什么需要按段分配主存?
 事先将用户逻辑地址空间连接成一维线性地址空间,既费时又不便于作业的执行,尤其不便于共享;
 因此,人们希望按照程序模块来划分段,并按这些段来分配主存;
 段,就是一组逻辑信息的集合,如子程序、数组和数据区等。
分段存储管理的基本概念
进程的逻辑地址空间(二维的,用段名和段内地址两个成分来描述)
程序的地址结构
主存分配
段表(每个进程一个段表,用来指出进程的某段放在主存中的何处,以及该段的长度等信息)
段的地址转换(把逻辑地址左边段号部分提取出来,作为索引,查找进程的段表,将段内地址与段的长度比较,如果大于段的长度,则引起非法访问中断,即越界访问,如果访问合法,就将段的起始地址与段内地址相加,就得到所要访问的物理地址。)
简单分段的优点是没有段内碎片,只有外部碎片;
简单分段也是基于多重分区技术的进一步发展而来的;
简单分段对用户是可见的,而且分段需要用户提供支持,用户也需要知道系统的最大段长度限制;
当进程被交换出主存时,它的页表或段表也需随进程一起撤出主存。

分段和分页的比较

分段是信息的逻辑单位,由源程序的逻辑结构所决定,用户可见,段长可根据用户需要来规定,段起始地址可以从任何主存地址开始;在分段方式中,源程序(段号,段内位移)经连结装配后仍保持二维结构。

分页是信息的物理单位,与源程序的逻辑结构无关,用户不可见,页长由系统确定,页面只能以页大小的整倍数地址开始。在分页方式中,源程序(页号,页内位移)经连结装配后变成了一维结构。

可变分区多道管理技术

固定分区存储管理

把主存分成若干个固定大小的存储区(又称存储块),每个存储区分给某一个作业使用,直到该作业完成后才把该存储区归还系统;
分单道作业和多道作业两种情况;
 单用户、单道作业情况
 多道作业情况
• 操作系统区、用户使用的分区;
• 主存中分区的区数是固定不变的,每区的大小也是固定不变的;
• 分给每个作业一块大于或等于作业大小的主存分区,不允许两个作业同时放于同一个分区中;
• 问题:分区中常有未用的、剩下的空闲部分,即存储碎片,降低了主存的利用率;
• 存储分块表:主存分区情况说明信息,存储区的使用状况信息,包括大小、位置和状态三项信息。
存储分块表
大小:指出该存储块的大小,以字节为单位;
位置:指出该存储块在主存中的起始地址;
状态:表明该存储块是否已被使用。
存储保护功能
一对“界地址寄存器”,如果处理器要访问主存某单元时,系统硬件自动将该单元地址与界限寄存器的内容进行比较,以判断此次访问是否合法。
优点:简单,要求的硬件支持只是一对界地址寄存器,软件算法简单;
缺点:主存利用率不高。

可变分区存储管理

所谓可变分区,是指主存事先并未划分成一块块分区,而是在作业进入主存时,按该作业的大小建立分区,分给作业使用;
特点:
分区个数是可变的,每个分区的大小也是不固定的;
主存中分布着个数和大小都是变化的空闲分区或碎片,这些空闲分区有些可能
相当大,而有些则相当小。

数据结构的组织方法

存储分块表
 这种存储分块表存在两个缺点:
• 由于分区个数是变化的,所以表长不好确定,造成表格管理上的困难,若给该表留的空间不足,又无法登记各分区的情况,若留的空间过大,造成浪费;
• 分配主存时,为查找一块合适的空闲分区所需扫描的表目增加了,查找速度变慢了。
分开设置两个存储管理表
 用已使用分区表(UBT)和空闲分区表(FBT)分别登记和管理系统中的已分分区和空闲分区;
减少存储分配和释放时查找表格的长度,提高查找速度。
空闲存储块链
使用链指针把所有的空闲分区链结在一起,构成一条空闲存储块链;
实现方法:把每个空闲存储块的起始若干个字节分成两部分,前一部分作为链指针,指向下一空闲存储块的起始地址,后一部分指出本空闲存储块的大小,用一固定单元作为空闲存储链的头指针用以指出该链中的第一块空闲存储块的起始地址,最后一块空闲存储块的链指针中放着链尾标志;
这种方法使得数据基的管理和维护比较简单。

存储分配算法

最佳适应法
从所有未分配的分区中挑选一个最接近作业尺寸且大于或等于作业大小的分区分给要求的作业;
尽量多保留大的分区,使被选中分区剩下尽可能小的未用碎片;
使系统中产生了许多小得无法再用的碎片。
最先适应法
按分区序号从存储分块表的第一个表目起查找该表,把最先找到的且大于或等于作业大小的未分配分区分给要求的作业;
尽可能地缩短了存储分配时间;
对空闲块的管理采取不同的办法:表格法、空闲存储块链法、位图法。
最坏适应法
从所有未分配的分区中挑选最大的且大于或等于作业大小的分区分给要求的作业;
可用于可变分区分配技术中。
保证分配后剩下的分区足够大,以便满足后续要求。

碎片问题和存储器的紧缩

由于各作业请求和释放主存块的结果,产生很多小的碎片,碎片的存在降低了多
道的程度,造成了主存空间的大量浪费;

解决碎片问题:
 把程序分成几部分装入不同的分区中去,改变一直把程序作为一个连续的整体在主存中存放的要求;
• 改善了碎片问题,但却增加了程度管理和执行的复杂性;
 把小碎片集中起来使之成为一个大分区;
• 移动各用户分区中的程序,使它们集中于主存的一端,使碎片集中于另一端,从而连成一个完整的大分区,即存储器的“紧缩”或“澄清”。

动态重定位

动态重定位:是指程序的重定位时机不是在程序执行前进行,而是在程序执行过程中才进行
地址转换,更确切地说是在每次访问主存单元前才进行地址转换;
重定位过程:
首先将用户按相对地址编址的目标程序原封不动地装入主存中分给该用户使用的分区中;
当该用户程序被调度到处理器上执行时,操作系统自动将该用户作业的起址由作业表中取出,并将分区起始地址减去用户目标程序的相对基地址,然后将其减得值装入定位寄存器中;
当处理器要访问主存时,地址转换硬件自动将程序中的相对地址与定位寄存器中的内容相加,并按相加的和作为主存绝对地址去访问数据。

采用动态重定位后,由于目标程序装入主存后不需要修改地址指针及所有与地址有关的项,因而程序可在主存中随意浮动而不影响其正确执行,从而可以方便地进行存储器紧缩,较好地解决了碎片问题。

多重分区/多对界地址管理

单对界地址管理技术:
每个用户只占据主存的一个分区,存储保护只需使用一对界地址寄存器;
弊病:
• 首先,解决碎片问题时,移动程序进行存储器紧缩时需要硬件支持;
• 其次,不便于在进程之间共享数据。

多对界地址管理技术:
系统中设置多对界地址寄存器,并且在为每个作业或进程分配主存时,可按界地址寄存器对的个数为其分配多个不相邻接的空闲分区;
该技术既可以改善碎片情况,又便于共享;
但是,在实存管理技术中,多重分区的多重程度不宜过多,否则会增加管理的复杂性

实存储器物理结构及管理功能

计算机系统存储器层次

实存储器物理结构及管理功能插图

主存储器管理功能

主存分配
 可以使多个程序同时驻留在主存中,以提高CPU利用率;
 保证系统的高性能,提高存储利用率和主存的分配和释放(回收)速度,以加快任务的执行。
地址转换和重定位
 程序不必事先约定存放地址,可在执行过程中移动;
 可以运行只装入了一部分的程序,缩短程序的启动时间;
 研究和使用各种有效的地址转换技术以及相应的地址转换机构。
存储保护和主存共享
 如何保护各存储区中信息不被破坏和偷窃;
 由于许多不同的任务可能要执行同一个程序,进程中多个合作进程要访问相同的数据结构,所以存储保护机制要提供进程对某些主存区共享的灵活性。
存储扩充
 使用有效的存储管理技术来实现逻辑上的扩充——即虚拟存储技术;
 运行的程序应不受主存大小的限制,理想情况下应能运行任意大小的程序。

地址映射

首先,在多用户共享主存时,需要由系统分配主存;
一般情况下,一个作业程序分配到的存储空间和它的地址空间是不一致的;
因此作业的相应进程在处理器上运行时,所要访问的指令和数据的实际地址和地址空间中的地址是不同的;
所以,处理器在执行指令时,必须把逻辑地址转换为绝对地址后,方能访问信息。

地址映射方式

编程或编译时确定地址映射关系
 如果虚——实地址间的对应关系是在程序编写或者程序编译时实现的,则结果为一个不能浮动的程序模块,它必须被放在主存某一确定的地址中,而且永不会改变,因为它所包含的全部地址都是主存地址,在这种情况下,把这样一个程序装入主存,就必须在申请主存时,具体地提出申请的主存容量和主存地址,因此主存分配程序在分配时将没有什么活动余地。
静态地址映射
动态地址映射