当前位置: 首页 > news >正文

计算机操作系统24

第二十四课:连续内存分配


一、什么是连续内存分配?

先理解名字。

连续:

表示:

一个程序:

必须:

占用一整块连续的内存空间。

例如:

程序A:

需要:

100MB。

那么:

分配:

---------------- 程序A 100MB ----------------

必须:

连续。

不能:

拆成:

50MB + 50MB。


早期操作系统:

主要采用:

连续分配。


二、最简单方式:单一连续分配

这是:

最早的方法。

思想:

非常简单:

内存只分给一个用户程序。

结构:

高地址 ------------- 用户程序 ------------- 操作系统 ------------- 低地址

例如:

电脑:

内存:

8GB。

系统:

占:

1GB。

剩下:

7GB:

全部:

给当前程序。


优点

简单。

容易实现。


缺点

最大问题:

浪费。

例如:

一个程序:

只需要:

1GB。

但是:

系统给它:

7GB。

剩下:

6GB:

没人用。


所以:

这种方式:

现在基本不用。


三、固定分区分配

为了:

提高利用率。

操作系统:

把内存:

提前:

划分:

几个固定区域。

例如:

内存:

100MB。

分成:

---------------- 系统 20MB ---------------- 分区1 20MB ---------------- 分区2 30MB ---------------- 分区3 30MB

每个程序:

进入:

一个分区。


例如:

程序A:

需要:

15MB。

进入:

20MB分区。


程序B:

需要:

25MB。

进入:

30MB分区。


四、固定分区的问题

最大问题:

内部碎片。


例子:

分区:

大小:

100MB。

程序:

需要:

70MB。

系统:

给:

100MB。

那么:

剩余:

30MB。

但是:

这个30MB:

别人:

不能使用。

为什么?

因为:

分区已经:

属于:

这个程序。


这就是:

内部碎片。


五、动态分区分配(重点)

固定分区:

太死板。

于是:

出现:

动态分区。

思想:

程序需要多少,就分多少。


例如:

内存:

---------------- 系统 ---------------- 空闲100MB ---------------- 程序A 50MB ---------------- 空闲200MB

来了:

程序B:

需要:

80MB。

系统:

找:

100MB空闲区。

分:

80MB。

变成:

---------------- 程序B 80MB ---------------- 剩余20MB

优点:

减少内部碎片。


但是:

产生:

新的问题。


六、外部碎片出现

假设:

内存:

如下:

程序A 空闲10MB 程序B 空闲20MB 程序C 空闲30MB

总空闲:

60MB。


现在:

来了:

程序D。

需要:

50MB。

能放吗?

不能。

为什么?

虽然:

总共有:

60MB。

但是:

没有:

连续50MB。


这就是:

外部碎片。


七、动态分区如何选择空间?

重点来了。

假设:

有多个空闲区域。

程序来了。

选择哪个?

操作系统:

有几种算法。


1. 首次适应算法(First Fit)★★★★★

英文:

First Fit。

思想:

从低地址开始找,第一个满足的空闲区。


例如:

空闲:

100MB 50MB 200MB

程序:

需要:

40MB。

从头找:

第一个:

100MB。

够。

于是:

放进去。


结果:

简单。

速度快。


缺点:

低地址:

容易:

产生很多小碎片。


口诀:

首次适应:第一个能放就放。


2. 最佳适应算法(Best Fit)★★★★★

思想:

找最小但够用的空闲区。


例如:

空闲:

100MB 50MB 200MB

程序:

需要:

40MB。

比较:

100:

剩60。

50:

剩10。

200:

剩160。

选择:

50MB。


优点:

减少大空间浪费。


缺点:

容易产生大量小碎片。

因为:

总是切小空间。


口诀:

最佳适应:留下最小剩余。

3. 最坏适应算法(Worst Fit)

思想:

总是选择最大的空闲区。


例如:

空闲:

100MB 50MB 200MB

程序:

需要:

40MB。

选择:

200MB。

剩:

160MB。


优点:

剩余空间较大。


缺点:

大空间容易被消耗。


口诀:

