标签:
重要知识点
虚拟存储器
现代系统提供的一种对主存的抽象概念。虚拟存储器是异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。其拥有三种重要的能力:
虚拟寻址
CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。将物理地址装换成虚拟地址的任务叫做地址翻译。CPU芯片上交错存储器管理单元的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表内容由操作系统管理。
页面的调度
这部分在操作系统课程中老师已经做了详细的讲解,这里就不多加赘述了。
Linux的虚拟存储器
Linux将虚拟存储器组织成一些区域(也叫段)的集合。一个区域就是已存在着的(已分配的)虚拟存储器的连续片,这些页是以某种方式相关联的。
Linux缺页异常处理
当MMU试图翻译某个虚拟地址A时,触发一个缺页时。这个异常导致控制转移到内核的缺页处理程序,处理程序随后就执行以下步骤:
存储器映射
Linux通过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射。
虚拟存储器区域可以映射到两种类型的对象:
存储器映射给我们提供了一种清晰的映射机制,用来控制多个进程共享对象。
动态存储器分配
动态存储器分配器维护着一个进程的虚拟存储器区域,称为堆。分配器将堆视为一组不同大小的块的集合来维护的。每个块就是一个连续的虚拟存储器片,要么是已分配的,要么是空闲的。
分配器有两种基本风格
使用动态存储器分配的重要原因:这种分配方式直到程序实际运行时,它们才知道某些数据结构的大小,可以有效地利用存储器资源。
碎片
有未使用的存储器但不能满足分配请求的现象称为碎片。碎片由两种形式:
分配器常见放置策略
分配器的数据结构
分离存储
一种减少分配时间的方法,就是维护多个空闲链表,其中每个链表中的块都有大致相等的大小。
基本分离存储的方法:
垃圾收集
垃圾收集器是一种动态存储分配器,它自动释放程序不在需要的已分配块。这些块称为垃圾。自动回收堆存储的过程叫做垃圾收集。垃圾收集器将存储器视为一张有向的可达图。该图的节点被分成一组根节点和一组堆节点。每个堆节点对应于堆中的一个已分配块。
C语言中常见的与存储器有关的错误
参考资料
《深入理解计算机系统》第9章虚拟存储器
标签:
原文地址:http://www.cnblogs.com/Ntime/p/5043732.html