2017-2018-1 20155323 《信息安全系统设计基础》第11周学习总结
2017-2018-1 20155323 《信息安全系统设计基础》第11周学习总结
教材学习内容总结
虚拟存储器
物理和虚拟寻址
- 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址。CPU根据物理地址访问存储器的方式是物理寻址。
- 虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。
- 使用虚拟寻址时,CPU通过生成一个虚拟地址VA来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址,地址翻译通过CPU芯片上的存储器管理单元完成。
地址空间
- 线性地址空间:地址空间中的整数是连续的。
- 虚拟地址空间:CPU从一个有 N=2^n 个地址的地址空间中生成虚拟地址,这个地址空间成为称为虚拟地址空间。
- 地址空间的大小:由表示最大地址所需要的位数来描述。
- 物理地址空间:与系统中的物理存储器的M个字节相对应。
- 虚拟存储器的基本思想:主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。
虚拟存储器作为缓存的工具
- 虚拟存储器——虚拟页VP,每个虚拟页大小为P=2^平字节。
- 物理存储器——物理页PP,也叫页帧,大小也为P字节。
页表
- 页表是一个数据结构,存放在物理存储器中,将虚拟页映射到物理页,就是一个页表条目的数组。
- 页表的组成:有效位+n位地址字段。
- 如果设置了有效位:地址字段表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页。
- 如果没有设置有效位:
空地址:表示该虚拟页未被分配
不是空地址:这个地址指向该虚拟页在磁盘上的起始位置。
页命中
- 当CPU读取一个字的时候,地址翻译硬件将虚拟地址作为一个索引来定位PTE,并从存储器中读取它。
虚拟存储器作为存储器管理的工具
- 操作系统为每个进程提供了一个独立的页表,也就是一个独立的虚拟地址空间。
- 抖个虚拟页面可以映射到同一个共享物理页面上。
- 存储器映射:将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法。
虚拟存储器作为存储器保护的工具
- PTE的三个许可位:
SUP:表示进程是否必须运行在内核模式下才能访问该页
READ:读权限
WRITE:写权限
地址翻译
- 一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)之间的映射。
- CPU中的一个控制寄存器页表基址寄存器指向当前页表,n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移(VPO) 和一个(n-p)位的虚拟页号,页表条目中的物理页页号和虚拟地址中的VPO串联起来,就得到了相应的物理地址。
fork函数
- 当fork函数被当前进程调用时,内核为新进程创建各种数据结构,并分配给它一个唯一的PID。为了给这个新进程创建虚拟存储器,它创建了当前进程的mm_struct、区域结构和页表的原样拷贝。它将两个进程中的每个页面都为标记只读,并将两个进程中的每个区域结构都标记为私有的写时拷贝。
- 当fork在新进程中返回时,新进程现在的虚拟存储器刚好和调用fork时存在的虚拟存储器相同。当这两个进程中的任一个后来进行写操作时,写时拷贝机制就会创建新页面,因此,也就为每个进程保持了私有地址空间的抽象概念。
C程序中常见的与存储器有关的错误
- 间接引用无效指针
- 读未初始化的存储器(Reading Uninitialized Memory)
- 栈缓冲区溢出(Allowing Stack Buffer Overflows)
- 误以为指针和它们指向的对象是相同大小的。(Assuming that Pointers and the Objects They Point to Are the Same Size)
- 造成错位错误(Making Off-by-One Errors)
- 引用指针,而不是它所指向的对象(Referencing a Pointer Instead of the Object It Points to)
- 误解指针运算(Misunderstanding Pointer Arithmetic)
- 引用不存在的变量(Referenceing Nonexistent Variables)
- 引用空闲堆块中的数据(Referencing Data in Free Heap Blocks)
- 引起内存泄露(Introducing Memory leaks)
教材学习中的问题和解决过程
问题1:虚拟地址和虚拟内存的区别
解答:
使用了分页机制之后,4G的地址空间被分成了固定大小的页,每一页或者被映射到物理内存,或者被映射到硬盘上的交换文件中,或者没有映射任何东西。CPU用来把虚拟地址转换成物理地址的信息存放在叫做页目录和页表的结构里,使用cpu中的MMU(内存管理单元)转换。
由于每个进程有自己的页目录和页表,所以每个进程的地址空间映射的物理内存是不一样的。两个进程的同一个虚拟地址处(如果都有物理内存映射)的值一般是不同的,因为他们往往对应不同的物理页。
而虚拟内存和虚拟地址几乎没有关系,前者就是拿硬盘空间当做内存空间欺骗进程。
代码托管
结对及互评
本周结对学习情况
20155314刘子健
- 结对学习内容
第九章
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 50/50 | 1/1 | 5/5 | |
第二周 | 100/100 | 1/2 | 5/10 | |
第三周 | 100/200 | 1/3 | 5/15 | |
第四周 | 100/300 | 1/4 | 5/20 | |
第五周 | 100/400 | 1/5 | 5/25 | |
第六周 | 100/500 | 1/6 | 5/30 | |
第七周 | 100/600 | 1/7 | 5/35 | |
第八周 | 200/700 | 1/8 | 5/40 | |
第九周 | 200/900 | 1/9 | 5/45 | |
第十周 | 200/1100 | 1/10 | 5/50 | |
第十一周 | 200/1300 | 1/11 | 5/55 |