• 2017-2018-1 学号20155209 《信息安全系统设计基础》第十一周学习总结


    2017-2018-1 学号20155209 《信息安全系统设计基础》第十一周学习总结

    教材学习内容总结

    • 虚拟内存(Virtual Memory)是指在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分对换功能,为用户提供一个比物理主存容量大得多的可寻址的一种“主存储器”。它使用户逻辑存储器与物理存储器分离,是操作系统给用户提供的一个比真实内存空间大得多的地址空间 。

    • 实现虚拟存储器的物质基础是二级存储器结构和动态地址转换机构。经过操作系统的改造,把计算机的内存与外存有机的结合起来使用,从而得到一个容量很大的“内存”,这就是虚存。

    • WX20171203-163535.png

    • 虚拟存储器实质上是把用户地址空间和实际的存储空间区分开来,当作两个不同的概念。它的容量主要受到两方面的限制:(1)指令中表示地址的字长。一个虚拟存储器的最大容量是由计算机的地址结构确定的。如:若CPU的有效地址长度为32位,则程序可以寻址范围是0~232 -1 ,即虚存容量为 4GB。(2)外存的容量。虚拟存储器的容量与主存的实际大小没有直接的关系,而是由主存与辅存的容量之和所确定。

    • 虚拟内存的特征虚拟性。虚拟内存不是扩大实际的物理内存,而是扩充逻辑内存的容量。

    • 分页存储管理方式:在进程开始运行之前,不是装入全部页面,而是装入几个或零个页面,之后根据进程运行的需要,动态装入其它页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。

    • 在虚存映射中,建立了文件到虚存区的映射,那么我们知道数据都是要放到物里内存中才能执行的,为了完成从虚拟内存到物理内存的映射,引入了请页机制。同虚拟存储器一样,物理存储器也被分割为物理页,在X86下这个大小为4K。为了将虚拟页面同物理页面关联起来操作系统使用了页表这个数据结构,它是存在于物理内存中的。对于页表,为了帮助理解,我们可以先把它简单的看做是一个有两列的表格,左边的是虚拟内存的页号,右边是物理内存的页号。

    • 处理器内存地址空间并非全部用于物理内存的访问(DIMM),其中有一部分用于访问PCI设备地址空间。

    • 在段式虚拟存储器系统中,将程序按其逻辑结构划分为段,各个段的长度因程序而异。段式虚拟存储器借助于段表来实现虚地址与实地址的转换。段表中每一行记录了某个段对应的若干信息,包括段号、装入位、段起点和段长等。装入位为1,表示该段已调入主存;装入位为0,则表示该段不在主存中。段表其实本身也是一个段,可以存放在辅存中,但一般存放在主存中。

    • 段页式虚拟存储器是对段式、页式虚拟存储器的综合,它先将程序按其逻辑结构分段,再将每段划分为若干大小相等的页,同时将主存空间划分为同样大小的块。

    • 因为段页式存储管理对逻辑地址进行了两次划分,第一次将逻辑地址划分为若干段,第二次将每个段划分为若干页。因此,要对内存正常寻址,不仅要知道将要访问的地址属于哪个段,也要知道该地址属于该段的哪个页。逻辑页与物理块一一对应,所以需要页表来记录各页对应的块号,且因为每个段都分成了很多页,所以每个段都需要一个页表。同时,作业分成了很多段,为了统一管理,系统需要知道每个段的分页情况,所以又要设置一个段表来记录每个段所对应的页表。

    • 共享对象:一个对象可以被映射到虚拟存储的一个区域,要么作为共享对象,要么作为私有对象。如果一个进程将一个共享对象映射到它的虚拟地址空间的一个区域内,那么这个进程对这个区域的任何写操作,对于那些也把这个共享对象映射到它们虚拟存储器的其他进程而言也是可见的。而且,这此变化也会反映在磁盘上的原始对象中。(IPC的一种方式)

    • 将内存区(Memory Pool)以最小单位(chunk)定义出来,然后区分对象大小分别管理内存,小内存分成若干类(size class),专门用来分配固定大小的内存块,并用一个表管理起来,降低内部碎片(internal fragmentation)。大内存则以页为单位管理, 配合小对象所在的页,降低碎片。设计一个好的存储方案,即metadata的存储,减少对内存的占用。同时优化内存信息的存储,以使对每个size class或大内存区域的访问的性能最优且有上限(bounded limits)。

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

    • 问题一:多级页表如何节省进程页表空间
    • 如果使用简单的一级页表,如果进程使用全部4G线性地址空间,那么将需要高达2^20表项(总共地址线是32位,每页大小为4kb,则页偏移量需要低12位,高20位当作页表地址)来保存表示每个进程的页表,若每项4B,则需要4MB的ram来存储页表。即使一个进程并不使用内的所有地址。
    • 书上提出:使用这种二级模式能够减少每个进程页表所需RAM数量。开始一直没想通,为什么节省了呢?从你最终要存储的表项来看,无论如何你存储的表项是不会少的,而且多级页表还会增加存储开销。
    • 二级表只是从进程的角度来看,为进程节省了页表项(其实所有的页表存储空间增大了)。二级模式通过只为进程实际使用的那些虚拟内存区请求页表来减少页表,就是进程未使用的页暂时可以不用为其建立页表,因为如果使用一级页表的话,你就必须为所有的4G范围内分配页表,不能细分。每个活动进程必须有一个分配给它的页目录,不过没必要马上为进程的所有页表都分配ram,只有在进程实际需要一个页表时才给该页表分配ram,这样就提高了效率。
    • 问题二:如何查看进程发生缺页中断的次数?
    • 用ps -o majflt,minflt -C program命令查看。
      pajflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。
      这两个数值表示一个进程自启动以来所发生的缺页中断的次数。
    • 问题三:发成缺页中断后,执行了那些操作?
    • 当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作:
      1、检查要访问的虚拟地址是否合法
      2、查找/分配一个物理页
      3、填充物理页内容(读取磁盘,或者直接置0,或者啥也不干)
      4、建立映射关系(虚拟地址到物理地址)
      重新执行发生缺页中断的那条指令
      如果第3步,需要读取磁盘,那么这次缺页中断就是majflt,否则就是minflt。

    代码托管

    (statistics.sh脚本的运行结果截图)

    上周考试错题总结

    • 有关计算机存储系统,下面说法正确的是(a、c、d)
      A .
      程序具有良好的局部性表现在倾向于从存储器层次结构中的较低层次处访问数据,这样节省时间
      B .
      存储层次涉用不同容量,成本,访问时间的存储设备
      C .
      存储层次设计基于局部性原理
      D .
      “存储山”是时间局部性和空间局部性的函数
    • 有关RAM的说法,正确的是(a,d,e,g)
      A .
      SRAM和DRAM掉电后均无法保存里面的内容。
      B .
      DRAM将一个bit存在一个双稳态的存储单元中
      C .
      一般来说,SRAM比DRAM快
      D .
      SRAM常用来作高速缓存
      E .
      DRAM将每一个bit存储为对一个电容充电
      F .
      SRAM需要不断刷新
      G .
      DRAM被组织为二维数组而不是线性数组
    • 有关磁盘,说法正确的是(a,c)
      A .
      磁盘的读取时间为毫秒级
      B .
      每张磁盘有一个表面
      C .
      表面由磁道组成
      D .
      每个扇区的面积不同,包含的数据位的数量也不一样
    • 有关磁盘操作,说法正确的是(a,c)
      A .
      对磁盘扇区的访问时间包括三个部分中,传送时间最小。
      B .
      磁盘以字节为单位读写数据
      C .
      磁盘以扇区为单位读写数据
      D .
      读写头总处于同一柱面

    结对及互评

    本周结对学习情况

    - [20155230](http://www.cnblogs.com/J1n233/p/7966436.html)
    - 结对照片
    

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 20/20 1/1 20/20小时
    第二周 50/70 1/2 5/25小时
    第三周 100/170 1/3 10/35小时
    第四周 68/238 1/4 20/55小时
    第五周 40/278 1/5 10/65小时
    第六周 100/378 1/6 10/75小时
    第七周 30/678 1/7 10/85小时
    第八周 200/878 1/8 10/95小时
    第九周 300/1178 1/9 10/105小时
    第十周 278/1456 1/10 10/115小时
    第十一周 307/1763 1/11 10/125小时
    • 计划学习时间:20小时

    • 实际学习时间:10小时

    • 改进情况:

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

    参考资料

  • 相关阅读:
    Mysql中自增字段(AUTO_INCREMENT)的一些常识
    MyBatis动态传入表名
    Linux创建连接命令 ln -s创建软连接
    leaflet 使用turfjs实现前端自定义插值
    java后台@RequestBody和@RequestParam
    在jeecg-boot中密码的使用
    在jeecg-boot中使用代码生成器&mybatis-plus
    Pyppeteer 爬取实战
    【转】GitHub不再支持密码验证解决方案
    【转】pyppeteer+chromium手动安装Mac版本
  • 原文地址:https://www.cnblogs.com/lhyhahaha/p/7966861.html
Copyright © 2020-2023  润新知