存储器(内存)管理之分区式分配_分区式分配可分为哪两种分区?可变分区的主存分配算法有首次适应算法、还有另外哪-程序员宅基地

技术标签: 操作系统  内存  管理  存储  

一.单一连续区分配

1.这是早期的面向单用户,单任务OS的存储分配策略,如DOS,其把整个物理空间分为两个部分:

*1.系统区:存放OS的驻留部分和其所需的内部数据结构,(如中断向量表)一般置于内存的低址部分;
*2.用户区:系统区以外的所有内存都可供用户使用。

2.早期的单用户,单任务OS有些配置了存储器保护机制,但常见的如CP/M,DOS都无保护机制,因为用户独占内存,不存在其他用户干扰问题,出问题是自己的责任,而OS被破坏则可重新启动来恢复。

3.分区式分配是早期的多用户OS的存储分配技术,包括:固定式分配可变分区分配可重定位分区分配多重分区分配四种。

二.固定式分配

1.把内存划分为若干个固定大小的区域,每区的边界固定不变。有两种形式:

*1.分区大小相同:对不同大小程序适应性差;
*2.分区大小不同。

2.为实现分区,要建立一张分区说明表。包括分区号,大小,起址,状态。
3.由于分区是固定不变的,因此不能保证程序所需的内存恰好等于某一分区而必然有一部分的内存浪费——“内零头”。典型的OS是IBM/360机的MFT系统。
4.固定式分区不灵活,但是简单,因此在一台主机控制多台同种设备的控制领域仍然有一定的使用。

三.可变式分区

1.指根据作用的实际需要,动态为之分配所需的内存空间,即分区边界可移动。

有两种:*1.分区数固定,分区大小可变。*2.分区数和分区大小都可变。
显然,方案一的分区说明表可用数组表示,简单;方案二灵活,但是分区数不定,需要链表组织分区说明表,下面以方案二为例说明数据结构,算法和操作。

2.数据结构
两个链表:已分配分区表和未分配分区表:每记录包括起址,大小,状态和指针四项;
其链接的顺序与算法有关,可按大小有序/按始址有序/任意。

struct area{
    int number;
    long StartAddr size;
    int status;
    struct area *next;
    }AREA;
AREA *AllocTable,*FreeTable;

设立两个表:已分配分区表AllocTable和空闲分区表FreeTable。

3.算法
设S是空闲分区的大小,R是要求分配的分区大小。

*1.最佳适应算法
A>从空闲分区链表(最好能按分区大小有序)选择((S>=R)&&(S-R最小))的分区。分配R内存给作业,剩余的S-R仍留在空闲链中以供下次分配;若无满足条件的空闲分区,则不分配。
B>显然经多次S-R划分后,空闲链表中的分区会越来越小而无法再用,形成分区碎片叫“外零头”。
解决方法有:

  • 拼接边界邻接的碎片;
  • 修正条件,设置一个阈值G,若S-R小于G,则分配整个分区S给作业而不在切分以减少碎片。

*2.最坏适应算法
与最佳适应算法相反,是选择((S>=R)&&(S-R最大))的分区划分。显然其划分后的剩余部分被再次切分的可能性更大,这是其优点,但缺点是大作业招不到能满足的分区。

*3.首次适应算法
A.这是对最佳和最坏适应算法的折中,空闲分区链接按起始地址有序,每次分配时,从链表查找,第一个满足的分区则分配之,且用碎片替换原位置。
B.本法的最大优点是简单,速度快。(如碎片不插入而是替换)而且链尾(即内存高端)有大的空闲分区。
C.缺点是经多次使用,碎片集中在链首,平均查找次数增大。

*4.下次适应算法(循环适应算法)
为解决平均查找次数增大的缺点,下次查找从上次成功的下一结点始,空闲链为循环型,这样内存的利用率更为均衡,但大空闲区随之减少。

总之:每种算法都有其优缺点。

4.操作
1.分配:查找匹配分区,按算法分配内存,若有剩余则加到空闲链。
2.回收:运行完后,回收内存,加到空闲链。

  • a.查找插入位置,插入本空闲块;
  • b.若同某一空闲区与前邻接,则拼接。(修改大小,删除结点)

四.可重定位分区分配

1.固定式分区形成“内零头”,可变式分区形成“外临头”。零头只要拼接起来就可再用,
条件是:前一分区始址+前一分区大小==后一分区的始址
2.为满足这个条件,只要把已分配分区按始址序向前移动即可,这种移动技术称为存储器紧凑
3.紧凑完成两个任务:*1).把作业区内的数据搬家;*2)设置重定位寄存器的值。
4.紧凑技术的好处是以增加相同延迟和其他开销为代价的,只能隔一定时间做一次;或当内存紧张,碎片太多时才做。
5.所以可重定位分区,是指可借助紧凑技术对可变分区进行重新定位的分区分配方法

五.多重分区分配

1.以上所述的作业所需内存都是指连续的区域,若一个作业所需的内存能按其所起的作用分成几段,则“零头”可能还有用。即一个作业的运行内存由几个分区组合,这种分配策略称为多重分区策略
2.显然这样分配后,作业的地址生成更复杂,要多个重定位寄存器,编译器也要能区分目前要使用哪个分区,哪个始址。
3.这种分配的另一种好处是可以多作业的数据共享,某一分区作公用。

六.分区的存储保护
防止一作业有意/无意破坏另一作业的运行,一般需硬件机制支持。
1.界限寄存器
设置上,下界寄存器,若分配ADDR1到ADDR2之间的存储空间给作业X,则把ADDR1和ADDR2放入上下界寄存器,作业X运行时的取地址值若在界限器内,则有效,否则发生中断。类似于xBASE语言中的GET x RANGE y1,y2。
2.基址+限长寄存器
基址寄存器起到重定位寄存器RR的作用,而限长寄存器限制取址的最大偏移量,相当于界限寄存器的ADDR1=[基址],ADDR2=[基址]+[限长】。
3.保护键方法
每个方法有一把锁,要使用这个分区必须要有相应的钥匙,否则拒绝访问。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jim_cainiaoxiaolang/article/details/60972029

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签