虚拟内存实现---分页相关工作、缺页中断处理、指令备份、锁定内存中的页面、后备存储、 策略和机制的分离

虚拟内存系统实现涉及选择理论算法与处理实际问题。本文介绍了分页相关工作,如进程创建时的页表初始化,调度进程时的MMU设置,缺页中断时的页面替换,及进程退出时的资源释放。缺页中断处理包括硬件陷阱、通用寄存器保存、页面定位、页面置换、磁盘操作与指令备份。此外,讨论了锁定内存页面以避免I/O冲突,以及后备存储的分配策略。最后,探讨了策略与机制分离的概念,通过用户级的外部页面调度程序与内核的缺页中断处理协同工作。
摘要由CSDN通过智能技术生成

3.6   有关实现的问题

实现虚拟内存系统要在主要的理论算法(如第二次机会算法与老化算法,局部页面分配与全局页面分配,请求调页与预先调页)之间进行选择。但同时也要注意一系列实际的实现问题。

3.6.1   与分页有关的工作

操作系统要在下面的四段时间里做与分页相关的工作:进程创建时,进程执行时,缺页中断时和进程终止时。

当在分页系统中创建一个新进程时,操作系统要确定程序和数据在初始时有多大,并为它们创建一个页表。操作系统还要在内存中为页表分配空间并对其进行初始化。当进程被换出时,页表不需要驻留在内存中,但当进程运行时,它必须在内存中。另外,操作系统要在磁盘交换区中分配空间,以便在一个进程换出时在磁盘上有放置此进程的空间。操作系统还要用程序正文和数据对交换区进行初始化,这样当新进程发生缺页中断时,可以调入需要的页面某些系统直接从磁盘上的可执行文件对程序正文进行分页,以节省磁盘空间和初始化时间。最后,操作系统必须把有关页表和磁盘交换区的信息存储在进程表中

调度一个进程执行时,必须为新进程重置MMU,刷新TLB,以清除以前的进程遗留的痕迹新进程的页表必须成为当前页表,通常可以通过复制该页表或者把一个指向它的指针放进某个硬件寄存器来完成。有时,在进程初始化时可以把进程的部分或者全部页面装入内存中以减少缺页中断的发生,例如,PC(程序计数器)所指的页面肯定是需要的。

缺页中断发生时,操作系统必须通过读硬件寄存器来确定是哪个虚拟地址造成了缺页中断。通过该信息,它要计算需要哪个页面,并在磁盘上对该页面进行定位。它必须找到合适的页框来存放新页面,必要时还要置换老的页面,然后把所需的页面读入页框。最后,还要备份程序计数器,使程序计数器指向引起缺页中断的指令,并重新执行该指令。

进程退出的时候,操作系统必须释放进程的页表、页面和页面在硬盘上所占用的空间。如果某些页面是与其他进程共享的,当最后一个使用它们的进程终止的时候,才可以释放内存和磁盘上的页面。

3.6.2   缺页中断处理

缺页中断发生时的事件顺序如下:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值