温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
在上期的操作系统系列视频中,我们聊到了对内存地址进行抽象,为每个进程建立各自的地址空间。其中一种方式是用机子寄存器和界限寄存器来对进程进行划定界限,但是这一方法在如今计算机已经不再使用了。那么为什么呢?比如一个进程必须连续且完整的加载到内存中,但是如果有时候进程会随着数据增多而膨胀,甚至超过内存的大小,这可怎么办?不仅如此,当使用交换技术的时候,把整个进程从内存复制到磁盘中可能会花费相当多的时间,反之亦然。那么一个更好的做法就是把它切碎,分成一个个小单元,比如4KB大小,它们称为一页或页面,其中只有一部分的页面会在内存中。当CPU需要访问的地址不在内存中的页面中时,可。
01:00
可以从磁盘中加载对应的部分,同时内存不够时,也可以把长期不访问的页面保存到磁盘中,然后删除内存中的部分,这个做法称为虚拟内存。比如这句汇编是将寄存器中的值复制到内存中地址为1000的地方。这里的汇编并不限定某一种具体的硬件,也可能是反向复制。总之,这里的1000是虚拟地址,它由CPU解析这个指令后,先发送给地址转换器,称为内存管理单元,以下简称m mum MU负责把虚拟地址转换为物理地址后,通过总线访问内存。这里关于总线的内容是比较偏硬件了,这里就不展开介绍了。计算机组成原理会有相应的内容。内存从总线中获得物理地址,它对虚拟地址浑然不知,然后MM为了实现地址转换,它需要一个用来。
02:00
还记录虚拟地址到物理地址页框的映射关系,称为页表。这个进程的虚拟地址空间有64KB,而实际内存只有32KB,所以顶多只有一半的页面会在内存中。我们把内存中的对应的框叫做页框,用于加载一个页面,可以看到页面的映射没有顺序。现在有一句指令需要访问内存20500地址,我们需要把这个虚拟地址转成物理地址。首先这里每个页面大小是4KB,所以地址二零五零零距离页面五的起始地址20字节处,这里的20KB就是第五个页面的起始地址,20字节是页面内的偏移地址。然后按照映射关系是页框三号,它的起始地址是12KB,也就是12288字节,再加上页面内的偏移地址,就是物理地址12308。如果我们把它们都转换成二进制,可以看到高四位分别是十进制的五和三,刚好分别对应页面的编号和页框的编号,后12位一样是十进制的20,代表的是页面中的偏移地址,所以MMU只需转换高四位,偏移地址保持不变,就变成物理地址了。这就是利用二进制的好处,那么页面号中间还有二级页面号甚至更多,这样的称为多级页表。多级页表的好处是可以只让部分页表保存在内存中,这在现在普遍是64位操作系统的,今天页表变得非常大,所以就显得有。
03:50
最重要接下来记录映射关系的页表,其中每一项叫做页表项中包含页框号一位,表示反应该页面是否在内存中,保护位,记录读写执行的权限,还有修改位、保问位、高速缓存禁止位等等,这里就不展开了。那么页表通常是保存在内存中,那转换器MMU每次转换都需要从内存中读取,就会很慢,所以需要硬件加速,也就是MU中有暂时存储最近使用的部分页表项,这称为转换检测缓冲区,简称TLB或叫相连存储器。好了,虚拟内存的知识就到此结束了,我们下期再会。
我来说两句