zoukankan      html  css  js  c++  java
  • 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

    参考资料

  • 相关阅读:
    Effective C++ 33 避免遮掩继承而来的名称
    求子数组之和的最大值——编程之美 2.14 扩展问题 正确实现
    数据结构快速回顾——平衡二叉树 AVL (转)
    位运算符 优先级 折半搜索
    关于 二维数组指针
    C++中的单例模式(转)
    C# ThreadStart和ParameterizedThreadStart区别
    C# 实现数字字符串左补齐0的两种方法
    C# 窗口自适应窗口宽度和高度
    C# 在多线程环境中,进行安全遍历操作
  • 原文地址:https://www.cnblogs.com/5315hejialei/p/6195618.html
Copyright © 2011-2022 走看看