2018-2019-1 20165225《信息安全系统设计基础》第九周学习总结
教材学习内容总结
1.理解虚拟存储器的概念和作用;
2.理解地址翻译的概念;
3.理解存储器映射;
4.掌握动态存储器分配的方法;
5.理解垃圾收集的概念;
6.了解C语言中与存储器有关的错误;
虚拟存储器
-
物理和虚拟寻址
-
计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址。CPU根据物理地址访问存储器的方式是物理寻址。
-
虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。
-
使用虚拟寻址时,CPU通过生成一个虚拟地址VA来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址,地址翻译通过CPU芯片上的存储器管理单元完成。
地址空间
-
线性地址空间:地址空间中的整数是连续的。
-
虚拟地址空间:CPU从一个有 N=2^n 个地址的地址空间中生成虚拟地址,这个地址空间成为称为虚拟地址空间。
地址空间的大小:由表示最大地址所需要的位数来描述。 -
物理地址空间:与系统中的物理存储器的M个字节相对应。
-
虚拟存储器的基本思想:主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。虚拟存储器作为缓存的工具
虚拟存储器——虚拟页VP,每个虚拟页大小为P=2^平字节。物理存储器——物理页PP,也叫页帧,大小也为P字节。
页表
页表是一个数据结构,存放在物理存储器中,将虚拟页映射到物理页,就是一个页表条目的数组。
页表的组成:有效位+n位地址字段。
如果设置了有效位:地址字段表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。如果没有设置有效位:
-
空地址:表示该虚拟页未被分配
-
不是空地址:这个地址指向该虚拟页在磁盘上的起始位置。
Linux虚拟存储器系统
-
Linux为每个进程维持了一个单独的虚拟地址空间。内核存储器包含内核中的代码和数据结构。一部分区域映射到所有进程共享的物理页面另一部分包含每个进程都不相同的数据。
-
区域:就是已分配的虚拟存储器的连续片,这些页是相关联的。每个存在的虚拟页面都保存在某个区域中。内核为系统中的每个进程维护一个单独的任务结构task_struct:
-
一个具体区域的区域结构包括:
- vm_start:指向起始处
- vm_end:指向结束处
- vm_prot:描述这个区域包含的所有页的读写许可权限
- vm_flags:是共享的还是私有的
- vm_next:指向下一个区域
- Linux缺页异常处理虚拟地址A是否合法?
不合法,触发段错误,终止进程
合法,进入下一条
存储器访问是否合法?即,是否有权限?
不合法,触发保护异常,终止程序
合法,进入下一条
这时,是针对合法的虚拟地址进行合法的操作。所以:选择一个牺牲页面,如果被修改过就换新的并更新页表。
页命中
-
当CPU读取一个字的时候,地址翻译硬件将虚拟地址作为一个索引来定位PTE,并从存储器中读取它。虚拟存储器作为存储器管理的工具操作系统为每个进程提供了一个独立的页表,也就是一个独立的虚拟地址空间。
抖个虚拟页面可以映射到同一个共享物理页面上。 -
存储器映射:将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法。虚拟存储器作为存储器保护的工具
地址翻译
-
一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)之间的映射。CPU中的一个控制寄存器页表基址寄存器指向当前页表,n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移(VPO) 和一个(n-p)位的虚拟页号,页表条目中的物理页页号和虚拟地址中的VPO串联起来,就得到了相应的物理地址。
-
fork函数
-
当fork函数被当前进程调用时,内核为新进程创建各种数据结构,并分配给它一个唯一的PID。为了给这个新进程创建虚拟存储器,它创建了当前进程的mm_struct、区域结构和页表的原样拷贝。它将两个进程中的每个页面都为标记只读,并将两个进程中的每个区域结构都标记为私有的写时拷贝。
当fork在新进程中返回时,新进程现在的虚拟存储器刚好和调用fork时存在的虚拟存储器相同。当这两个进程中的任一个后来进行写操作时,写时拷贝机制就会创建新页面,因此,也就为每个进程保持了私有地址空间的抽象概念。
本周错题总结
下周一补上
结对学习
- 本周依然和5221同学一起复习。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 12 | 14小时 | |
第一周 | 63/150 | 1/12 | 3小时 | |
第二周 | 150/150 | 2/12 | 10小时 | |
第三周 | 150/150 | 3/12 | 13小时 | |
第四周 | 97/150 | 4/12 | 10小时 | |
第五周 | 104/150 | 5/12 | 10小时 | |
第六周 | 95/150 | 6/12 | 8小时 | |
第七周 | 112/150 | 7/12 | 8小时 | |
第八周 | 83/150 | 8/12 | 6小时 | |
第九周 | 73/150 | 9/12 | 7小时 |