3.6 有关实现的问题

3.6 有关实现的问题
1. 与分页有关工作
与分页有关的工作主要在:进程创建时,进程执行时,缺页中断时,和进程终止时。
(1)进程创建时:
  • 操作系统确定程序和数据初始时有多大,并为它们创建一个页表。
  • 操作系统在内存中为页表分配空间并初始化(进程运行时,页表必须在内存中)。
  • 操作系统还要在磁盘交换区分配空间,以便一个进程换出时在磁盘上有放置此进程的空间。
  • 操作系统还要用程序正文和数据对交换区进行初始化,这样当新进程缺页中断时可以调入需要的页面。
  • 最后操作系统还必须把有关页表和磁盘交换区的信息存储在进程表中。
创建页表=》内存页表=》磁盘交换区=》进程表
(2)进程执行时:
  • 为新进程重置MMU,刷新TLB,消除之前进程遗留的痕迹。
  • 新进程的页表成为当前页表(通过复制该页表或者一个指向它的指针放进某个硬件寄存器)。
(3)缺页中断时:
  • 操作系统通过读硬件寄存器确定是哪个虚拟地址造成中断,并在磁盘上对该页面进行定位
  • 找到合适的页框(必要时要置换),并读入所需页面。
  • 备份程序计数器,使程序计数器指向引起缺页中断的指令,并重新执行
(4)进程终止时:
  • 释放页表、页面和页面在硬盘上的空间。
  • 如果有些页面是共享的,要当最后一个使用他们的进程终止时才可以释放。

2. 缺页中断处理
  • 硬件陷入内核,堆栈中保存PC。
  • 启动一个汇编代码例程程序保存通用寄存器和其他信息。
  • 尝试发现是哪个虚拟页面(通常在硬件寄存器)。如果没有的话,必须检索程序计数器,取出该指令并用软件分析。
  • 一旦知道了缺页中断的虚拟地址,先检查该地址是否有效以及存取与保护是否一致。如果不一致,向进程发一个信号或者kill进程。如果地址有效且无保护错误,则检查有无空闲页框,没有还要执行页面置换算法。
  • 如果选择的页框脏了,还要安排该页写回磁盘,发生一次上下文切换,挂起该产生缺页中断的进程,让其他进程运行直到硬盘传输结束。
  • 一旦干净了,查找所需页面在磁盘上地址并装入。产生缺页中断的进程依旧被挂起,运行其他进程。
  • 当磁盘中断发生,说明该页已经装入。
  • 恢复发生缺页中断指令以前的状态。PC重新指向这条指令。
  • 调度引发缺页中断的进程,操作系统返回调用它的汇编语言例程
  • 该例程恢复寄存器和其他信息,返回到用户空间继续执行。
保存信息=》查找页面=》找页框(=》置换页面(=》写磁盘))=》磁盘写入内存=》恢复进程
3. 指令备份
某些计算机上,使用一个隐藏的内部寄存器,每条指令执行之前把PC的内容复制到该寄存器。
4. 锁定内存中的页面
当考虑I/O时,如果一个I/O设备正对某页面传输,将该页面移除将会导致部分数据写入他们所属的缓冲区,而部分数据被写入最新装入的页面。
一个解决方法是锁住正在做I/O操作的内存中的页面保证它不会被移出内存。
另一个解决方法是在内核缓冲区中完成所有的I/O操作后再把数据复制到用户页面。
5. 后备存储
在磁盘上分配页面空间最简单的算法是在磁盘上设置特殊的交换分区,每个进程启动时,流出一个与该进程一样大的交换区快。
但进程在启动后可能增大,尽管程序正文通常是固定的,但数据有时会增长,堆栈也随时在增长。这样最好为正文、数据、堆栈分别保留交换区。

另一个方法是事先什么也不分配,在页面换出时才为其分配磁盘空间,并在换入时回收磁盘空间。
缺点是内存中每个页面都要记录相应的磁盘地址,即每个进程都要有一个表记录每个页面在磁盘上的位置。

2018/03/15 19:05
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值