内存管理
虚拟内存
虚拟内存的基本思想
每个进程拥有自己的地址空间,这个空间被分割为多个块,每个块称作一页。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
虚拟内存的目的
是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
虚拟内存的三个重要功能
- 它在主存中自动缓存最近使用的存放磁盘上的虚拟地址空间的内容。
- 虚拟内存简化了内存管理,进而又简化了连接,在进程间共享数据、进程的内存分配以及程序加载。
- 虚拟内存通过在每条页表条目中加入保护位,从而简化了内存保护。
页式存储管理
页式存储管理的基本原理
页式存储管理是把主存储器划分成大小相等的若干区域,每个区域称为一块,并对它们加以顺序编号,如第 0 块、第 1 块等等。与此对应,用户程序的逻辑地址空间划分成大小相等的若干页,同样为它们加以顺序编号,从 0 开始,如第 0 页、第 1 页等。 页的大小与块的大小相等。
分页式存储管理的逻辑地址由两部分组成:页号和页内地址。其格式为:
在分页式存储管理系统中,允许将作业的每一页离散地存储在主存的物理块中,但系统必须能够保证作业的正确运行,即能在主存中找到每个页面所对应的物理块。为此,系统为每个作业建立了一张页面映像表,简称页表。页表实现了从页号到主存块号的地址映射。作业中的所有页(0 ~ n)依次地在页表中记录了相应页在主存中对应的物理块号。页表的长度由进程或作业拥有的页面数决定。
页式存储管理的地址映射
调度程序在选择作业后,将选中作业的页表始址送入硬件设置的页表控制寄存器中。地址转换时,只要从页表寄存器中就可找到相应的页表。当作业执行时,分页地址变换机构会自动将逻辑地址分为页号和页内地址两部分,以页号位索引检索页表,如果页表中无此页号,则产生一个“地址错”的程序性中断事件;如果页表中有此页号,则可得到对应的主存块号,再按逻辑地址中的页内地址计算出欲访问的主存单元的物理地址。因为块的大小相等,所以块内地址等于页内地址。
物 理 地 址 = 块 号 × 块 长 + 页 内 地 址 物理地址=块号×块长+页内地址\hspace{50cm} 物理地址=