《深入理解计算机系统》(9)内存管理

news2024/11/23 17:15:48

1、物理和虚拟寻址

  • 物理寻址
    • 主存被组织成一个由 M 个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址。CPU 访问内存最自然的方式就是使用物理地址,称为物理寻址。
    • 下图是一个物理寻址的示例,该示例的上下文是一个加载指令,它读取从物理地址4开始的4个字节,并将它返回给CPU,CPU会将它放在一个寄存器里。
      在这里插入图片描述
    • 早期的PC、嵌入式微处理器DSP等仍然使用的是物理寻址的方式。
  • 虚拟寻址
    • 现代 CPU 使用的是虚拟寻址:CPU 通过生成一个虚拟地址(VA)来访问主存,这个虚拟地址首先通过地址翻译转换为物理地址
      在这里插入图片描述
    • 地址翻译需要 CPU 硬件和操作系统之间的紧密合作。CPU 芯片上名为内存管理单元(MMU)的专用硬件利用存放在主存中的查询表来动态翻译虚拟地址

2、地址空间

  • 地址空间(address space)
    地址空间是一个非负整数地址的有序集合:{0, 1, 2, …}
  • 线性地址空间(linear address space)
    地址空间中的整数是连续的
  • 虚拟地址空间(virtual address space)
    在计算机系统中,CPU 从一个有 N=2^n 个地址的地址空间中生成虚拟地址空间{0, 1, 2, … ,N-1} 。一个地址空间的大小是由表示地址的位数来描述的,例如现代的 64 位计算机一般支持 64 位虚拟地址空间。
  • 物理地址空间(physical address space)
    对应系统中物理内存的M个字节:{0, 1, 2, … ,M-1},M不要求是2的幂,但我们假设M=2^m。

3、虚拟内存作为缓存的工具

  • 虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。
  • 磁盘上的数组内容被缓存在主存中。和存储器层次结构中的其他缓存一样,磁盘(较低层)中的数据被分割成,作为磁盘和主存(较高层)之间的传输单元。
  • 类似的,物理内存被分割为物理页(PP),大小也是 P 字节。物理页也被称为页帧
  • 任何时刻,所有的虚拟页都被分为了三个不相交的子集:
    • 未分配的:VM 系统还未分配(未创建)的页。未分配的块没有任何数据与它们相关联,因此不占用任何磁盘空间。
    • 已缓存的:当前已缓存在物理内存中的已分配页。
    • 未缓存的:未缓存在物理内存中的已分配页。
      在这里插入图片描述
      图中展示了一个有8个虚拟页的小虚拟内存。虚拟页0和3还没有被分配,即在磁盘中不存在。虚拟页1、4和6被缓存在物理内存中。虚拟页2、5和7已经被分配,但并未缓存在主存中。

3.1、DRAM缓存的组织结构

  • 主存一般采用 DRAM,DRAM 与磁盘之间的速度差要比 SRAM 与 DRAM 之间的速度差大很多,并且从磁盘的一个扇区读取第一个字节的时间开销比读这个扇区中的连续字节要慢很多。因此 DRAM 缓存的组织结构与高速缓存有很大不同。
  • 因为严重的不命中处罚和访问第一个字节的开销,虚拟页一般很大,通常在 4KB~2MB,且 DRAM 缓存是全相联的,即任何虚拟页都可以放在任何的物理页中。不命中时的替换策略也很重要。
  • 因为访问磁盘很慢,所以 DRAM 都采用写回(即延时写),而非直写。

3.2、页表

  • VM 系统需要判定一个虚拟页是否缓存在 DRAM 中的某个地方,如果是需要确定虚拟页存放在哪个物理页中,如果不是需要判断虚拟页存放在磁盘的哪个位置;在 DRAM 中选择一个牺牲页并把虚拟页从磁盘复制到 DRAM 中替换这个牺牲页。
  • 这些功能由操作系统软件、MMU 中的地址翻译硬件、页表共同完成:
    • 页表(Page Table)是一个存放在 DRAM 中的数据结构,它将虚拟页映射到物理页
    • 每次地址翻译硬件将一个虚拟地址转换为硬件地址时都会读取页表。
    • 操作系统负责维护页表的内容,以及在磁盘和 DRAM 间传送页。
  • 页表是一个 页表条目(Page Table Entry,PTE) 构成的数组,虚拟地址空间中的每个页在页表中的一个固定偏移量处都有一个 PTE。可以认为 PTE 由一个有效位和一个 n 位地址字段组成。有效位表明该虚拟页是否被缓存在 DRAM 中。
    在这里插入图片描述
  • 对于三种不同的页,其页表条目的内容不同:
    • 已缓存的页: 有效位=1,n 位地址字段表示该页在 DRAM 中相应的物理页的起始地址。
    • 未缓存的页: 有效位=0,n 位地址字段表示该虚拟页在磁盘上的起始地址。
    • 未分配的页: ss有效位=0,地址字段为空。

