可重定位式分区
又称浮动分区分配,是解决碎片问题的简单而有效的办法
基本思想:移动所有被分配的分区,使之成为一个连续区域,而留下一个较大的空白区。
动态重定位分区分配算法框图
四、页式存储管理
提出原因
分区存储管理方案:要求作业存储时必须连续存放
页式存储管理方案:解决作业不连续存放的问题
页面变换表
是一种特殊的数据结构
用途:记录每一个作业的虚页号到物理内存中页号之间的映射关系。每一个作业都拥有一个自己的页面变换表。
结构:
需要两次访问内存,第一次访问页表,第二次取数据。
快表
由一组联想寄存器组成。
联想寄存器:一种按内容进行并行查找的快速寄存器,访问速度比主存快得多。
原理:
空闲内存页是用位示图来管理的
0表示空闲,1表示已经分配了
内存256M,每页4K,位示图有多大?
256M/4K=64K,64K个物理块
每个物理块一个比特,表的大小是64K个比特。
化为字节,64K/8bit=8K
所以位示图的大小是8KB,
页式存储管理的优点:
没有外碎片,每个内碎片不超过页大小
程序不必连续存放
主要缺点
程序要一次全部装入内存才能执行
采用动态地址变换机构会增加计算机的成本和降低处理机的速度。
各种数据结构(页表,空闲页表)要占用一定的内存空间,而且系统要花费一定的时间来建立和管理这些表格。
依然存在内碎片。
两级页表机制
每个进程的页表都连续放在内存中,这是不现实的,因为内存不够。
为了减少页表所占用的连续的内存空间,采用了两级页表机制,基本方法是将页表进行分页,为此再建立一张页表,称为外层页表(页表目录),即第一级页表,其中的每个表目是存放某个页表的物理地址。第二级才是页表,其中的每个表目所存放的才是页的物理块号。
五、分段存储管理
1)分段存储管理方式的引入
1、便于编程
通常用户常常把自己的作业按照逻辑关系划分成若干个段,每个段都有自己的名字,且都从零开始编址,这样,用户程序在执行中可用段名和段内地址进行访问。
2、分段共享
在实现程序和数据的共享时,常常以信息的逻辑单位为基础,而分页系统中的每一页只是存放信息的物理单位,其本身并没有完整的意义,因而不便于实现信息的共享,而段却是信息的逻辑单位,有利于信息的共享。
3、分段保护
信息保护是相对完整意义的逻辑单位(段)进行保护
4、动态连接
通常一个源程序经过编译后所形成的若干个目标程序,还需再经过链接,形成可执行代码后才能运行,这种在装入时进行的链接称为静态链接。动态链接是指在作业运行之前,并不把几个目标程序段都链接起来,而是先将主程序对应的目标程序装入内存并启动运行,当运行过程中又需要调用某段时,再将该段(目标程序)调入内存并链接起来。所以,动态链接是以段为基础的。
5、动态增长
在实际系统中,往往有些数据段会不断地增长,而事先却无法知道数据段会增长到多大,分段存储管理方式可以较好地解决这个问题。
1、 分段
在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段是一组完整的逻辑信息,如有主程序段、子程序段、数据段及堆栈段等,每个段都有自己的名字,都是从零开始编址的一段连续的地址空间,各段长度是不等的。分段系统的地址结构如下图所示,逻辑地址由短号(名)和段内地址两部分组成。在该地址结构中,允许一个作业最多有64K个段,每个段的最大长度为64KB。
2、段表
在分段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以离散地分配到内存中不同的分区中。在系统中为每个进程建立一张段映射表,简称为段表。每个段在表中占有一表项,在其中记录了该段在内存中的起始地址(又称基址)和段的长度,如下图所示。进程在执行中,通过查段表来找到每个段所对应的内存区。可见,段表实现了从逻辑段到物理内存区的映射。
优点:
-
没有内碎片,外碎片可以通过内存紧缩来消除
-
便于实现共享,即允许若干个进程共享一个或者多个段。
分页式管理和分段式管理的比较
内容 | 页式存储管理 | 段式存储管理 |
---|---|---|
划分依据 | 系统管理需要 | 用户应用需要 |
页/段大小 | 各页面大小相同 | 段的大小不固定 |
逻辑地址 | 只有一个逻辑地址空间 | 每个段一个独立的逻辑地址空间 |
页表/段表 | 页面较多,页表较长,查找费时 | 段表少,段表较短,查找速度快 |
碎片 | 存在内碎片 | 存在外碎片 |
内存共享 | 不支持 | 支持 |
存储扩充 | 不支持 | 不支持 |
思想