进程交换和连续内存分配

进程交换

进程需要是需要在内存当中才方便去执行,当然进程也可以暂时的从内存当中交换到备份存储中,这个备份存储通常是磁盘,因为它必须足够的大,以便可以容纳所有用户的内存镜像副本

假如有一个CPU调度的算法,将另一进程换入到刚刚释放的内存空间当中,同时CPU调度器可以将时间片分配给其他已在内存中的进程,当每个进程用完时间片,它将与另一进程进行交换

这里写图片描述

这样的交换策略的变种其实可以被用在基于优先级的调度算法当中,如果有一个更高优先级的进程且需要服务,内存管理器可以交换出低优先级的进程,这样方便装入和执行更高优先级的进程。当更高优先级的进程执行完毕之后,低优先级的进程可以交换回内存以继续执行,这种交换称为滚出和滚入

还有需要注意的是一个交换出的进程需要交换回它原来所占有的内存空间,这一个限制是由地址绑定方式决定的,如果绑定是在汇编时或者是加载时所定的,那么就不可以移动到不同的位置,如果绑定是在运行时才确定的,由于物理地址是在运行的时候才确定的,那么进程就可以移动到不同的地址空间

进程发生交换的时候,系统有一个就绪队列,它包括在备份存储或在内存中准备运行的所有进程,当CPU调度程序决定执行进程时,它调用调度程序检查队列中的下一个进程是否在内存当中,如果不在内存当中的话且没有空闲的内存空间,调度程序会将一个已经在内存当中的进程交换出去,并且换入所需要的进程,然后重新装载寄存器,并且将控制权交给所选择的进程

需要注意的是,只有知道了用户进程所真正需要的内存空间,而不是其可能所需要的世界是非常有用的,因为这样只需要交换真正的使用的内存,就可以减少交换时间

连续内存分配

内存通常分为两个区域:一个就是用于驻留在操作系统,另一个就是用户进程,操作系统可以位于低内存,也可以位于高内存。影响这一决定的主要因素就是中断向量的位置,由于中断向量通常位于低内存,所以程序员通常将操作系统也放在低内存

我们通常需要将多个进程同时放在内存中,因此需要考虑如何为输入队列中需要调入内存的进程分配内存空间,当我们采用连续内存分配的时候,每个进程位于一个连续的内存区域

猜你喜欢

转载自blog.csdn.net/ZCMUCZX/article/details/80337379