前言
在早期的UNIX系统中,为了提高内存利用率,已提供了内存和外存之间的进程对换机制。在UNIX系统V中,除了保留对换功能外,还支持请求调页,内存空间的分配与回收均以页为单位进行,页面的大小随版本或机型的不同而异,大约为512B~4KB。一个进程只须将其一部分(段或页)调入内存便可运行。
一、请求调页管理的数据结构
1. 页表和磁盘描述表
1) 页表
页帧号:在内存中的物理块号;
年龄位:该页在内存中最近已有多少时间未被访问;
访问位:该页最近是否被访问过;
修改位:该页内容是否被修改过;
有效位:该页内容是否在内存;
写时拷贝(copy on write):当有多个进程共享一页时,须设置此字段,用于指示在某共享该页的进程要修改该页时,系统是否已为该页建立了拷贝;
保护位:该页所允许的访问方式,只读还是读/写。
2. 页框数据表和对换使用表
1) 页框数据表
每个页框数据表描述一个物理内存页:
页状态: 在对换设备/文件中。
内存引用计数: 引用该页面的进程数目。
逻辑设备: 拷贝的逻辑设备(交换设备/文件系统)。
块号: 块所在逻辑设备的逻辑块号。
指针1: 指向空闲页链表中的下一个页框数据表的指针。
指针2: 指向散列队列中下一个页框数据表的指针。
2) 对换使用表
对换设备上的每一页都占有对换使用表的一个表项,表项中含有一个引用计数,其数值表示有多少页表项指向该页。
二、换页进程
- 在UNIX的核心中,专门设置了一个换页进程(Page
Stealer),其主要任务是:每隔一定时间,对内存中的所有有效页的年龄加1,以及当有效页的年龄达到规定值后,便将它换出。主要功能有: - 增加有效页的年龄
- 对换出页(几种处理方式)
- 将换出页面写到对换设备上
三、 请求调页
当一个运行进程试图访问一个无效页面时,将产生一个有效性错误。这时的错误有两种情况:
- “段违例”:由于在装入可执行程序时,所有页所在的磁盘块号均已记入磁盘块描述表项中。若再找不到所需页,表示本次为“无理需要”,核心将发出“段违例”中断信号。
- “缺页中断”:若在磁盘块描述表项中,找到所需的页,表示内存访问合法;但若该页尚未调入内存,则核心为之分配一个页面的内存,将所缺的页调入。
- 调入缺页可能从以下三个位置:
缺页在可执行文件上
缺页在对换设备上
缺页在内存页面缓冲区中