2017-2018-1 20155318 《信息安全系统设计基础》第十一周学习总结
教材学习内容总结
学习目标
- 理解虚拟存储器的概念和作用
- 理解地址翻译的概念
- 理解存储器映射
- 掌握动态存储器分配的方法
- 理解垃圾收集的概念
- 了解C语言中与存储器有关的错误
教材学习
-
物理和虚拟地址
-
虚拟寻址:使用虚拟地址时,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译。就像异常处理一样,地址翻译需要CPU硬件和操作系统之间的紧密合作。CPU芯片上叫做存储器管理单元的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容是由操作系统管理的。
-
在任意时刻,虚拟页面的集合都分为三个不相交的子集:
-
未分配的:VM系统还未分配(或者创建)的页。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。(没有调用malloc或者mmap的)
-
缓存的:当前缓存在物理存储中的已分配页。(已经调用malloc和mmap的,在程序中正在引用的)
-
未缓存的:没有缓存在物理存储器中的已分配页。(已经调用malloc和mmap的,在程序中还没有被引用的)
-
地址空间是一个非负数地址的有序集合:如果地址空间的整数是连续的,那么我们说它是一个线性地址空间。那么一个拥有虚拟寻址的CPU,也就会有一个虚拟地址空间。内存中的一个字节,就会有一个物理地址和一个虚拟地址。如果CPU有N个虚拟地址空间,那么该字节就有N个虚拟地址
-
虚拟存储器作为缓存的工具
-
虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址是作为到数组的索引的。磁盘上数据的内容被缓存在主存中。和存储器层次结构中其他缓存一样,磁盘上的数据被分割成块,这些块作为磁盘和主存之间的传输单元。
-
将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法称作存储器映射
-
使用页表进行地址翻译
-
CPU中的一个控制寄存器,页表基址寄存器(PTBR)指向当前页表。n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移和一个(n-p)位的虚拟页号。MMU利用VPN来选择适当的PTE(页表条目,一个页表其实就是多个页表条目的数组)。
-
虚拟存储器作为存储器保护的工具
-
现代操作系统都严格限制普通应用程序访问自己的只读数据和别进程的数据,还有操作系统的内核部分。所以虚拟存储器可以在页的开始部分设置几个标志位,用于标明这个进程是系统进程还是用户进程。如果某一天指令违反了这个条件,那么CPU就触发一个异常。Unix外壳一般将这种异常报告为“段错误segmentation fault”
-
动态存储器分配malloc:分配在虚拟存储器中的区域,这个区域可能已经在内存中了,也可能在磁盘上
教材及代码学习中的问题和解决过程
- 问题1:虚拟存储器的作用是什么?
- 问题1解决方案:
- 虚拟存储器是中心的:它是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的交互中心
- 虚拟存储器是强大的:它可以创建和销毁存储器片、可以映射存储器片映射到磁盘某个部分等
- 虚拟存储器若操作不当则十分危险
代码托管
上周考试错题总结
1. ( 多选题 | 1 分)
Unix/Linux中,对于代码fd=open("foo",O_WRONLY,0766),umask=022,下面说法正确的是()
A.进程对foo是只写的
B.同组成员能写foo
C.使用者可以执行foo
D.任何人都可以写foo
正确答案: A C 你的答案: A B C D
解析:九个权限可以用0777表示,07(使用者)7(同组成员)7(其他人)
7(111)(读:写:执行),文件实际权限是mode&~mask
2. ( 多选题 | 1 分)
关于open(2),下面说法正确的是( )
A.flag 参数中O_RDONLY,O_WRONLY,O_RDWR至少要有一个
B.O_RDONLY|O_WRONLY == O_RDWR
C.fd=open("foo.txt",O_WRONLY|O_APPEND,0),调用write(fd,buff,n)写入foo.txt的数据不会破坏已有数据。
D.fd=open("foo.txt",O_WRONLY|O_APPEND,0644),必将导致其他人不能写foo.txt
正确答案: A C 你的答案: A C D
解析:熟悉umask命令, open第三个参数实际是mode & ~umask
3. ( 多选题 | 1 分)
Linux中下列概念中可以用Unix I/O处理的是()
A.普通文件
B.设备文件
C.目录
D.套接字
正确答案: A B C D 你的答案: A C D
4. 输入输出是针对()来讲的?
A.CPU
B.主存
C.I/O设备
D.计算机
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
其他(感悟、思考等)
本周通过学习虚拟存储器的相关知识,对于计算机系统中存储器部分又有了更深一步的了解。虚拟存储器在现代操作系统中作用很重要
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 3/3 | |
第二周 | 100/100 | 1/2 | 3/6 | |
第三周 | 300/400 | 1/3 | 4/10 | |
第四周 | 0/400 | 2/5 | 2/12 | |
第五周 | 25/425 | 1/6 | 4/16 | |
第六周 | 181/606 | 3/9 | 10/26 | |
第七周 | 201/807 | 2/11 | 7/33 | |
第八周 | -(包括脚本无意义)/6719 | 2/13 | 7/40 | |
第九周 | 396/7115 | 3/16 | 4/44 | |
第十周 | 1160/8275 | 2/18 | 4/49 | |
第十一周 | 135/8410 | 3/21 | 5/54 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:5小时
-
实际学习时间:5小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)