最坏适应:拿大块,留大块。


八、三个算法比较(★★★★★)

算法选择方式特点
首次适应第一个满足速度快
最佳适应最小满足碎片多
最坏适应最大空间浪费大空间

九、考试计算题怎么做?

典型题:

空闲区:

100KB 500KB 200KB 300KB 600KB

进程:

P1=212KB P2=417KB P3=112KB P4=426KB

问:

使用首次适应:

如何分配?


步骤:

第一步

P1:

212KB。

从头找:

100:

不够。

500:

够。

分配。


第二步

P2:

417KB。

继续:

找:

剩余空间。


注意:

考试:

一定:

按照顺序模拟。

不能:

凭感觉。


十、连续分配总结

我们学了:

① 单一连续分配

特点:

一个程序。

简单。

浪费大。


② 固定分区

特点:

提前划分。

产生:

内部碎片。


③ 动态分区

特点:

按需分配。

产生:

外部碎片。


④ 三种算法

首次适应 First Fit 最佳适应 Best Fit 最坏适应 Worst Fit

十一、本课重点(★★★★★)

必须掌握:

连续分配:

一个程序占连续内存。


内部碎片:

分给你的比需要的大。


外部碎片:

空闲总量够,但不连续。


三个算法:

口诀:

首次找第一个,最佳找最小,最坏拿大块。

http://www.cnnetsun.cn/news/3898028.html

相关文章:

  • 为什么选择obs-v4l2sink?揭秘这款OBS输出插件的独特优势与应用场景
  • vuejs-advanced-learning资源精选:2023年必学的Vue高级课程
  • 安阳网站建设哪家便宜才靠谱?揭秘低价背后的真相与选型指南
  • Moirai-1.0-R-Large配置文件深度解析:参数调优让预测精度提升30%
  • 三步轻松下载国家中小学智慧教育平台电子课本PDF的完整指南
  • B站直播录制终极指南:录播姬5分钟快速上手教程
  • 三水网站建设首选公司怎么挑?深度解析本地数字化破局之道与避坑指南
  • 终极微信QQ防撤回教程:三分钟永久告别“消息已撤回“的烦恼
  • HsMod:炉石传说终极模改插件,三分钟打造个性化游戏体验
  • Comet终极指南:如何快速掌握AI智能体工作流编排框架
  • AnySplat vs 传统3D重建:为什么前馈式方法是下一代视觉技术的关键?
  • RaspberryIO:用C轻松掌控树莓派IO功能的终极.NET库
  • 终极BT下载加速指南:83个免费公共Tracker一键配置教程
  • iOS多窗口终端革命:LibTerm让你随时随地高效编程
  • 阳光创信网站建设首选品牌:如何为企业打造高转化率的数字化营销利剑
  • lnmp1/lnmp集群方案详解:从单节点开发到Swarm模式生产部署
  • 如何3步实现B站评论区智能分析:开源成分检测工具完整指南
  • Arduino-LMIC示例代码实战:OTAA与ABP连接The Things Network
  • giget性能优化:为什么它比直接Git克隆快5倍?
  • 5个关键技术突破:深入解析HEIF Utility在Windows平台的架构设计与应用价值
  • ScrollingPagerIndicator开发者指南:实现自定义PagerAttacher接口全解析
  • 高性能HTTP头管理模块的架构设计与生产部署最佳实践
  • USD-Cookbook核心功能解析:3大合成弧与10个必学概念
  • 揭秘江西合创建设工程有限公司 网站背后的匠心精神与诚信承诺如何成为您值得信赖的合作伙伴
  • 5个你不知道的dark-mode实用技巧:提升macOS使用体验的秘密武器
  • 自助建站平台哪个好上手?免代码建站、模板自由度和维护成本对比
  • Python Ring Doorbell认证机制解析:安全访问Ring设备的关键
  • Graph Warp Module实战:Chainer Chemistry中的图神经网络创新应用
  • MakeMeAHanzi:为什么这个免费开源项目能彻底改变你的汉字学习体验?
  • 如何参与silent-hill-decomp项目:从零开始的PlayStation游戏逆向工程指南