【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射

存储器怎么存储数据、内存空间分区、虚拟地址转换

计算机的存储器:寄存 缓存 内存 外存(按功能划分)

计算机的处理器需要一个存储器来存储大量的指令和数据以便自己不断取指执行和访问数据。

  1. 内存(内存就是运行内存,如手机的8G运行内存,电脑的16G运行内存)就是这个存储器。但是由于处理器访问内存需要的时间太长,而处理器处理指令的速度远大于从内存取指令的时间,
  2. 为了使取指令和执行指令的速度同步,在这两个硬件之间添加了高速缓存存储事先从内存调过来的指令以方便处理器更快取到指令。但是内存数据掉电就被清除。鲲鹏处理器采用经典的三级缓存结构:L1\L2\L3。
  3. 为长久保存数据和程序又增加了外存,当需要程序时把程序从外存中调到内存中再被处理器访问以执行,外存就是指电脑中的固态磁盘(Windows系统中的CDEF盘就是)或者机械硬盘(买的一小疙瘩硬盘)。
    在上述的存储器中,越靠近CPU的存储器被处理器访问的速度就越快,制造成本也就越高,容量也就越来越少。
    存储器硬件类型:让处理器可以访问到任何位置而不需要顺序地访问的 RAM(Random Access Memory)
  • 用作计算机高速缓存的SRAM。是双稳态存储,只要不掉电存储信息可以恒定保持。
  • 用作内存的DRAM,是电容存储信息,在不掉电情况下也需要时时给容易漏电的电容充电来保持数据。
处理器访问内存工作原理

事先准备:处理器通过总线连接到内存,总线有3种:地址总线传输要访问的地址;数据总线用来传输要交换的数据;控制总线传输处理器给内存的控制信号(读/写)。以读操作为例:

  1. 待访问的内存地址被处理器的寄存器保存着,再发送到地址总线;
  2. 处理器通过控制总线发送读命令;
  3. 内存根据地址总线的地址读出对应内存单元内容,再通过数据总线发送到处理器的寄存器中。
处理器上的虚拟地址转换为物理地址后发送给内存

在上述读操作中,处理器寄存器存储的地址一般是虚拟地址(逻辑地址),要在把虚拟地址发送到总线之前把虚拟地址转换成物理地址,内存管理单元MMU完成这个转换。这个内存管理单元硬件模块就在处理器当中。除转换地址,还可以进行访问权限的控制以及转址旁路缓存。
对地址转换过程进行配置的寄存器

  1. 控制内存管理单元MMU的使能的SCTLR
  2. 虚拟地址的位数和转换粒度(页大小)的TCR
  3. 存放页表基址(在地址转换中起到定位·页表的作用)的TTBR
    注:每一个异常级别都有一套独立的地址转换机制。
ARMv8架构支持的虚拟地址最大有多大,这么大怎么分区
  1. 最大支持48位虚拟地址、48位物理地址、可寻址256TB的地址空间。
  2. 虚拟地址被分为两个区域:内核空间和用户空间。这两个虚拟空间大小分别可以由TCR_EL1寄存器的T1SZ和T0SZ来配置。通常配置成相同大小。这两个的页表基址分别保存在页表基址寄存器TTBR1_EL1和TTBR0_EL1中。而物理内存大小也可以通过寄存器配置。
  3. 当两者空间大小一致(如T1SZ=T0SZ=39,即二者各有2**39=512G的地址空间),其分区如下:

虚拟空间布局以及地址转换

地址转换过程

内存管理单元MMU地址转换过程如下:

  1. CPU核发送虚拟地址给内存前被内存管理单元截获;
  2. MMU根据虚拟地址查询页表;
  3. 如果找到页表中有对应物理地址,用这个物理地址去访问内存;
  4. 没找到触发MMU异常Fault,硬件地把异常原因和该映射异常的虚拟地址分别保存在寄存器异常综合表征寄存器(ESR)和异常地址寄存器(FAR)当中。
虚拟地址的映射方式

在虚拟内存中,内存被划分为固定大小的页(或页面),通常是以4KB或者更大的大小(可以用TCR_EL1寄存器设置页面大小)进行划分。即每一页有多个虚拟地址,为了加速到物理地址的映射,把这些页分别划归到不同的表中,再把这些表划归到不同的块中,这被称为多级页表。此时用页表遍历单元负责多级页表中的地址转换,也加入了缓存模块TLB存储最近访问的映射关系。
映射关系的存储:通过描述符来存储映射关系。描述符都是64位,最开始的两位存储描述符种类,有块描述符、表描述符、页描述符。这些描述符里保存的信息主要包括:下一级的页表的基址、以及下一级页表的访问权限(如该异常等级下页表有没有权限读/写),其他信息如下一级页表是否保存在安全内存中、该页表是否第一次被访问、该页表是否被缓存。

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

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

相关文章

java web 校园健康管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web校园健康管理系统是一套完善的java web信息管理系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…

宠物空气净化器怎么挑选?猫用空气净化器品牌性比价推荐

作为一个养猫家庭的主人,每天都要面对一个挑战——清理猫砂盆。那种难以形容的气味实在让人受不了。尤其是家里有小孩和老人,他们偶尔可能会出现过敏性鼻炎等问题,而抵抗力较差的人更容易受到影响。此外,一到换毛季节,…

【基础算法练习】二分模板

文章目录 二分模板题二分的思想C 版本的二分整数二分模板 Golang 版本的二分整数二分模板 例题:在排序数组中查找元素的第一个和最后一个位置题目描述C 版本代码Golang 版本代码 二分模板题 704. 二分查找,这道题目是最经典的二分查找,使用于…

