CSAPP 第九章---虚拟内存

news/2024/9/22 14:52:26/

1.为什么需要虚拟内存

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

2.什么是虚拟内存

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

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

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

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

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

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

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

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

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

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

3.虚拟内存中的映射

未完待续。。。。。


http://www.ppmy.cn/news/1434827.html

相关文章

第九章 更复杂的光照

Unity的渲染路径 渲染路径决定了光照是如何应用到Unity Shader中的,需要为每个Pass指定它的渲染路径。 完成上面的设置后,我们可以在每个Pass中使用标签来指定该Pass使用的渲染路径。 指定渲染路径是我们和Unity的底层渲染引擎的一次重要的沟通。 前向渲染路径 前向渲染路…

使用 Flask-WTF 防止跨站请求攻击(CSRF):一份全面指南

在构建 Web 应用时,防止跨站请求攻击(CSRF)是一项至关重要的安全措施。CSRF 攻击允许恶意网站执行未经授权的操作,如用户身份验证或数据篡改。幸运的是,Flask-WTF 库为我们提供了强大的 CSRF 保护功能。在本篇博客中&a…

【御控工业物联网】JAVA JSON结构转换、JSON结构重构、JSON结构互换(5):对象To对象——转换映射方式

御控官网:https://www.yu-con.com/ 文章目录 御控官网:[https://www.yu-con.com/](https://www.yu-con.com/)一、JSON结构转换是什么?二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构…

ElasticSearch(3)

目录 126.ES聚合中的Metric聚合有哪些?如何解释? 127.ES聚合中的管道聚合有哪些?如何理解? 128.如何理解ES的结构和底层实现? 129.ES内部读取文档是怎样的?如何实现的? 130.ES内部索引文档是怎样的?如何实现的?</

ADB 命令大全

Case1&#xff1a;报错Remote couldnt create file&#xff1a;Read-only file system 输入 adb disable-verity adb reboot adb root adb remount Case2&#xff1a;/system/bin/sh: cant create C:xxx.txt: Read-only file system Android设备的文件系统是基于Linux的&…

值得关注,采用 Rust 自研内核的 DragonOS,具有 Linux 兼容性的操作系统。

大家好&#xff0c;我是渔夫。 今天分享&#xff0c;一个采用 Rust 语言开发的内核 DragonOS。 DragonOS 龙操作系统&#xff0c;主要面向云计算轻量化场景&#xff0c;完全自主内核的&#xff0c;提供 Linux 二进制兼容性的64位操作系统。 DragonOS 提供优秀完善的架构设计&am…

Linux系统IO

Linux系统中的IO函数主要包括两大类&#xff1a;标准C库中的函数和Linux系统调用。这些函数可以用于文件操作、网络通信、设备控制等多种IO任务。以下是Linux系统中常用的IO函数和系统调用的概述&#xff1a; 标准C库IO函数 这些函数是高级的、封装好的&#xff0c;并且与操作…

docker-compose搭建MongoDB

代码实现 新建文件 docker-compose-MongoDB.yml&#xff0c;复制以下代码 version: 2.2services:mongodb:image: mongo:4.4container_name: mongodbrestart: alwaysports:- "27017:27017"environment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD…