• 2018-2019-1 20165226 《信息安全系统设计基础》第9周学习总结


    2018-2019-1 20165226 《信息安全系统设计基础》第9周学习总结

    目录


    一、教材学习内容总结

    **** ### 虚拟内存 - 虚拟内存重要性(为什么需要程序员理解它?): - 虚拟存储器是核心的 - 虚拟存储器是强大的 - 虚拟存储器是危险的。 - 虚拟存储器提供的的三个重要能力: - 它的主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效的使用了主存。 - 它为每个进程提供了一致的地址空间,从而简化了存储器管理。 - 它保护了每个进程的地址空间不被其他进程破坏。

    物理和虚拟寻址

    • 物理寻址(PA):主存中每个字节都有唯一的物理地址;依靠此来寻址,就叫做物理寻址

    • 虚拟寻址(VA):CPU生成一个虚拟地址然后用这个地址访问主存,这个虚拟地址在送到存储器之前先被转换成适当的物理地址(这个过程叫做地址翻译)

    地址空间

    • 是一个非负整数地址的有序集合

    虚拟内存作为缓存的工具

    • VM系统将虚拟内存分割为虚拟页,每个虚拟页大小为P=2^p字节。
    • 物理存储被分割为物理页,大小也为P字节。
    • 任意时刻,虚拟页面的集合都被分为三个不相交的子集:
      • 未分配的:VM系统还没分配(创建)的页,不占用任何磁盘空间。
      • 缓存的:当前缓存在物理存储器中的已分配页。
      • 未缓存的:没有缓存在物理存储器中的已分配页。

    页表

    • 将虚拟页映射到物理页。每次地址翻译硬件将一个虚拟地址转换为物理地址时都会读取页表
    • 页表是一个页表条目

    缺页

    • DRAM缓存不命中称为缺页
    • 在磁盘和内存之间传送页的活动叫做交换或者页面调度
    • 页从磁盘换入DRAM和从DRAM换出磁盘;一直等待到不命中发生的时候才换入页面;这种策略被称为按需页面调度

    地址翻译

    • 地址翻译是一个N元素的虚拟地址空间(VAS)中的一个元素和一个M元素的物理地址空间(PAS)之间的映射
    • 所需符号

    利用TLB加速地址翻译

    • CPU产生一个虚拟地址
      • MMU从TLB中取出相应的PTE
      • MMU将这个虚拟地址翻译成一个物理地址,并且将它发送到高速缓存/主存
      • 高速缓存/主存将所请求的数据字返回给CPU

    研究:Intel Core i7/Linux存储器系统

    linux将虚拟存储器组织成一些区域(也叫做段)的集合。一个区域就是已经存在的(已分配的)虚拟存储器的连续片

    • 一个具体区域的区域结构:
      • vm _start:指向这个区域的起始处;
      • vm _end:指向这个区域的结束处;
      • vm _prot:描述这个区域内所包含的所有页的读写许可权限;
      • vm _fags:描述这个区域内的页面是与其他进程共享的,还是这个进程私有的,等等;
      • vm _next:指向链表的下一个结构。
    • Linux缺页异常处理:
      • 看虚拟地址A是否合法?
      • 看试图进行的内存访问是否合法?
      • 处理缺页

    内存映射

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

    对象

    • Unix文件系统中的普通文件
    • 匿名文件(全都是二进制0)

    再看fork函数
    fork函数被当前进程调用时,它创建了当前进程的mm_struct、区域结构和页表的原样拷贝。它将两个进程中的每个页面都为标记只读,并将两个进程中的每个区域结构都标记为私有的写时拷贝。

    再看execve函数
    使用execve函数将a.out程序加载到内存

    • 动态存储器分配

    当运行时需要额外虚拟存储器时,使用动态存储器分配器维护一个进程的虚拟存储器区域。

    • 系统调用malloc函数,从堆中分配块
    • 系统调用free函数来释放已分配的堆块
    • 实现一个简单的分配器
      • 通用分配器设计
      • 操作空闲链表的基本常数和宏
      • 创建初始空闲链表
      • 释放和合并块
      • 分配块

    返回目录

    二、练习

    **** - [实现mypwd](https://www.cnblogs.com/musea/p/10014171.html)

    返回目录

    三、代码托管与统计

    **** [代码托管](https://gitee.com/Sean-Lxs/5226lxs.git) ![](https://img2018.cnblogs.com/blog/1047870/201812/1047870-20181202152647236-118386827.png)

    返回目录

    四、学习进度条

    **** | | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长| | -------- | :----------------:|:----------------:|:---------------: |:-----:| | 目标 | 5000行 | 30篇 | 400小时 | | | 第一周 | 87/87 | 2/2 | 20/20 | | |第二周| 71/158 |1/3|12/32|| |第三周| 100/258 |2/5|13/45|| |第四周|3265/9750|2/7|15/60|| |第五周|282/9786|1/8|8/68|| |第六周|1980/13996|2/10|8/76|| |第七周|488/14484|1/11|8/84|| |第八周|175/15044|3/14|8/92|| |第九周|6400/278403|2/16|10/102||

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:8小时

    • 实际学习时间:10小时

    • 改进情况:

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

    返回目录

    五、参考资料

    **** - [《深入理解计算机系统V3》学习指导]([http://www.cnblogs.com/rocedu/p/5826467.html]) - [Linux 基础入门(新版)_Linux_实验楼 - 实验楼](https://www.shiyanlou.com/courses/1) - [Linux驱动Invalid module format错误解决 - 阿里云 ](https://www.aliyun.com/jiaocheng/213867.html)

    返回目录

  • 相关阅读:
    解决Error:com.intellij.util.indexing.StorageException
    Spring AOP (上)
    spring aop expression简单说明
    Spring AOP 详解
    基于Spring AOP实现对外接口的耗时监控
    JavaEE参考示例 SpringSide 4.0 GA版杀青
    MyBatis学习 之 四、MyBatis配置文件
    MyBatis学习 之 三、动态SQL语句
    MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
    MyBatis学习 之 二、SQL语句映射文件(1)resultMap
  • 原文地址:https://www.cnblogs.com/musea/p/10052257.html
Copyright © 2020-2023  润新知