3.3、页命中

在这里插入图片描述

  • 当 CPU 要读取上图中的 VP2 就会发生页命中
  • 地址翻译硬件使用虚拟地址作为索引从页表中查找相应的页表条目,然后读取条目中的内容来获取该虚拟页在 DRAM 中的物理地址。

3.4、缺页

在这里插入图片描述

  • DRAM 缓存不命中称为缺页。如 CPU 要读取上图中的 VP3 时,会从页表条目的有效位发现该页没有被缓存。
  • 当发生缺页会触发一个缺页异常。缺页异常会调用内核中的缺页异常处理程序,该程序会从已缓存的页中选择一个牺牲页。如果该牺牲页之前已经被修改,内核会先将它复制回磁盘(即写回),然后内核会占用它的物理页并修改它的页表条目为未缓存的。(注意下图指向VP4的PTE中的有效位置为0了)
    在这里插入图片描述
  • 缺页异常处理完成后,会重新启动导致缺页的指令,该指令重新进行对该虚拟地址的操作。
  • 一些概念
    • 在磁盘和内存之间传送页的活动叫做交换(swapping)或者页面调度(paging)。
    • 页从磁盘换入DRAM和DRAM换出磁盘。
    • 一直等待,直到有不命中发生时才换出页面的策略称为按需页面调度,该策略被所有现代系统使用。

3.5、分配页面

  • 初始的虚拟地址空间中的虚拟页基本都是未分配的,当调用了 malloc 就会分配一个或一些新的虚拟页,这些页指向磁盘上的对应页面
    在这里插入图片描述

3.6、又是局部性救了我们

  • 虚拟内存利用了局部性,局部性原则保证了在任意时刻,程序将趋向于在一个较小的活动页面集合(称为工作集)上工作。
  • 通过将活动页面集合(称为工作集)缓存到 DRAM 中来减少出现缺页的情况。
  • 如果工作集的大小超出了 DRAM 的大小,程序将会发生抖动,页面会不断地换进换出
  • 根据本节内容可以区分主存缓存与各高速缓存的组织结构的不同之处:
    • 高速缓存将地址位划分为有效位、标记位、组索引位、块偏移位,通过组选择行匹配字抽取来完成对数据的操作。
    • 主存采用了 VM 系统,使用页表来实现对数据的查找。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

群载波应急广播主机的应用

一、 概述 群载波主机是专为山洪灾害预警、气象预警、地质灾害预警设计的一款智能IP群载波主机。该群载波主机可通过网络实现与控制中心通讯,用户可实时远程控制功放的开关机状态以及检测设备的主要信息。群载波主机主要用于接收网络信号,与控制中心通讯…

如何在Ubuntu系统中添加硬盘

这里写自定义目录标题 一. 安装磁盘二. 查看和新建硬盘分区2.1 查看硬盘分区2.2 创建硬盘分区 三. 分区格式化四. 分区挂载到目录五. 配置启动挂载 众所周知,在Linux系统中有一个著名的说法,即”一切皆文件“。包括磁盘在内的各种连接到系统的设备都用文…

视频怎么实现倒放?分享这3个方法给大家!

如果你曾经想过将自己喜欢的视频倒放播放,你可能会发现这是一项相当具有挑战性的任务。尽管许多视频播放器提供了倒放功能,但有时候这些功能可能不够灵活,甚至根本不支持倒放。在本文中,我们将介绍几种可帮助你倒放视频的方法。 …

减噪 低振纹|拓尔微TMI8421打印机马达驱动解决方案

打印机作为现代办公不可或缺的设备为我们的工作带来了便利,但也会遇到一些”鸡肋“问题,如产生噪音或机器发热等问题,不仅无法高效的打印文件资料还会给安静的办公室环境带来噪音干扰,打乱工作思绪...... 一台高效稳定且减噪的打…

langchain源码阅读系列(三)之Chain模块

原文首发于博客文章langchain源码阅读 本节是langchian源码阅读系列第三篇,下面进入Chain模块👇: LLM 应用构建实践笔记 Chain链定义 链定义为对组件的一系列调用,也可以包括其他链,这种在链中将组件组合在一起的想…

Python中读取与写入文件时的编码方式

在《Python中文件的读取》与《Python中文件的写入》中提到通过文件对象调用read()函数和write()函数实现文件的读写。以上方法能够正确地取或写入英文时,当要读写的内容是中文时,则需要考虑编码方式。 1 读取已经存在的数据 1.1 创建文件 创建一个txt…

【码银送书第二期】《高并发架构实战:从需求分析到系统设计》

很多软件工程师的职业规划是成为架构师,但是要成为架构师很多时候要求先有架构设计经验,而不做架构师又怎么会有架构设计经验呢?那么要如何获得架构设计经验呢? 一方面可以通过工作来学习,观察所在团队的架构师是如何…

