如果一个/多个进程的存储空间超过了内存的总容量
那么连续分配和非连续分配方式均无法实现
如何在一片较小的空间内运行较大的进程?就要用到今天所提到的虚拟内存的管理。
实现方法:让不会同时执行(即不存在调用关系的)的程序模块共享一片存储区。
1.覆盖技术:一个进程的不同模块
如下图所示,A模块需要调用B和C,C模块需要调用D和E,B和C不同时调用,D和E也不同时调用。因此在运行时先运行A30K,再用25K的内存运行B,等B运行完后,C覆盖B的25K运行,接着C调用D运行,占据的内存为10K,最后运行E,占用了D运行的30K。
1.png
这种方法可以实现小内存大进程的任务,但是需要对进程间的关系进行分析,非常耗费时间。
2.交换(对换)技术:可以增加正在执行或者需要执行的进程的内存。
将暂不执行的进程换出内存,将满足执行条件的进程换入内存。
换出换出的单位是整个进程。
交换的时机发生在两种时候:第一种是当进程正在执行的时候,发现了内存不足,那么就需要把其他未在执行的进程换出;第二种是当进程将要执行时,发现内存不足将内存中未在执行的进程换出。
换出的进程一般是处于阻塞状态且优先级最低的进程。
而换入的进程一般是就绪状态,将其中换出时间最久的进程换入。
局部性原理
时间局部性:一条指令的执行或者下一次执行,一个数据的方位或者下一次访问都集中在一个较短的时间内。
空间局部性:当前执行的指令和临近的几条指令,当前访问的数据和临近的几个数据都集中在一个较小的区域内。
分支局部性:一条跳转指令的两次执行,很有可能跳到相同的位置。
注:开这个帖子的目的是为了记录一下自己负基础的生信学习过程,本次笔记的视频来自于操作系统【内存管理】_哔哩哔哩_bilibili,若是有记录的不妥之处,欢迎各位指正。
网友评论