2017-2018-1 2015239 《信息安全系统设计基础》第11周学习总结
未完待续
学习目标
- 理解虚拟存储器的概念和作用
- 理解地址翻译的概念
- 理解存储器映射
- 掌握动态存储器分配的方法
- 理解垃圾收集的概念
- 了解C语言中与存储器有关的错误
教材学习内容总结
理解虚拟存储器的概念和作用
首先要明白什么是物理内存?
物理内存是代码和数据在其中运行的窗口
我理解的概念如下:
内存一般是作业多作业多,但内存小,以及执行过程中只是把当前运行需要的那部分程序和数据装入内存。为解决此矛盾,操作系统把各级存储统一管理起来。把一个程序当前正在使用的部分放在内存,其余部分放在磁盘上,就启动执行它。操作系统根据程序执行时的要求和内存的实际使用情况,随机地对每个程序进行换入/换出。所以就给用户提供一个比正式的内存空间大的多的地址空间,这就是虚拟存储器。
我理解的虚拟储存器作用:
虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。比如电脑只有128MB物理内存,当读取一个容量为300M的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内存里储存的文件释放到原来的安装目录里了。
地址翻译的概念
- 形式上来说,地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)之间的映射。MAP:VAS→PAS∪空集。
(1)其中MAP=A',如果虚拟地址A处的数据在PAS的物理地址A'处。
(2)MAP = ∅ ,如果虚拟地址A处的数据不在物理内存中。
- CPU中的一个控制寄存器,页表基址寄存器(PTRB)指向当前页表。
- n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移(VPO)和一个(n-p)位的虚拟页(VPN)。
- MMU利用VPN选择适当的PTE。
- 当页面命中时,CPU硬件执行的步骤:
(1)处理器生成一个虚拟地址,传给MMU。
(2)MMU生成PTE地址,并从高速缓存/主存请求得到它。
(3)高速缓存/主存向MMU返回PTE。
(4)MMU构造物理地址,并把它传给高速缓存/主存。
(5)高速缓存/主存返回所请求的数据给处理器。
- 处理缺页时要求硬件和操作系统协调完成,步骤如下:
(1)处理器生成一个虚拟地址,传给MMU。
(2)MMU生成PTE地址,并从高速缓存/主存请求得到它。
(3)高速缓存/主存向MMU返回PTE。
(4)PTE中有效位为0,触发缺页异常。
(5)确定牺牲页。
(6)调入新页面,更新PTE。
(7)返回原来的进程,再次执行导致缺页的指令。
地址空间
内存地址分为以下三种:
- 逻辑地址:
包含在机器语言指令中用来指定一个操作数或一条指令的地址。这种寻址方式在80x86著名的分段结构中表现得尤为具体,它促使windows程序员把程序分成若干段。每个逻辑地址都由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离。
-线性地址也称虚拟地址
是一个32位无符号整数,可以用来表示高达4GB的地址(2的32次方即32根地址总线寻址)。线性地址通常用十六进制数字表示,值的范围从0x00000000到0xffffffff。
- 物理地址
用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚按发送到内存总线上的电信号相对应。物理地址由32位或36位无符号整数表示。
这三种地址之间的转换:
逻辑地址-->(分段)-->线性地址-->(分页)-->物理地址
分页的实现:
基本概念:
页:线性地址被分成以固定长度为单位的组,称为页。
页框:把所有RAM分成固定长度的内存区域,也叫物理页。每个页框包含一个页,也就是说页框的长度和页的长度一致。页框是一个存储区域,页是一个数据块,可以存放在任何页框和磁盘中。
页表:把线性地址映射到物理地址的数据结构。
Linux采用了一种同时适用于32位和64位系统的普通分页模型。
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码调试中的问题和解决过程
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1及原因,理解情况
- 错题2及原因,理解情况
- ...
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [结对同学学号1](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)