zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155302 《信息安全系统设计基础》第11周学习总结

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

    第9章教材学习内容总结

    9.1 物理和虚拟寻址

    1. 物理地址:计算机系统的主存被组织成一个人由M个连续的字节到校的单元组成的数组。每字节都有一个唯一的物理地址。第一个字节的地CPU生成址为0,接下来的字节地址为1,再下一个是2,依次类推。给定这种简单的结构,CPU访问存储器的最自然的方式就是使用物理地址。

    2. 虚拟地址:早期的PC使用物理寻址,而且诸如数字信号处理器,嵌入式微控制器以及Cray超级计算机这样的系统仍然继续使用这种寻址方式。而为通用计算机设计师的现代处理器使用的是虚拟寻址。使用虚拟寻址时,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址(这个过程叫做地址翻译,相关硬件为存储器管理单元MMU)

    9.2 地址空间

    地址空间 (address space) 是一个非负整数地址的有序集合

    如果地址空间中的整数是连续的,那么我们说它是一个线性地址空间 (linear address space)。

    在一个带虚拟存储器的系统中, CPU 从一个有N=2n次方个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间(virtual address space)

    一个地址空间的大小是由表示最大地址所需要的位数来描述的。
    一个系统还有一个物理地批空间 (physical address space),它与系统中物理存储器的M个字节相对应。

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

    虚拟存储器——虚拟页VP,每个虚拟页大小为P=2^平字节
    物理存储器——物理页PP,也叫页帧,大小也为P字节。
    任意时刻,虚拟页面的集合都被分为三个不相交的子集:

    DRAM缓存的组织结构

    总是使用写回而不是直写。

    页表

    页表是一个数据结构,存放在物理存储器中,将虚拟页映射到物理页。有效位+n位地址字段

    虚拟存储器中的局部性

    局部性原则保证了在任意时刻,程序将往往在一个较小的活动页面集合上工作,这个集合叫做工作集/常驻集。

    颠簸:工作集大小超出了物理存储器的大小。

    9.4 虚拟存储器作为存储器管理的工具540

    • 按需页面调度和独立的虚拟地址空间的结合,对系统中存储器的使用和管理造成了深远的影响。特别地,VM简化了链接和加载、代码和数据共享,以及应用程序的存储器分配。
    • 简化链接
    • 简化加载
    • 简化共享
    • 简化存储器分配

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

    • 任何现代计算机系统必须为操作系统提供手段来控制对存储器系统的访问。不应该允许一个用户进程修改它的只读文本段。而且也不应该允许它读或修改任何内核中的代码和数据结构。不应该允许它读或者写其他进程的私有存储器,并且不允许它修致任何与其他进程共享的虚拟页面,除非所有的共享者都显式地允许它这么做(通过调用明确的进程间通信系统调用)。
    • 就像我们所看到的,提供独立的地址空间使得分离不同进程的私有存储器变得容易。但是,地址翻译机制可以以一种自然的方式扩展到提供更好的访问控制。因为每次CPU生成一个地址时,地址翻译硬件都会读一个PTE,所以通过在PTE上添加一些额外的许可位来控制对一个虚拟页面内容的访问十分简单。下图展示了大致的思想。在这个示例中,每个PTE中已经添加了三个许可位。SUP位表示进程是否必须运行在内核超级用户)模式下才能访问该页。

    9.6地址翻译

    形式来说,地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射,

    MAP:VAS到PAS和0

    P543中图9-13a展示了当页面命中时,CPU硬件执行的步骤

    -第一步:处理器生成一个虚拟地址,并把它传送给MMU

    -第二步:MMU生成PTE地址,并从高速缓存/主存请求得到它

    -第三步:高速缓存/主存向MMU返回PTE

    -第四步:MMU构造物理地址,并把它传送给高速缓存/主存

    -第五步:高速缓存/主存返回所请求的数据字给处理器

    9.6.1结合高速缓存和虚拟存储器

    将VM于物理寻址的高速缓存结合起来

    1.VA:虚拟地址

    2.PTEA:页表条目地址

    3.PTE:页表条目

    4.PA:物理地址

    9.6.2利用TLB加速地址翻译

    1.第一步:CPU产生一个虚拟地址

    2.第二步和第三步:MMU从TLB中取出相应的PTE

    3.第四步:MMU将这个虚拟地址翻译成一个物理地址,并且把它发送到高速缓存/主存

    4.第五步:高速缓存/主存将所请求的数据字返回给CPU

    9.6.3多级页表

    注意:
    地址是从上往下增加的

    9.6.4综合:端到端的地址翻译

    TLB

    页表

    高速缓存

    9.7 core i7地址翻译551

    1. PTE有三个权限位,控制对页的访问。R/W位确定页的内容是可以读写的还是只读的。U/S位确定是否能够在用户模式中访问该页,从而保护操作系统内核中的代码和数据不被用户程序访问。XD(禁止执行)位是在64位系统中引入的,可以用来禁止从某些存储器页取指令。这是一个重要的新特性,通过限制只能执行只读文本段,使得操作系统内核降低了缓冲区溢出攻击的风险。
    2. 当MMU翻译每一个虚拟地址时,它还会更新另外外两个内核缺页处理程序会用到的位。每次访问一个页时,MMU都会设置A位,称为引用位。内核可以用这个引用位来实现它的页替换算法。每次对一个页进行了写之后,MMU都会设置D位,又称脏位。脏位告诉内核在拷贝替换页之前是否必须写回牺牲页。内核可以通过调用一条特殊的内核模式指令来清除引用位或脏位。

    9.8 存储器映射

    Linux通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容的过程叫做存储器映射。

    映射对象:

    -1.Unix文件系统中的普通文件

    -2.匿名文件(由内核创建,全都是二进制0)

    一、共享对象和私有对象

    1.共享对象

    共享对象对于所有把它映射到自己的虚拟存储器进程来说都是可见的
    即使映射到多个共享区域,物理存储器中也只需要存放共享对象的一个拷贝。

    2.私有对象

    私有对象运用的技术:写时拷贝

    在物理存储器中只保存有私有对象的一份拷贝

    fork函数就是应用了写时拷贝技术

    9.9动态存储器分配

    分配器有两种:

            - 显式分配器
            - 隐式分配器
    

    9.9.1malloc和free函数

    P563图9-34

    a:程序请求一个4字的块

    b:程序请求一个5字的块

    c:程序请求一个6字的块

    d:程序释放b中分配的那个6字的块

    e:程序请求一个2字的块

    9.9.2为什么使用动态存储器分配

    9.9.3分配器的要求和目标

    显式分配器必须在一些相当严格的约束条件下工作:

    处理任意请求序列

    立即响应请求

    只使用堆

    不修改已分配的块

    目标1:最大化吞吐率

    目标2:最大化存储器利用率

    9.9.4碎片

    内部碎片

    外部碎片

    9.9.5实现问题

    需要考虑下面几个问题:

    空闲块组织

    放置

    分割

    合并

    9.9.6隐式空闲链表

    9.9.7放置已分配的块

    分配器执行搜素方式是由放置策略确定的。

    首次适配

    下一个适配

    最佳适配

    9.9.8分割空闲块

    9.9.9获取额外的堆存储器

    9.9.10合并空闲块

    9.9.11带边界标记的合并

    考虑当前分配器释放当前块时所有可能存在的情况:
    (1)前面的块和后面的块都是已分配的

    (2)前面的块是已分配的,后面的块是空闲的

    (3)前面的块是空闲的,而后面的块是已分配的

    (4)前面的和后面的块都是空闲的

    9.9.12综合:实现一个简单的分配器

    -1.一般分配器设计

    -2.操作空闲链表的基本常数和宏

    -3.创建初始空闲链表

    -4.释放和合并块

    -5.分配块

    9.9.13显式空闲链表

    一种方法是后进先出(LIFO)的顺序维护链表

    另一种方法是按照地址顺序来维护链表

    9.9.14分离的空闲链表

    1.简单分离存储

    2.分离适配

    3.伙伴系统

    9.10 垃圾收集

    应用通过调用 malloc 和 free 来分配和释放堆块。应用要负责释放所有不再需要的已分配块。

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

    自动回收堆存储的过程叫做垃圾收集 (garbage collection)。在一个支持垃圾收集的系统中,应用显式分配堆块,但是从不显示地释放它们。在 C 程序的上下文中,应用调用 malloc,但是从不调用 free。反之,垃圾收集器定期识别垃圾块,并相应地调用 free,将这些块放回到空闲链表中。

    教材学习中的问题和解决过程

    Q:什么是虚拟存储器,作用是什么?

    A:虚拟存储器:在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。

    特点:虚拟内存的作用 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。

    虚拟存储器和虚拟光驱都是使用现有的硬件设备虚拟出的“软设备”,所不同的是,虚拟存储器只是利用现有的硬盘空间分出一份,做存储;而虚拟光驱则不同,它让操作系统认为它不是一个虚拟的设备,而是一个真实的设备,这样,在安装虚拟光驱的时候,就需要加载虚拟光驱的驱动,这个是有些最新的操作系统不完全兼容的,如WIN7,所以在使用虚拟光驱的时候要注意这点,这个不兼容有使系统崩溃的可能

    代码托管

    https://gitee.com/bestiisjava2017/yxc20155302/tree/master/src/信息安全系统设计基础20155302

    学习总结

    虚拟存储器是一个很重要的概念。学习的时候可以把它与虚拟器比较着学,比较它们之间有很多类似的地方,但很多概念又不一样,书上讲的内容有些与操作系统书上的有重叠的地方,但有的地方比操作系统的详细,操作系统侧重将缺页时使用的算法,而《深入理解》书里讲得比较全面,比如一些生成虚拟地址的,以及虚拟地址与物理地址之间相关联的过程。

  • 相关阅读:
    2016-10-17: source insight插件
    Reactor模式通俗解释
    2016-09-19: linux后台运行
    2016-08-16: 检测函数是否存在的C++模板
    2016-08-16: copy-and-swap
    2016-08-15:从YUV420P中提取指定大小区域
    2016-08-15: C++ traits
    2016-08-05:samba服务器配置
    LINQ 根据指定属性名称对序列进行排序
    Resharper
  • 原文地址:https://www.cnblogs.com/STILLlover521/p/7903700.html
Copyright © 2011-2022 走看看