nginx脚本,Nginx变量截取字符串,拼接字符串,nginx打印日志,添加修改HTTP请求头,添加修改HTTP响应头

nginx变量 nginx变量命名,以$开头。 举例:nginx.conf 文件中有下面这一行配置:set $var "hello world";特点:我们看到,Nginx 变量名前面有一个 $ 符号,这是语法上的要求强调:所有的 Nginx 变量在 Nginx 配…

热门实践丨如何结合实际业务进行 ECS 规格选型与容量验证

作者:赵佳佳 随着云原生技术的蓬勃发展以及云产品价格愈发低廉,越来越多 Geek 开发者、技术爱好者选择 OSS 对象存储、ECS 云服务器等基础产品构建自己的网站、网盘等应用。但对于企业而言,面对种类与规格的丰富的 ECS 云服务器,…

【网络原理之三】应用层协议HTTP和HTTPS

HTTP什么是HTTP工作过程协议格式协议内容HTTP请求MethodURLURL的encode和decode Version请求报头请求正文 HTTP响应状态码响应报头 HTTPSHTTPS执行过程加密对称加密非对称加密 证书 HTTP 什么是HTTP HTTP:超文本传输协议。是一种应用非常广泛的应该层协议。 所谓 “…

Mybatis应用(3)——mybatis框架使用 mybatis项目应用初步 mybatis使用报错集锦

目录 引出mybatis框架使用1.导包:mybatis包分页的包pom.xml文件【war包】1.导包:mybatis包分页的包pom.xml文件【jar包】2.resources下配置mybatis-config.xml文件,以及log4j.properties文件3.在resources下建文件4.在UserMapper中写SQL myba…

若依v3.2问题解决:菜单路由不匹配 / 跳转路由页面空白

问题1解决方法 问题2解决方法 问题1 菜单路由不匹配 ,在菜单管理中匹配代码中的相应组件,可是在页面上总是报匹配错误,下面是报错情况和相关数据库 解决方法 因为店铺管理是一个目录,而店铺详情和店铺列表是菜单,路…

UC伯克利LLM排行榜(Chatbot Arena Leaderboard)再更新!GPT-4稳居第一,Vicuna-33B登顶开源模型第一

UC伯克利LLM排行榜(Chatbot Arena Leaderboard)再更新!GPT-4稳居第一,Vicuna-33B登顶开源模型第一 文章目录 1. LMSYS ORG更新「LLM排位赛」2. 全新评价机制:MT-Bench2.1 为什么选择 MT-Bench?2.2 用LLM评…

Vue 常用指令 v-bind 绑定动态值

v-bind 用于动态绑定一个或多个属性值,或者向另一个组件传递props值(这个后面再介绍),应用场景:图片地址src、超链接href、动态绑定一些类、样式等等 绑定超链接 v-bind作用在属性上面绑定动态值。 v-bind 指令后接收一个参数,以冒号分割。v…

MySQL 第二天作业 操作表和用户权限

一、1.创建数据库 Market,在 Market 中创建数据表customers,customers表结构如表4.6所示,按要求进行操作。 (1)创建数据库Market。 create database Market;(2)创建数据表customers,在c_num字段上添加主键…

ModaHub魔搭社区:如何在 Jupyter Notebook 用一行代码启动 Milvus Lite?

目录 轻量版 Milvus 能做什么? 如何在 Jupyter Notebook 中使用向量数据库? 随着各种大语言模型(LLM)的涌现和 AI 技术变得越来越普遍,大家对于向量数据库的需求也变得越来越多。作为大模型的记忆体,向量…

【新星计划Linux】——常用命令(1)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.常用命令 1.Linux的基本原则: 用户接口: 2.命令形…

多肽中间体:23927-13-1,Cyclo(-D-Ala-D-Ala),3,6-二甲基-2,5-哌嗪二酮,的解析说明

Cyclo(-D-Ala-D-Ala),3,6-二甲基-2,5-哌嗪二酮,(3R,6R)-二甲基-哌嗪-2,5-二酮,(3R,6R)-3,6-二甲基哌嗪-2,5-二酮产品结构式: 产品规格: 1.CAS号:23927-13-1 2.分子式:C6H10N2O2 3.分子量&#x…

xNIDS-解释基于深度学习的网络入侵检测系统实现自动入侵响应

文章目录 AbsIntroMotivation and ChallengesExplaining Detection Results of DL-NIDS目标近似历史输入围绕历史记录输入进行采样捕捉特征之间的依赖关系模型开发 Generating Defense Rules防御规则范围Defense Rule Scope安全性约束 Security Constraint统一防御规则 Unified…

仅个人记录 CMX复现

文章解析(214条消息) CMX: Cross-Modal Fusion for RGB-X SemanticSegmentation with Transformers_cmx: cross-modal fusion for rgb-x semantic segment_翰墨大人的博客-CSDN博客 代码 GitHub - huaaaliu/RGBX_Semantic_Segmentation 一、 环境配置 conda create -n rgbx…