第九周学习总结
教材内容总结
第九章 虚拟内存
9.1 物理寻址和虚拟寻址
虚拟内存主要是一种地址扩展技术,主要是建立和管理两套地址系统:物理地址和虚拟地址。由虚拟地址空间(硬盘上)装入进程,其实际执行是在物理地址空间(内存上)承载进程的执行。虚拟地址空间比物理地址空间要大的多,操作系统同时承担着管理者两套地址空间的转换。image
主存的每个地址都是唯一的,第一个字节地址为0,接下来为2,以此类推。CPU使用这种访问方式就是物理寻址。上图所示就是CPU通过地址总线传递读取主存中4号地址开始处的内容并通过数据总线传送到CPU的寄存器中。
但是地址总线也不是无限大的,地址总线只能最多访问到4GB的地址内容。于是有了虚拟寻址方式。image
使用虚拟寻址的时候,cpu先是生成一个虚拟地址:4100再经过地址翻译器,将4100翻译成物理地址。
9.2地址空间
地址空间是一个非负整数的集合{0,1,2,……},一个32位的系统中有:2^32 = 4 294 967 296B(4GB)个有效地址
9.3虚拟存储器的工作原理
虚拟存储器的主要思想就是:在主存中缓存硬盘上的虚拟页(pagefile.sys),虚拟页有三个状态:未分配、缓存的、未缓存的。image
上图所示的是一个有8个虚拟页的小虚拟存储器(建立在硬盘上),虚拟页0和3还未分配,因此在磁盘上还不存在。虚拟页1、4和6被缓存在右边的主存中
地址翻译MMU如何完成虚拟地址到物理地址的转换
页表
页表是一个存放在内存中的数据结构,MMU就是通过页表来完成虚拟地址到物理地址的转换。这个数据结构每一个条目称为PTE(Page Table Entry),由两部分组成:有效位和n位地址段。有效位如果是1,那么n位地址就指向已经在内存中缓存好了的地址;如果为0,地址为null的话表示为分配image
虚拟页vp1,2,7,4当前被缓存在内存中,页表上有效位设置成1,分别用PTE1,2,4,7表示。VP0和VP5(PTE0、5)未被分配,VP3和VP6被分配并指向虚拟内存,但未被缓存。
页命中
image
使用2100虚拟地址来访问虚拟页2的内容的时候,就是一个页命中。地址翻译将指向PTE2上,由于有效位1,地址翻译器MMU就知道VP2已经缓存在内存中了
image
9.4 虚拟存储器的作用
虚拟存储器有诸多的好处,操作系统其实为每个进程提供了一个独立的页表,使用不同的页表也就创建了独立的虚拟地址空间
9.5 虚拟存储器工作原理详解:地址翻译
地址翻译从形式上来说就是建立一个虚拟地址空间到物理地址空间的映射关系,我们前面说过MMU使用的是页表来实现这种映射。CPU中有一个专门的页表基址寄存器(PTBR)指向当前页表
每个虚拟地址由两部分组成:虚拟页号(VPN)+虚拟页偏移量(VPO),当CPU生成一个虚拟地址并传递给MMU开始翻译的时候,MMU利用虚拟地址的VPN来选择相应的PTE,同时将页表中的物理页号(PPN)+虚拟地址的VPO就生成了相应的物理地址。image
提高翻译速度的方法
加入高速缓存
高速缓存被发明出来的一个重要原因就是提高对内存的访问速度:高速缓存被放在存储器和MMU之间,可以缓存页表条路。image
加入翻译后备缓冲器TLB
LB是一个小的、虚拟寻址的缓存,其中每一行都保存一个PTE块,高度相连。主要是提供虚拟地址到物理地址的翻译速度。image
加入多级页表
9.8动态存储分配
动态存储器分配指的是在程序运行的时候分配额外的存储空间,分配器维护着虚拟存储器中的堆实现这种分配。
显式分配:程序调用malloc和free函数
image
上周错题总结
下面代码对于并发程序来说逻辑上是(D)条指令?
for(i=0;i<1000; i++)
cnt++;
A .
2
B .
3
C .
4
D .
5
E .
6
F .
1
有关信号量(semphore),下面说法正确的是(ABC)
A .
信号量s是一个非负的全局变量
B .
信号量只能通过P,V操作来处理
C .
P,V操作确保信号量s非负
D .
sem_post()完成P(s)的操作
E .
sem_wait()完成V(s)的操作