CSAPP 第九章---虚拟内存

2024-04-25 03:52

本文主要是介绍CSAPP 第九章---虚拟内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.为什么需要虚拟内存

        在第八章我们了解了进程的概念。在计算机系统中,多个进程会共享CPU和内存,当某个进程需要过多的内存空间,那么另外的某个进程可能就会因为无法获得足够的内存空间而无法运行。此外,当某个进程不小心把数据写入另一个进程的内存空间,就会造成令人头疼的问题。虚拟内存能有效避免以上问题。

2.什么是虚拟内存

        在计算机操作系统中,虚拟内存是对主存储器(DRAM)的一种抽象,其为每个进程提供了一个大的、统一的和私有的地址空间。

        大的:因为虚拟内存是映射关系,所以虚拟内存的最大空间就是CPU的最大寻址空间,不受内存大小的限制,能提供比内存更大的地址空间

        统一的:虚拟内存将物理地址映射成一个连续的地址空间,同时将每个进程的地址空间分隔开,使得每个进程都以为自己独享地址空间。同时提供了统一的内存管理机制。

        私有的:每个进程都有自己的虚拟地址空间,相互分隔,且进程只能访问自己的虚拟地址空间的内存。此外,映射是针对每个进程独立进行的。因此,不同进程的相同虚拟地址可能对应不同的物理地址。

那么,为什么虚拟内存是对主存储器(DRAM)的抽象,而不是高速缓存(SRAM)的抽象呢?

  • 容量和成本考虑:主存储器(DRAM)通常拥有大容量但速度较慢,适合用于存储大量数据和地址空间管理,而高速缓存(SRAM)容量较小但速度更快,更适合存储近期频繁访问的数据。

  • 访问延迟和速度差异:高速缓存(SRAM)用于提供快速访问速度,而虚拟内存技术涉及整个地址空间的管理,包括将数据从磁盘加载到主存储器中,这需要处理大量的地址映射和页面置换操作,与主存储器(DRAM)的访问速度更匹配。

  • 抽象层次:虚拟内存提供了对地址空间的抽象,使得进程感觉自己拥有连续的地址空间,而不必关心实际的物理内存地址。这种抽象更适合用于主存储器(DRAM),因为它是整个系统内存的主要存储区域,与处理器的高速缓存子系统的低层缓存层次不同。

虚拟内存有以下三个重要功能:

  • 将主存储器作为磁盘的缓存,只保留主存中的活跃区域并根据需要不断地在两者之间传输数据;
  • 为每个进程提供统一的地址空间,从而简化内存管理;
  • 保护每个进程的地址空间不被其他进程所破坏。

3.虚拟内存中的映射

未完待续。。。。。

这篇关于CSAPP 第九章---虚拟内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933634

相关文章

C语言-第九章:文件读写

传送门:C语言-第八章:指针进阶 目录 第零节:准备工作  第一节:文件的简单介绍         1-1.绝对路径与相对路径         1-2.文件的作用 第二节:文件操作         2-1.打开文件         2-2.关闭文件         2-3.读操作                 2-3-1.fgetc 读取一个字符

第九章 软件维护

第九章  软件维护 软件维护:在软件交付使用后,为了改正错误或满足新的需要而进行修改软件的过程。 软件维护活动类型总起来大概有四种: 纠错性维护(校正性维护)、适应性维护、完善性维护或增强、预防性维护或再工程。

内存管理篇-21 虚拟内存管理:线性映射区

1.线性映射区的定义         这部分讲线性映射区的内容。一般老的嵌入式平台,它内存很小只有几百兆,都会直接把整个物理内存映射到线性映射区了,只有当物理内存大于1GB以上,线性映射区无法cover的时候就把剩下的放到高端内存。所以这个区域是最简单的。         线性映射区一般是指内核空间的某个部分,直接映射到低端内存的区域。并且他们之间是线性映射的。         PAGE_O

[学习笔记]《CSAPP》深入理解计算机系统 - Chapter 3 程序的机器级表示

总结一些第三章的一些关键信息 Chapter 3 程序的机器级表示结构 updating... Chapter 3 程序的机器级表示 局部变量通常保存在寄存器中,而不是内存中,访问寄存器比内存快的多. 有些时候,局部数据必须存放在内存中, 寄存器不足够存放所有的本地数据对一个局部变量使用地址运算符 &, 因此必须能够为它产生一个地址某些局部变量是数组或结构,因此必须能够通过数组或

解密虚拟内存0x400000以下的地方

一. 前言   最近看CSAPP时,对以前没有仔细注意的一处知识盲区产生了兴趣,所以进行了深入研究,并写下此文一记录。 二. 问题   二话不说直接上图。下图是CSAPP第七章的虚拟内存分析图。书中提到 在X86-64位Linux系统中,代码段总是从地址0x400000处开始,后面是数据段。堆在数据段之后,通过调用malloc向上增长…   但是0X400000以下呢?为什么没有

【Arm Cortex-X925】 -【第九章】-L2 内存系统

9. L2 内存系统 Cortex®-X925 核心的 L2 内存系统通过 CPU 桥接器将核心与 DynamIQ™ Shared Unit-120 连接。它包括私有的 L2 缓存。 L2 缓存是统一的,并且对集群中的每个 Cortex®-X925 核心都是私有的。 以下表格显示了 L2 内存系统的特点。 9.1 L2 缓存 集成的 L2 缓存处理来自指令和数据侧的指令和数据请求,以及

第九章 【桥梁】 Apifox

第九章 【桥梁】 Apifox Apifox Apifox 是集 API 文档、API 调试、API Mock、API 自动化测试多项实用功能为一体的 API 管理平台,定位为 Postman + Swagger + Mock + JMeter。旨在通过一套系统、一份数据,解决多个工具之间的数据同步问题。只需在 Apifox 中定义 API 文档;API 调试、API 数据 Mock、API

内存管理篇-20 Linux虚拟内存管理

1.虚拟地址的经典布局          这里的内容比较少。只要就是内核用户空间的划分。内核空间又有自己的划分。也需要注意一下每个区域的性能。理论上线性映射是最简单的,所以性能最高。同时,注意内核空间是可以配置的,并不是都3:1。       2.ARM32下的内存布局         经典内部布局的基本结构页很重要。user_space -> pdg->.text ... .bss

CSAPP Data Lab

CSAPP 的第一个 Lab,对应知识点为书中的第 2 章(信息的表示与处理),要求使用受限制的运算符和表达式实现一些位操作。主要分为两个部分:整数部分和浮点数部分。其中整数部分限制较多,比较偏重技巧性,部分题个人认为很有难度。而浮点数部分则比较基础,主要考察对 IEEE 754 标准的熟悉程度,代码较长,但思路相对简单。 bitXor 思路 使用德-摩根定律进行推导,推导过程如下: 代

第九章 抽象类 接口

9.1 abstract 概述 类中有相似方法,但是又有不同,此方法应定义为抽象方法,类也必须为抽象类。 特点: 1)方法只有声明没有实现 2)抽象类不可以被实例化 3)抽象类的子类必须覆盖其所有抽象方法才能被实例化 9.2 抽象类细节 1)有构造函数,用于其子类实例化 2)抽象类可以不包含抽象方法,目的是不让该类被实例化 (eg:AWT Adapter) 3)不能与abs