Spring依赖注入之setter注入与构造器注入以及applicationContext.xml配置文件特殊值处理

依赖注入之setter注入 在管理bean对象的组件的时候同时给他赋值,就是setter注入,通过setter注入,可以将某些依赖项标记为可选的,因为它们不是在构造对象时立即需要的。这种方式可以减少构造函数的参数数量,使得类的构…

天津大数据培训班推荐,数据分析过程的常见错误

大数据”是近年来IT行业的热词,目前已经广泛应用在各个行业。大数据,又称海量信息,特点是数据量大、种类多、实时性强、数据蕴藏的价值大。大数据是对大量、动态、能持续的数据,通过运用分析、挖掘和整理,实现数据信息…

生产力工具|卸载并重装Anaconda3

一、Anaconda3卸载 (一)官方方案一(Uninstall-Anaconda3-不能删除配置文件) 官方推荐的方案是两种,一种是直接在Anaconda的安装路径下,双击: (可以在搜索栏或者使用everything里面搜…

Windows10上通过MSYS2编译FFmpeg 6.1.1源码操作步骤

1.从github上clone代码,并切换到n6.1.1版本:clone到D:\DownLoad目录下 git clone https://github.com/FFmpeg/FFmpeg.git git checkout n6.1.1 2.安装MSYS2并编译FFmpeg源码: (1).从https://www.msys2.org/ 下载msys2-x86_64-20240113.exe &#…

超优秀的三维模型轻量化、格式转换、可视化部署平台!

1、基于 HTML5 和 WebGL 技术,可在主流浏览器上进行快速浏览和调试,支持PC端和移动端 2、自主研发 AMRT 展示框架和9大核心技术,支持3D模型全网多端流畅展示与交互 3、提供格式转换、减面展UV、烘焙等多项单模型和倾斜摄影模型轻量化服务 4、…

Java实现对系统CPU、内存占用率的控制

背景:由于使用的业主的云资源,由于使用率低,会不持续的缩减服务器配置。为了避免后续由于新业务上线,需要更多资源的时候,无法再次获得资源(回收容易,申请难)。 问题:怎…

Git学习笔记(第9章):国内代码托管中心Gitee

目录 9.1 简介 9.1.1 Gitee概述 9.1.2 Gitee帐号注册和登录 9.2 VSCode登录Gitee账号 9.3 创建远程库 9.4 本地库推送到远程库(push) 9.5 导入GitHub项目 9.6 删除远程库 9.1 简介 9.1.1 Gitee概述 众所周知,GitHub服务器在国外,使用GitHub作为…

3.1集合-Set+集合-list

一、数据结构 1.1什么是数据结构 数据结构就是用来装数据以及数据与之间关系的一种集合,如何把相关联的数据存储到计算机,为后续的分析提供有效的数据源,是数据结构产生的由来。数据结构就是计算机存储、组织数据的方式。好的数据结构&…

数据结构·单链表

不可否认的是,前几节我们讲解的顺序表存在一下几点问题: 1. 中间、头部的插入和删除,需要移动一整串数据,时间复杂度O(N) 2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗 3. 增容一般是2倍的增…

01、领域驱动设计:微服务设计为什么要选择DDD总结

目录 1、前言 2、软件架构模式的演进 3、微服务设计和拆分的困境 4、为什么 DDD适合微服务 5、DDD与微服务的关系 6、总结 1、前言 我们知道,微服务设计过程中往往会面临边界如何划定的问题,不同的人会根据自己对微服务的理 解而拆分出不同的微服…

Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载

目录 搭建 TFTP 服务文件下载更多内容 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号…

解决TortoiseGit软件Git Show log时显示Too many files to display的问题

1 问题描述 有时代码提交修改的文件比较多,当查看log时无法显示出来修改的文件列表,如下所示: 2 解决方法 将LogTooManyItemsThreshold尽可能配置得大一些。 三 参考资料 https://gitlab.com/tortoisegit/tortoisegit/-/issues/3878

C++补充篇- C++11 及其它特性

目录 explicit 关键字 左值和右值的概念 函数返回值当引用 C11 新增容器 - array C的类型转换 static_cast reinterpret_cast dynamic_cast const_cast C智能指针 auto_ptr 使用详解 (C98) unique_ptr 使用详解 (C11) auto_ptr的弊端 unique_ptr严谨auto_ptr的弊端 unique_…

JVM实战(30)——模拟堆内存溢出

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

ME51N屏幕增强——添加历史订单价格字段

参考: 资料:SAP所有模块用户出口(User Exits) _coopa003-CSDN博客 SAP ABAP常用增强记录文档_sap自动过账增强-CSDN博客 https://www.cnblogs.com/zyhcs/p/15759434.html 需求: 增加给OA传输接口的字段。 采购申请增加历史价格显示。 已经…

Android 水印效果

Android 水印效果 本文主要介绍下android 中水印的实现效果. 实现的方式有多种,就不一一赘述了, 本文就是通过自定义drawable来实现水印. 不多说,直接上代码吧: import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; i…

【QT+QGIS跨平台编译】之七:【libjpeg+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libjpeg介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libjpeg介绍 libjpeg是一个广泛使用的jpeg图像压缩和解压的函数库,采用 C 语言开发。 2013年1月,Independent JPEG Group发布了版本9,对新引入的无损编码模式进行了改进。2022年1月,发布了版…