操作系统(二)

本文详细介绍了操作系统中的内存管理,包括内存管理的目的、连续内存分配(首次适配、最佳适配、最差适配)、非连续内存分配(分段、分页)以及虚拟内存技术。此外,还探讨了页面置换算法,如OPT、FIFO、LRU等,并讨论了全局与局部页面置换算法。文章旨在阐述内存管理的关键概念和技术,以帮助读者深入理解操作系统如何高效地管理内存。
摘要由CSDN通过智能技术生成

引言

文章很长,慎入⊙﹏⊙,可以收藏了慢慢看~

文章导读

  • 内存管理简介
  • 连续内存分配(首次适配,最佳适配,最差适配)
  • 非连续内存分配(分段,分页)
  • 虚拟内存技术
  • 页面置换算法(OPT,FIFO,LRU,Clock,LFU,工作集页置换算法,缺页率置换算法)

一、内存管理简介

1.1 管理内存的方法

  • 程序重定位
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存

实现依赖于硬件
MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求。

1.2 地址空间&地址的生成

物理地址空间
硬件支持的地址空间(主存和磁盘)。

逻辑地址空间
一个运行的程序所拥有的内存范围。

1.3 逻辑地址与物理地址的转换

1.ALU需要某个逻辑地址的内存的内容。
2.内存管理单元(MMU)寻找在逻辑地址和物理地址之间的映射;如果没有就从内存中找。
3.控制器从总线发送在物理的内存内容的请求。
4.内存发送物理地址内存给CPU 。

具体步骤2是怎么建立逻辑地址和物理地址的映射,是如何查找的就是靠操作系统完成的。

二、连续内存分配

内存分配分为连续内存分配和非连续内存分配。首先看下连续内存分配,在内存分配的过程中会产生一些内存碎片,先了解一下内存碎片的概念。

  • 外部碎片:在分配单元间的未使用内存。
  • 内部碎片:在分配单元中的未使用内存。

连续内存分配算法有首次适配最佳适配最差适配

首次适配思路
1.按地址排序的空闲块列表。
2.分配需要找到一个合适的分区。
3.重分配时需要检查,看是否自由分区能合并于相邻的空闲分区。

优点:简单;易于产生更大空闲块。
缺点:外部碎片;不确定性。

最佳适配思路
为了分配n字节,使用最小的比n大的可用空闲块。
1.按尺寸排列的空闲块列表。
2.分配需要寻找一个适合的分区。
3.重分配需要搜索及合并于相邻的空闲分区。

优点:当大部分分配是小尺寸时非常有效;比较简单。
缺点:外部碎片;重分配慢;易产生很多没用的微小碎片。

最差适配
和最佳适配思路相反。为了分配n字节,使用最大可用空闲块,尽可能保证空闲块是最大的。1.按查村排列的空闲块列表。
2.分配很快。
3.重分配需要合并于相邻的空闲分区,调整空闲块列表。

优点:每次分配是中等尺寸效果最好。
缺点:重分配慢;外部碎片;易于破碎大的空闲块以至大分区无法被分配。

可以看出,在连续的分配算法下难免会产生一下碎片,只要这些进程存在,这些碎片真的就无法利用吗?针对于这个问题,有两种解决内存碎片的思路:

  • 压缩式碎片整理
    将等待中的程序进行内存的挪动,减少外部碎片的出现。
  • 交互式碎片整理
    当运行程序需要更多的内存时,可以回收等待的程序的内存,将其挪到磁盘中(虚拟内存)。

注:上述所说的内存都是物理内存。

三、 非连续内存分配

对于内存的连续分配,总是会有碎片的产生,内存利用率低,而且执行碎片整理的方法也都是有开销的。因此,非连续内存分配就能很好的解决碎片问题,也是操作系统中用的最多的内存分配方法。

非连续内存分配基本算法有分段分页

虽然非连续分配的好处挺多,但在实现上也有一些问题,比如如何建立虚拟地址和物理地址之间的转换?

这就是后序要磕的分段和分页及映射表的设计。

3.1 分段

逻辑地址=s(段号),o(段内偏移)
段表=s(段号),限制(段长),基址

分段有两种实现方案:

  • 段寄存器+地址寄存器实现方案。
  • 单地址实现方案。

简单看一下段寄存器+地址寄存器是如何找到逻辑地址对应的物理地址的。

过程:
1.首先判断逻辑地址的段号s是否超过段表寄存器中的段表长度,如果超过则会产生越界异常。
2.如果不超过则去段表中找到对应的段号(段表始值+段号)。
3.判断偏移o是否超过段长,不超过则找到对应的基址+偏移得到物理地址。
4.这个物理地址就是要访问的主存地址了。

在分段管理的过程中,段长不是固定的。如果是单地址实现方案则更加简单,没有段表寄存器。直接拿逻辑地址中的段号去段表中查,其他步骤和上述一样。

3.2 分

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值