20145315 《信息安全系统设计基础》第14周学习总结

20145315 《信息安全系统设计基础》第14周学习总结

课程内容总结

物理地址和虚拟地址

  • 物理地址:计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有唯一的物理地址。
  • 虚拟寻址:使用虚拟寻址时,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到存储器前被转换为适当的物理地址。

地址空间

  • 一个地址空间的大小是由表示最大地址所需要的位数来描述的。
  • 虚拟存储器的基本思想:允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间。

虚拟存储器作为缓存的工具

  • VM系统将虚拟存储器分割为称为虚拟页的大小固定的块。

  • 物理存储器被分割为物理页(页帧),大小也为P。

  • 在任意时刻,虚拟页面的集合都被分为三个不相交的子集:

    1. 未分配的:没有任何数据与它们相联,不占任何磁盘空间。
    2. 缓存的:当前缓存的物理存储器中的已分配页。
    3. 未缓存的:没有缓存在物理存储器中的已分配页。
  • DRAM缓存的组织结构:

    1. 由于大的不命中处罚,DRAM缓存是全联的。
    2. 与硬件SRAM相比,操作系统对DRAM缓存使用了更加复杂精密的替换算法。
    3. 对磁盘的访问时间很长,DRAM缓存总是使用写回,而不是直写。

页表

页表:将虚拟页映射到物理页。

每次地址翻译 硬件将虚拟地址转换为物理地址时都会读取页表。

页表就是一个页表条目(PTE)的数组。

虚拟地址空间中每个页中一个固定偏移量处都有一个PTE。

DRAM缓存不命中称为缺页。

虚拟存储器作为存储管理工具

VM简化了链接和加载,代码和数据共享,以及应用程序的存储器分配。

虚拟存储器作为存储器保护的工具

SUP位表示进程是否必须运行在内核模式下才能访问该页。READ和WRITE位控制对页面的读和写访问。

如果一条指令违反了这些许可条件,那么CPU就触发一个一般保护故障,将控制传递给一个内核中的异常处理程序。

地址翻译

将一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射。

  • 当前页命中的执行步骤(完全由硬件处理):

    1. 处理器生成虚拟地址,传给MMU
    2. MMU生成PTE地址,并从高速缓存/主存请求得到他
    3. 高速缓存/主存向MMU返回PTE
    4. MMU构造物理地址,并把它传给高速缓存/主存
    5. 高速缓存/主存返回所请求的数据给处理器。
  • 处理缺页(要求硬件和操作系统内核协作完成):

    1. 处理器生成虚拟地址,传给MMU
    2. MMU生成PTE地址,并从高速缓存/主存请求得到他
    3. 高速缓存/主存向MMU返回PTE
    4. PTE中有效位是零,MMU触发异常,传输CPU中的控制到操作系统内核中的缺页异常处理程序。
    5. 缺页异常处理程序确定牺牲页,如果这个页面已经被修改了,则把它换出磁盘。
    6. 缺页异常处理程序调入新的页面,更新存储器中的PTE
    7. 缺页异常处理程序返回原来的进程,再次执行导致缺页的指令。CPU将引起缺页异常虚拟地址重新发送给MMU。因为虚拟页面现在缓存在物理存储器中,所以就会命中。

TLB加速地址翻译

翻译后备缓冲器(TLB):是一个小的、虚拟存储的缓存,其中每一行都保存着一个由单个PTE组成的块,TLB通常具有高度的相关性。

存储器映射

  • 存储器映射:Linux通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容的过程。
  • 一个对象可以被映射到虚拟存储器的一个区域,要么作为共享对象,要么作为私有对象。

存储器动态分配

分配器的两种基本风格:

  • 显示分配器-malloc和free
  • 隐式分配器/垃圾收集器

碎片

虽然有未使用的存储器,但是不能用来满足分配请求时,发生这种现象。

  • 内部碎片:发生在一个已分配块比有效载荷大的时候

  • 外部碎片:发生在当空闲存储器合计起来足够满足一个分配请求,但是没有一个单独的空间块足以处理这个请求时发生。

垃圾收集

垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块被称为垃圾。

自动回收堆存储的过程叫做垃圾收集。

当存在一条从任意根节点出发并到达p的有向路径时,说节点p是可达的,不可达点就是垃圾。

存储器有关错误

  • 间接引用坏指针
  • 读未初始化的存储器
  • 允许栈缓冲区溢出
  • 假设指针和它们指向的对象是相同大小的
  • 造成错位错误
  • 引用指针,而不是它所指向的对象
  • 误解指针运算
  • 引用不存在的变量
  • 引用空堆块中的数据
  • 引起存储器泄露

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/200 1/2 20/20
第二周 30/200 2/4 18/38
第三周 50/200 1/4 22/30
第四周 0/200 0/0 0/30
第五周 100/200 2/2 25/30
第六周 100/200 2/2 25/30
第七周 100/200 1/2 25/30
第九周 100/200 1/2 25/30
第十周 100/200 1/2 25/30
第十一周 100/200 1/2 25/30
第十二周 100/200 1/2 25/30
第十三周 943/200 1/2 25/30
第十四周 0/200 1/2 25/30

参考资料

posted @ 2016-12-18 21:28  君知らない  阅读(197)  评论(1编辑  收藏  举报