操作系统—内存


一、内存的基础知识

在这里插入图片描述
什么是内存?
在这里插入图片描述
在这里插入图片描述
指令1:数据传输指令,第一个参数为操作码,这里代表传送值,第二个参数为目的地址,第三个参数为源地址。
在这里插入图片描述
第二条指令是加法指令,让地址为00000011的寄存器AX中的值+1,所以变成了11。
在这里插入图片描述
第三条指令,数据传送指令。
在这里插入图片描述
在这里插入图片描述
逻辑地址vs物理地址
在这里插入图片描述
从写程序到程序运行
在这里插入图片描述
从逻辑地址到物体地址
在这里插入图片描述
如果装入模块能从内存为0开始存放的话,那么指令里使用的地址参数是不需要改变的,因为在这种情况下,指令中使用的逻辑地址指向的就是最终的物理地址,所以在80这个地方最终是1,在81这个地方最终是2。
但是如果我们把装入模块放到了另外一个地方,比如说从内存地址为100的地方开始存放的,那么这些指令里包含的地址参数指向错误的地方,这个时候需要对地址进行处理,也就是要完成从逻辑地址到物理地址的转换。
在这里插入图片描述
绝对装入:
在这里插入图片描述
在这里插入图片描述
静态重定位:
在这里插入图片描述
在这里插入图片描述
动态重定位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
链接的三种方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结
在这里插入图片描述

二、内存管理相关的概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
内存保护:各个进程只能访问自己的内存空间。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重定位寄存器又可以称为基址寄存器,界地址寄存器又叫做限长寄存器。

三、覆盖与交换

在这里插入图片描述
覆盖技术
在这里插入图片描述
B模块和C模块不可能同时进行访问,内存当中要么有B,要么有C,不可能同时有,所以让B和C共享同一个区域(区域大小以B和C大的为准),D、E、F也不可能同时被使用,所以也可以共享一个覆盖区。
在这里插入图片描述
在这里插入图片描述
交换技术
内存不够的时候,把进行换到外存去,但是它的PCB挂起在内存当中。

为什么PCB会常驻内存当中呢?
因为进程被换出内存之和,必须要通过某种方式记录下进程到底放在了外存的什么位置,进程的存放信息就可以记录在与他对应的PCB当中,那么操作系统就可以根据PCB当中的信息对进程进行管理了。所以进程的PCB是需要常驻内存的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结
在这里插入图片描述

四、连续分配管理方式

在这里插入图片描述
单一连续分配
在这里插入图片描述
固定分区分配方式:
在这里插入图片描述
在这里插入图片描述
动态分区分配
在这里插入图片描述
当进程2运行结束移出内存之后,内存当中就会有一个14M大小的内存空间,此时如果有了新进程到达,并且这个进程需要4M字节大小的内存空间,此时14M内存空间和4M内存空间都可以满足要求,此时选择哪个分区进行分配呢?
接下来18M自己的进程3运行结束,然后撤离了内存区域,那么此时内存就会出现18M字节的内存空闲区域,那么这个空闲区域应该怎么处理,是否应该和他相邻的内存区域进行合并呢。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进程5进入内存,如何分配?
在这里插入图片描述
第二种情况
在这里插入图片描述
在这里插入图片描述
回收的处理
在这里插入图片描述
在这里插入图片描述
第二种情况
在这里插入图片描述
在这里插入图片描述
第三种情况
在这里插入图片描述
在这里插入图片描述
第四种情况
在这里插入图片描述
内部碎片和外部碎片
在这里插入图片描述
进程2不能运行要换出到外部空间当中去,14M字节空间。
接着进程4进入,剩10M字节空间。
接着进程1也不能运行,空出20M字节空间。
在这里插入图片描述
接下来进程2又可以恢复运行了,占用了14M的内存空间,于是上面那一块就剩下了6M的内存空间。
接下来进程1,20M字节的进程又可以执行,此时会发现内存当中的任何区域都不能满足进程1的需求,所以这就产生了所谓的外部碎片,这些空闲的空间是暂时没有分配给任何一个进程的,但是由于他们都太小了,所以没办法满足大进程的需求。
在这里插入图片描述
紧凑技术其实很简单,就是把各个进程进程挪位,然后把他们全部攒到一起,挪出一个更大的空闲,这样的话这个空闲区域就可以供进程1使用了。
在这里插入图片描述
动态重定位是最方便实现进程在内存中的移动位置这件事情,所以我们应该采用动态重定位的方式,另外紧凑之后,我们应该把各个进程的起始地址给修改掉,起始地址一般在进程的PCB当中,当进程想要上PCB进行运行之前,会把进程的起始地址信息放到重定位寄存器里,或者叫做基址寄存器里。
在这里插入图片描述
总结
在这里插入图片描述

