热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:20182019120165330《信息安全系统设计基础》第十一周学习总结

本文由编程笔记#小编为大家整理,主要介绍了2018-2019-1 20165330 《信息安全系统设计基础》第十一周学习总结相关的知识,希望对你有一定的参考价值。 学习目标理解虚拟存储器的概念和作用理
本文由编程笔记#小编为大家整理,主要介绍了2018-2019-1 20165330 《信息安全系统设计基础》第十一周学习总结相关的知识,希望对你有一定的参考价值。



学习目标



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

  • 理解地址翻译的概念

  • 理解存储器映射

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

  • 理解垃圾收集的概念

  • 了解C语言中与存储器有关的错误


学习内容


虚拟存储器


  1. 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址

  2. 物理寻址:CPU访问内存的最自然的方式就是使用物理地址
    技术分享图片

  3. 现代处理器使用是的虚拟寻址:CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址。
    技术分享图片

  4. 地址空间

    • 一个地址空间的大小是由表示最大地址所需要的位数来描述的。例如:一个包含N=2^n个地址的虚拟地址空间就叫做一个n位地址空间。

    • 一个系统还有一个物理地址空间,对应于系统中物理内存的M个字节


  5. 缓存

    • 虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,磁盘上数组的内容被缓存在主存中。

    • VM系统通过将虚拟内存分割成虚拟页大小固定的块作为传输单元,每个虚拟页的大小为P=2^p字节

    • 物理内存被分割成物理页,大小也为P字节(页帧)

    • 技术分享图片

    • DRAM缓存表示虚拟内存系统的缓存,它在主存中缓存虚拟页。


  6. 存储器映射:将虚拟地址映射到物理地址空间
    技术分享图片


地址翻译


  1. 地址翻译是一个N元素的虚拟地址空间中的元素和一个M元素的物理地址空间中元素之间的映射:MAP:VAS→PAS∪?
    技术分享图片

  2. n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移和一个(n-p)位的虚拟页号
    技术分享图片


动态内存分配



  1. 在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法

  2. 创建虚拟内存区域

    #include
    #include
    void *mmap(void *start,size_t length,int prot,int flag,int fd,off_t offset);
    返回:若成功时则指向映射区域的指针,若出错则为MAP_FAILED(-1)。


  3. 删除虚拟内存的区域

    #include
    #include
    int munmap(void *start,size_t length);
    返回:若成功则为0,若出错则为-1。


  4. 动态内存分配器维护着一个进程的虚拟内存区域成为堆,分配器将堆视为一组不同大小的块的集合来维护,每个块就是一个连续的虚拟内存片。空闲块保持空闲,直到它显式地被应用所分配;一个已分配的块保持已分配状态,直到它被释放。

  5. 分配块

    • malloc函数

      #include
      void *malloc(size_t size);
      返回:若成功则为已分配块的指针,若出错则为NULL。


    • sbrk函数

      #include
      void *sbrk(intptr_t incr);
      返回:若成功则为旧的brk指针,若出错则为-1。



  6. 释放已分配的块

    #include
    void free(void *ptr);



垃圾收集


  1. 在显示分配器中,应用通过调用mallocfree来分配和释放堆块,应用要负责释放所有不再需要的已分配块。

  2. 未能释放已分配的块是一种常见的编程错误

  3. 垃圾收集器:一种动态内存分配器,它自动释放程序不再需要的已分配块,这些块被称为垃圾。

  4. 垃圾收集:自动回收堆存储的过程

  5. 垃圾收集器定期识别垃圾块,并相应地调用free,将这些块放回到空闲链表中

  6. 将一个C程序的垃圾收集器加入到已存在的malloc包中
    技术分享图片








推荐阅读
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
author-avatar
头都大了66
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有