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

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

    教材学习内容总结

    理解虚拟存储器的概念和作用

    • 虚拟存储器(Virtual Memory),是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完善交互,它为每个进程提供一个大的,一致的,私有地址空间。通过一个清晰的机制,虚拟存储器提供了三个要重的能力:
    • 作用
      (1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的利用了主存;

    (2)它为每个进程提供了一致的地址空间,从而简化了存储器管理;

    (3)它保护每个进程的地址空间不被其他进程破坏。

    理解地址翻译的概念

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

    理解存储器映射

    • 定义:
      Linux通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容的过程叫做存储器映射。
    • 使用mmap函数的用户级存储器映射
      1.创建新的虚拟存储器区域
     #include <unistd.h>
       #include <sys/mman.h>
       void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
                                      成功返回指向映射区域的指针,若出错则为-1
    

    参数含义:

    • start:这个区域从start开始
    • fd:文件描述符
    • length:连续的对象片大小
    • offset:距文件开始处的偏移量
    • prot:访问权限位,具体如下:
    • PROT_EXEC:由可以被CPU执行的指令组成
    • PROT_READ:可读
    • PROT_WRITE:可写
    • PROT_NONE:不能被访问
    • flag:由描述被映射对象类型的位组成,具体如下:
    • MAP_ANON:匿名对象,虚拟页面是二进制0
    • MAP_PRIVATE:私有的、写时拷贝的对象
    • MAP_SHARED:共享对象

    掌握动态存储器分配的方法

    -.堆:动态存储器分配维护着一个进程的虚拟存储器区域,称为堆。
    假设它是一个请求二进制0的区域,紧接在未初始化的bss区域后开始,并向上(更高的地址)生长。有一个变量brk指向堆的顶部

    • 分配器的两种基本风格:
      a.显示分配器-malloc和free
      b.隐式分配器/垃圾收集器
    • malloc和free函数:
      .系统调用malloc函数,从堆中分配块:
    .#include <stdlib.h>
    void *malloc(size_t size);
                        // 返回:成功则为指针,指向大小至少为size字节的存储器块,失败则为NULL
    //系统调用free函数来释放已分配的堆块:
    #include <stdlib.h>
    void free(void *ptr);
                         // 无返回值
    //ptr参数必须指向一个从malloc、calloc或者reallov获得的已分配块的起始位置。
    
    ###理解垃圾收集的概念
    
    - 垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块被称为垃圾,自动回收堆存储的过程叫做垃圾收集。
    - 垃圾收集器将存储器视作一张有向可达图,只有当存在一条从任意根节点出发并到达p的有向路径时,才说节点p是可达的,而不可达点就是垃圾。
    ###了解C语言中与存储器有关的错误
    1.间接引用坏指针
    常见错误——scanf错误
    2.读未初始化的存储器
    常见错误——假设堆存储器被初始化为0
    3.允许栈缓冲区溢出
    常见错误——缓冲区溢出错误
    4.假设指针和它们指向的对象是相同大小的
    在远处起作用action at distance
    5.造成错位错误
    6.引用指针,而不是它所指向的对象
    7.误解指针运算
    8.引用不存在的变量
    9.引用空堆块中的数据
    10.引起存储器泄露
    
    
    
    
    
    ## 教材学习中的问题和解决过程
    
    ## 上周考试错题总结
    - 有关Socket端口和Linux命令,下面说法正确的是()
    A	.	
    可以用 echo /etc/services查看
    B	.	
    使用 netstat -pan|grep 80可以查看哪些进程占用了80端口
    C	.	
    可以使用lsof -i:80查看哪里些进程占用了80端口
    D	.	
    可以用sudo /etc/init.d/service start|stop|restart 启动|停止|重启系统服务
    E	.	
    可以用netstat -pa 查看所有的服务端口(LISTEN,ESTABLISHED)
    F	.	
    ps -aux | grep pid 可以查看绑定某端口的进程号为pid的进程的详细情况
    正确答案: A B C D E F  
    - 有关Web服务器的说法,正确的是()
    A	.	
    Web服务器可以提供静态和动态内容
    B	.	
    Web服务器返回的静态内容由URL标识
    C	.	
    /.../app?150&21传递的内容由app可执行文件产生,150和21是调用参数
    D	.	
    最小的URL后缀“/”,会被扩展成类似“/index.html”的默认主页
    正确答案: A B C D  
    
    - 有关套接字接口函数open_clientfd()、open_listenfd(),下面说法正确的是()
    A	.	
    这两个函数中open_clientfd()只可以用于客户端编程 
    B	.	
    这两个函数中open_clientfd()可以用于客户端和服务器端编程
    C	.	
    这两个函数中open_listenfd()只可以用于服务器端编程
    D	.	
    open_clientfd()中的port参数是客户端的端口
    E	.	
    open_clientfd()中的port参数是服务器端的端口
    F	.	
    open_clientfd()返回的clientfd可以有Unix I/O接口读写
    G	.	
    open_listenfd()返回的listenfd可以有Unix I/O接口读写
    正确答案: A C E F  
    ## 结对及互评
    
    ### 点评模板:
    - 博客中值得学习的或问题:
        - xxx
        - xxx
        - ...
    - 代码中值得学习的或问题:
        - xxx
        - xxx
        - ...
    - 其他
    
    ### 本周结对学习情况 
        - [结对同学学号1](博客链接)
        - 结对照片
        - 结对学习内容
            - XXXX
            - XXXX
            - ...
    
    ## 其他(感悟、思考等,可选)
    
    xxx
    xxx
    
    ## 学习进度条
    
    |            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
    | --------   | :----------------:|:----------------:|:---------------:  |:-----:|
    | 目标        | 5000行            |   30篇           | 400小时            |       |
    | 第一周      | 200/200           |   2/2            | 20/20             |       |
    | 第二周      | 300/500           |   2/4            | 18/38             |       |
    | 第三周      | 500/1000          |   3/7            | 22/60             |       |
    | 第四周      | 300/1300          |   2/9            | 30/90             |       |
    
    
    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
    
    参考:[软件工程软件的估计为什么这么难](http://www.cnblogs.com/xinz/archive/2011/04/05/2005978.html),[软件工程 估计方法](http://www.cnblogs.com/xinz/archive/2011/04/06/2007294.html)
    
    - 计划学习时间:XX小时
    
    - 实际学习时间:XX小时
    
    - 改进情况:
    
    (有空多看看[现代软件工程 课件 
    软件工程师能力自我评价表](http://www.cnblogs.com/xinz/p/3852177.html))
    ## 参考资料
    -  [《深入理解计算机系统V3》学习指导]([http://www.cnblogs.com/rocedu/p/5826467.html])
    -  ...
  • 相关阅读:
    如何理解python中的if __name__=='main'的作用
    如何在阿里云上部署war包到tomcat服务器
    如何在windows上部署war包到tomcat服务器
    解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错
    python3中的unicode_escape
    python中的excel操作
    python的logging模块
    python中的SMTP发送邮件
    python中的字符串
    一道问题引出的python中可变数据类型与不可变数据类型
  • 原文地址:https://www.cnblogs.com/l97----/p/7967927.html
Copyright © 2011-2022 走看看