五、动态分配算法

在这里插入图片描述
首次适应算法
在这里插入图片描述
在这里插入图片描述
进程5要进入内存,此时按空闲分区以地址递增的方式进行排列,然后进入分区1,进入以后,修改剩余分区的大小。
在这里插入图片描述
接着进程6进入内存。
在这里插入图片描述
最佳适应算法
在这里插入图片描述
进程6放入之后剩余1M的空间,由于最佳适应算法是按照分区的大小进行排序的,所以此时还需要进行调整空间大小,
在这里插入图片描述
接着进程5进入内存,发现4M分区大小满足要求,此时放入4M分区。放入后,对空闲分区链进行更新,还是按照依次由小到大进行更新。
在这里插入图片描述
最坏适应算法
在这里插入图片描述
进程5进入内存空间,然后剩余17M
在这里插入图片描述
进程6进入内存(9M),然后剩余8M。
在这里插入图片描述
此时发现空闲分区链不是按照递减的方式进程的,所以此时我们需要对其进行更新。
在这里插入图片描述
在这里插入图片描述
邻近适应算法
在这里插入图片描述
进程5进入内存,依次进程查找,发现6M空间满足,
在这里插入图片描述
接下来进程6进入内存,发现10M空间满足。
在这里插入图片描述
然后更新相应的结构。
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述

六、基本分页存储管理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
页面的起始地址:
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述

总结

学习了内存的基本知识,然后学习了内存的管理概念以及内存的分配算法,最后学习了基于分页管理的基本概念。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java操作系统内存管理是指在Java程序运行过程中,如何对系统内存进行合理分配和管理,以提高程序的性能和稳定性。 首先,Java使用垃圾回收机制来管理内存。当Java程序创建对象时,会在堆内存中分配内存空间。当对象不再被引用时,垃圾回收机制会自动回收这些内存空间,减少内存泄漏的发生。 其次,Java通过虚拟机(JVM)来管理内存。JVM会将内存分为不同的区域,包括堆内存、栈内存和方法区等。堆内存用于存放对象实例,栈内存用于存放局部变量和方法调用栈,方法区用于存放类信息和静态变量。通过合理设置JVM参数,可以调整内存区域的大小,以满足程序的需要。 此外,Java还提供了一些内存管理的工具和技术。例如,通过使用弱引用、软引用和虚引用,可以更灵活地管理对象的生命周期。通过使用内存映像文件,可以在程序运行过程中保存对象状态,以便在下次启动时加载。通过使用内存监控工具,可以实时跟踪和分析程序的内存使用情况,以及识别内存泄漏问题。 在编写Java程序时,我们也可以采取一些内存管理的最佳实践。例如,及时释放不再使用的对象引用,尽量避免创建过多的临时对象,避免过度使用静态变量和全局变量等。这些实践可以有效地减少内存的占用,提高程序的执行效率。 总之,Java操作系统内存管理是通过垃圾回收机制、虚拟机和一些工具技术来有效地分配和管理内存,以提高程序的性能和稳定性。编写Java程序时,我们也可以采取一些内存管理的最佳实践,以优化内存使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值