主存和联机工作的辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作,对应用程序员来说,虚拟存储器是透明的。
虚拟存储器将主存或辅存的地址空间同一编址,形成一个庞大的地址空间,不必在乎实际的主存容量和程序在主存中实际的位置
用户编程允许涉及的地址称为虚地址或逻辑地址,虚地址对应的存储空间称为虚拟空间或程序空间。实际的主存单元地址称为实地址或物理地址,实地址对应的是主存地址空间,也称实地址空间。虚地址比实地址大的多。
CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元内容是否已装入主存。
实地址=主存页号+页内字地址
虚地址=虚存页号+页内字地址
页式虚拟存储器
以页为基本单位的虚拟存储器称为页式虚拟存储器。虚拟空间与主存空间都被划分成同样大小的页,主存的页被称为实页,虚存的页被称为虚页。虚拟地址分为两个字段:虚页号和页内地址。虚地址到实地址的变化由页表来实现。页表一般长久保留在内存中。
页表基址寄存器存放当前运行程序的页表的起始地址,它和虚页号拼接成页表项地址,每个页表项纪录与某个1虚页对应的虚页号,实页号和装入位等信息。装入位为“1”,则表示该页面已在主存中,将对应的实页号和虚地址中的页内地址拼接,得到完整的实地址;装入位为“0”,表示该页面不在主存中,此时要启动I/O系统,把该页从辅存调入主存后再供CPU使用。
段式虚拟存储器
段式虚拟存储器中的段是按程序的逻辑结构划分,各个段的长度因程序而定。把虚地址分为两部分:段号和段内地址。由于段的长度可变,所以段表中要给出各段的起始地址与段的长度,如下图的逻辑
段页式虚拟存储器
每一个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。以页为基本的传送单位。
快表(TLB)
根据程序执行的局部性原理,将经常访问的某些页对应的页项放入高速缓冲器组成快表,相应的把存放在主存中的页表称为慢表(Page)