2017-2018-1 2015239 《信息安全系统设计基础》第11周学习总结

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小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

原文地址:https://www.cnblogs.com/lyx1996/p/7965641.html