虚拟存储器是对主存的一个抽象
支持虚拟存储器的处理器通过使用一种叫虚拟寻址的间接形式来使用主存
处理器产生一个虚拟地址,在被发送到主存之前,这个地址被翻译成一个物理地址
从虚拟地址空间到物理地址空间的地址翻译要求硬件和软件紧密合作
专门的硬件通过使用页表来翻译虚拟地址,而页表的内容是由操作系统提供的
虚拟存储器的三个重要功能:
1,它在主存中自动缓存最近使用的存放磁盘上的虚拟地址空间的内容
虚拟存储器缓存中的块叫做页。对磁盘上页的引用会触发缺页,缺页将控制转移到操作系统中的一个缺页处理程序
缺页处理程序将页面从磁盘拷贝到主存缓存,如果必要,将写回被驱逐的页
2,虚拟存储器简化了存储器管理,进而又简化了链接、在进程间共享数据、进程的存储器分配、以及程序加载
3,虚拟存储器通过在每条页表条目中加入保护位,从而简化了存储器保护
地址翻译的过程必须和系统中任意硬件缓存的操作集成在一起
大多数页表条目位于L1高速缓存中,但是一个称为TLB的页表条目在芯片上的高速缓存,通常会消除访问在L1上的页表条目的开销
现代系统通过将虚拟存储器组块和磁盘上的文件组块关联起来,来初始化虚拟存储器组块,这个过程称为存储器映射
存储器映射为共享数据、创建新的进程以及加载程序,提供了一种高效的机制
应用可以使用mmap函数来手工地创建和删除虚拟地址空间的区域
然而大多数程序依赖于动态存储器分配器,如malloc,它管理虚拟地址空间区域内的一个称为堆的区域
动态存储器分配器是一个有系统级感觉的应用级程序,它直接操作存储器,而无需类型系统的很多帮助
分配器有两种类型:显示分配器要求应用显式地释放它们的存储器块:隐式分配器(垃圾收集器)自动释放任何无用的和不可达的块
对于C程序员来说,管理和使用虚拟存储器是一件困难和容易出错的任务
常见的错误示例包括:间接引用坏指针,读取未初始化的存储器,允许栈缓冲区溢出,假设指针和它们指向的对象大小相同,
引用指针而不是它所指向的对象,误解指针运算,引用不存在的变量,以及引起存储器泄漏
垃圾收集可以追溯到John McCarthy在20世纪60年代早期在MIT开发的Lisp系统
McCarthy独创的Mark&Sweep(标记&清除)算法可以建立在已存在的malloc包的基础之上,为C和C++程序提供垃圾收集
垃圾收集器将存储器视为一张有向可达图,该图的节点被分成一组根节点和一组堆节点
每个堆节点对应于堆中的一个已分配块,有向边p->q意味着块p中的某个位置指向块q中的某个位置
根节点对应于不在堆中的位置,它们中包含着指向堆中的指针
这些位置可以是寄存器、栈里的变量或者是虚拟存储器中读写数据区域内的全局变量
当存在一条从任意根节点出发并到达p的有向路径时,我们说一个节点p是可达的
在任何时刻,和垃圾对应的不可达节点是不能被应用再次使用的
垃圾收集器的角色是维护可达图的某种表示,并通过释放不可达节点并将它们返回给空闲链表,来定期地回收它们
ML和Java这样的语言的垃圾收集器对应用如何创建和使用指针有很严格的控制,能够维护可达图的一种精确的表示,因此也就能够回收所有垃圾
而诸如C和C++这样的语言的收集器通常不能维持可达图的精确表示,这样的收集器也叫保守的垃圾收集器
收集器可以按需提供它们的服务,或者它们可以作为一个和应用并行的独立线程,不断地更新可达图和回收垃圾
Mark&Sweep垃圾收集器由标记阶段和清除阶段组成
标记阶段标记出根节点的所有可达的和已分配的后继,而后面的清除阶段释放每个未被标记的已分配块
典型地,块头部中空闲的低位中的一位用来表示这个块是否被标记了
C程序的Mark&Sweep收集器必须是保守的,其根本原因是C语言不会用类型信息来标记存储器位置
因此,像int或者float这样的标量可以伪装成指针
例如,假设某个可达的已分配块在它的有效载荷中包含一个int,其值碰巧对应于某个其他已分配块b的有效载荷中的一个地址
对收集器而言,是没有办法推断出这个数据实际是int而不是指针
因此,分配器必须保守地将块b标记为可达,尽管事实上它可能是不可达的
分享到:
相关推荐
现代计算机系统通常采用多级内存体系,包括高速缓存(Cache)、主内存(RAM)和虚拟内存。高速缓存用于提高访问速度,主内存是程序运行的主要区域,而虚拟内存则通过硬盘模拟内存,扩展了可用的内存容量。 三、内存...
12.2.1 共享虚拟存储器模型 12.2.2 共享数据对象模型 12.2.3 分布式共享存储器之上的垃圾收集 12.3 与分布式垃圾收集有关的课题 12.3.1 分类原则 12.3.2 同步 12.3.3 鲁棒性 12.4 分布式标记——清扫 12.4.1 Hudak和...
三、存储器结构及虚拟存储器 内容:局部性、存储器层级结构、计算机高速缓存器原理、高速缓存对性能的影响、地址空 间、虚拟存储器、虚拟内存的管理、翻译和映射、TLB、动态存储器分配和垃圾收集 四、链接、进程及...
12.2.1 共享虚拟存储器模型 12.2.2 共享数据对象模型 12.2.3 分布式共享存储器之上的垃圾收集 12.3 与分布式垃圾收集有关的课题 12.3.1 分类原则 12.3.2 同步 12.3.3 鲁棒性 12.4 分布式标记——清扫 12.4.1 Hudak和...
10. **虚拟化技术**:了解虚拟化的基本概念,如虚拟内存、虚拟CPU,以及现代计算机系统中虚拟化技术的应用。 通过学习这个课件,你将能够对计算机的内部运作有更深入的理解,为后续的系统级编程、硬件设计或者系统...
DSM的使用简化了分布式系统中的消息传递协议设计,并有助于垃圾收集器的任务。 分布式垃圾回收算法主要包括基于引用计数和基于跟踪的技术。基于引用计数的技术通过对象的引用计数来识别垃圾,而基于跟踪的技术则是...
首先,计算机硬件基础包括运算器、控制器、存储器、输入设备和输出设备,这些都是构成计算机系统的基础组件。运算器负责进行算术和逻辑运算,而控制器则控制整个系统的运行流程。 数据处理涉及数据的收集、存储、...
3. 操作系统:操作系统是计算机系统的核心,主要知识点包括进程管理、内存管理、文件系统、设备管理和作业调度等。考生需要掌握进程的概念、进程通信、死锁、虚拟内存、磁盘调度策略等。 4. 网络:网络部分通常涵盖...
10. **地址映射**:在虚拟存储器中,地址映射通常由操作系统在程序执行时动态完成。 11. **机器周期**:机器周期通常定义为主存中读取一个指令字的最短时间,因为这是CPU执行指令的基本时间单位。 12. **内外...
计算机硬件是计算机系统的物理组件,包括中央处理器(CPU)、输入设备、输出设备、存储器和辅助存储器等。计算机硬件的发展经历了从大型机到小型机再到微型机的过程。 1. 计算机分类 计算机可以根据其用途和规模...
计算机系统是由硬件和软件两大部分组成的,其中硬件包括中央处理器(CPU)、存储器、输入输出设备等,而软件则涵盖操作系统、应用程序等。 ##### CPU与存储器 - **CPU**: 中央处理器是计算机的大脑,负责执行指令和...
动态存储分配时,地址变换通常需要硬件地址变换机构实现重定位,虚拟存储器则允许程序的逻辑地址超过物理内存的大小。 设备管理是操作系统中的另一个重要方面。设备控制器负责协调CPU与外围设备的并行工作,实现...
计算机组成原理是计算机科学与技术领域的一门基础课程,它主要研究计算机系统中硬件部分的结构、工作原理以及数据在计算机内部的表示和处理方式。本资料包包含了丰富的计算机组成原理学习资源,包括课件和考研相关的...
通过引入STM32F103微控制器以及伺服控制系统,能够有效地将虚拟环境的控制指令转换为具体的机械动作,从而提供更真实和动态的虚拟体验。随着技术的不断进步,动感座椅控制系统将会变得越来越先进,为用户提供更逼真...
《计算机组成原理》是一门深入理解计算机硬件运作的学科,涉及了计算机系统的基本组成和工作原理。考试复习题集中的内容涵盖了多个核心知识点,以下是针对这些题目所涉及的知识点的详细解析: 1. 奇偶校验:奇偶...
在公务员和事业单位的考试中,计算机专业知识是一个重要的部分,涵盖了计算机系统的基础概念、操作系统、软件系统、数据库、计算机网络等多个方面。以下是对这些知识点的详细阐述: 1. **计算机硬件组成**:计算机...
4. 计算机组成原理:计算机系统的组成、CPU结构(运算器、控制器、寄存器)、指令系统、存储器层次结构(高速缓存、主存、外存)。 5. 其他科目:数据库设计与管理、软件工程方法论、编译原理等,需要考生根据具体...
10. 存储程序式计算机:这种计算机结构允许预先编写好的程序存储在内存中,计算机能够自动执行这些程序,由运算器、控制器、存储器、输入和输出设备构成。 以上是计算机导论复习的重点内容,理解这些基础知识对于...
8. **计算机系统结构**:计算机系统由硬件系统和软件系统两部分组成,软件系统又分为系统软件(如操作系统)和应用软件。 9. **操作系统的特征**:并发性、资源共享、虚拟化、异步性是操作系统的典型特征。 10. **...
操作系统是计算机系统的心脏,它管理硬件资源,为应用程序提供服务,并确保系统的稳定和高效运行。本书详细阐述了操作系统设计的关键方面,包括进程管理、内存管理、文件系统、I/O系统以及网络分布式系统等核心主题...