视频字幕
欢迎来到计算机组成原理的课堂!今天我们要学习一个非常重要的概念——页式虚拟存储器。首先让我们了解什么是虚拟存储器。传统的物理内存存在很多问题:容量有限,当程序需要的内存超过物理内存大小时就无法运行;多个程序同时运行时容易发生冲突;还会产生内存碎片化问题。为了解决这些问题,计算机科学家们发明了虚拟存储器技术。虚拟存储器为每个程序提供了一个比物理内存更大的虚拟地址空间,程序之间相互隔离,提高了系统的安全性和稳定性。
现在让我们深入了解页式存储的工作原理。页式存储的核心思想是将程序和数据分割成固定大小的页面,就像把一本厚书分成很多页一样。每个页面的大小通常是4KB,也就是4096个字节。为什么选择4KB呢?这是在内存利用率和管理开销之间的一个平衡点。页面太小会增加管理开销,页面太大会造成内存浪费。虚拟页面通过页表映射到物理内存的页框中。页表就像一个地址簿,记录着每个虚拟页面对应的物理页框位置。当程序访问某个虚拟地址时,系统会查找页表,找到对应的物理页框,然后进行实际的内存访问。这种映射机制使得程序可以使用连续的虚拟地址空间,而实际的物理内存可以是不连续的。
现在让我们跟随卡通邮递员来了解地址转换的详细过程。地址转换是页式虚拟存储器的核心机制,就像邮递员投递邮件一样,需要准确找到目标地址。首先,系统会将虚拟地址分离成两部分:页号和页内偏移。页号位于地址的高位部分,用来索引页表;页内偏移位于低位部分,表示在页面内的具体位置。接下来,系统使用页号作为索引去查找页表,页表中存储着虚拟页号到物理页框号的映射关系。找到对应的页表项后,系统获取物理页框号。最后,将物理页框号与原来的页内偏移组合,就得到了最终的物理地址。举个例子,在32位系统中,如果页面大小是4KB,那么页号占20位,页内偏移占12位。当虚拟地址为0x1234时,页号是1,偏移是0x234,通过页表查找得到页框号0,最终物理地址就是0x0234。
现在让我们深入了解页表的内部结构。页表不仅仅是简单的地址映射,它包含了多个重要的控制字段,每个字段都有特定的作用。首先是有效位,用V表示,它控制页面是否在物理内存中。当有效位为1时,表示页面在内存中可以直接访问;当有效位为0时,表示页面不在内存中,访问时会触发缺页异常。访问位用A表示,记录页面是否被访问过,这个信息对页面替换算法很重要。修改位用M或D表示,标记页面是否被修改过,如果页面被修改过,在替换时需要写回磁盘。保护位包括读、写、执行权限,用RWX表示,控制程序对页面的访问权限。最后是物理页框号,指向实际的物理内存页框。这些控制位在系统运行时发挥重要作用:当程序访问内存时,硬件首先检查有效位,如果有效则继续访问并设置访问位;如果无效则触发缺页异常;同时还要检查保护位确保访问权限正确。
现在让我们跟随卡通警察角色来了解缺页异常的完整处理过程。当程序访问一个不在物理内存中的页面时,硬件会检测到页表中的有效位为0,立即触发缺页异常。这时操作系统就像警察一样迅速介入,首先保存当前程序的执行现场,然后分析异常的原因。接下来是关键的页面替换过程。由于物理内存空间有限,系统需要选择一个牺牲页面来腾出空间。这里使用LRU算法,也就是最近最少使用算法,选择最久没有被访问的页面作为牺牲者。在我们的例子中,页面A的访问时间是t=1,是最早的,所以被选为牺牲页面。如果被替换的页面曾经被修改过,系统需要先将它写回磁盘保存;然后从磁盘加载需要的新页面到这个位置。最后,系统更新页表项,将新页面的映射关系记录下来,并恢复程序的执行。整个过程对用户程序是透明的,程序感觉不到这个复杂的页面替换过程。