计算机一次取数过程分析

news2025/7/23 13:11:01

计算机一次取数过程分析

1 取址过程

CPU由运算器和控制器组成,其中控制器中的程序计数器(PC)保存的是下一条指令的虚拟地址,经过内存管理单元(MMU),将虚拟地址转换为物理地址,之后交给主存地址寄存器(MAR),从主存中取出这条指令,通过主存数据寄存器(MDR)交给指令寄存器(IR),IR再将其转化成控制信号。

在这里插入图片描述

2 间址过程

一条指令由 <操作码,寻址方式,地址码> 几部分组成,寻址方式共有以下十种

  • 隐含寻址
  • 立即寻址
  • 直接寻址
  • 间接寻址
  • 寄存器寻址
  • 寄存器间接寻址
  • 相对寻址
  • 基址寻址
  • 变址寻址
  • 堆栈寻址

根据有效地址(EA)或立即数所处的位置,可以分为以下三类

在寄存器:隐含寻址、寄存器寻址

在立即数:立即寻址

在主存:直接寻址、间接寻址、寄存器间接寻址、相对寻址、基址寻址、变址寻址、堆栈寻址

而无论哪种方式得到的有效地址(EA)同样也是虚拟地址


接下来要解决以下两个问题

问题一:虚拟地址如何转为物理地址?

问题二:如何访问该物理地址?


3 虚拟地址转为物理地址

3.1 单级页表系统

在分页管理的操作系统中,将主存分为一个个页框,操作系统会建立页表这种数据结构,负责虚拟页号和主存页框号的映射。

在这里插入图片描述

虚拟地址由 <页号,页内偏移量> 两部分组成,根据页号去查询页表,然后将页表中的页框号和页内偏移量组成物理地址。

例如页表部分内容如下,虚拟地址为00123366H,按字节编址,虚拟地址格式为<页号12位,页内偏移量20位>

在这里插入图片描述

在这里插入图片描述

根据虚拟地址中的001H,找到1号页表项,其页框号为521H,拼接上页内偏移量后即可得到物理地址52123366H。

但是如果想要查询页表,也要知道页表的起始地址,页表的地址保存在进程控制块(PCB)中,当CPU调度该进程时,会将PCB中的页表起始地址放入页表基址寄存器中,页表起始地址为物理地址

同时,为了解决页表项过多导致一个页框中放不下的问题,引入了多级页表。为了减少访存次数引入了快表(TLB)。

3.2 二级页表系统

在使用多级页表的32位操作系统中(以二级页表为例),虚拟地址被分成了 <页目录号,页号,页内偏移量> 三部分,例如在下图虚拟地址格式下虚拟地址为10801008H,页目录项和页表项长度均为4字节,按字节编址。

在这里插入图片描述

在这里插入图片描述

10801008H,其页目录号是66,页号是1,因此根据页目录号为66找到页目录项,其中的页框号是00301H,找到对应的页表所在页框,然后拼接上页号找到页号页表项对应的物理地址00301004H(这里因为一个页目录项是4B),页表中的页框号是98521H,拼接上页内偏移量,最终的物理地址为98521008H。

3.3 二级页表系统+快表

快表的实现基于相联存储器,是一种静态随机存取存储器(SRAM),使用的存储元是双稳态触发器,存取速度快。

在使用TLB的系统中,虚拟地址向物理地址的转换一般先查询快表(或者快表慢表一起查询),如果快表命中,可以直接获得页框号,再和页内偏移量组合,得到物理地址。

快表的映射方式有两种,为全相联映射和组相联映射,至于为什么不使用直接映射,在讨论完全相联映射和组相联映射后再讨论。

全相联映射

使用全相联映射的TLB中

TLB的格式为 <标记位,有效位,页框号>

此处的标记位即虚拟页号,若虚拟地址格式为 <页目录号(10位),页号(10位),页内偏移量(12位)>

TLB的标记位是虚拟地址中的页目录号+页号组成的虚拟页号

在这里插入图片描述

因为TLB是使用硬件电路实现的,全部TLB标记可以并行对比。

例如虚拟地址为10801008H,TLB使用全相联映射,虚拟地址格式为<页目录号(10位),页号(10位),页内偏移量(12位)>,TLB部分内容如下图所示

在这里插入图片描述

查询TLB表,10801H与虚拟页号一致,且有效位为1,因此可以直接得到页框号00001H,与页内偏移量008H拼接得到物理地址为00001008H,若未命中则回到上文中的查询二级页表的过程,且更新快表。

组相联映射

使用组相联映射的TLB格式如为 <标记位,有效位,页框号>,虚拟地址格式为 <标记位,组号,页内偏移量>,标记位+组号就是虚拟页号,同页目录号+页表号

例如二路组相联的TLB,其中共有32行,分成16组(用4位二进制表示),若虚拟地址为10801008H,虚拟地址格式为<标记位(16位),组号(4位),页内偏移量(12位)>,则查找1号分组,标记位为1080H

在这里插入图片描述

第一组标记位为1080H命中,其有效位为1,直接得到页框号为00002H,拼接上页内偏移量得到物理地址为00002008H,若未命中则回到上文中的查询二级页表的过程,且更新快表。

直接映射

TLB一项的大小很小,而且直接映射冲突率高,为了实现高命中率和低冲突率,因此TLB不使用直接映射。

而cache按照块大小,将主存一块数据(主存的一块和内存管理的一页没有关系,通常一页的大小比一块的大小要更大)读入cache行中,冲突率相比TLB会小一些,在部分场景下可以接受这种冲突的成本。

4.访问物理地址

得到物理地址后,会先访问cache,如果cache未命中访问主存,并将该物理地址所在块调入cache中(或者同时访问cache和主存)。

cache和TLB都是基于SRAM的相联存储器,不同的是cache的映射方式有三种,分别是直接映射,全相联映射,组相联映射。

在这里插入图片描述

直接映射

物理地址格式为 <Tag,行号,块内地址>

cache行内格式为 <Tag,有效位,脏位等其他数据,块数据>

全相联映射

物理地址为 <Tag,块内地址>

cache行内格式为 <Tag,有效位,脏位等其他数据,块数据>

组相联映射

物理地址格式为 <Tag,组号,块内地址>

cache行内格式为 <Tag,有效位,脏位等其他数据,块数据>

因为和TLB的过程没有太大区别,此处不再详细讨论。

不过值得注意的是,当TLB和cache未命中要更新TLB和cache时候需要使用置换算法,置换算法此处也不再讨论。

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

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

相关文章

Halcon联合QT ROI绘制

文章目录 Halcon 操纵界面代码窗口代码 Halcon 操纵界面代码 #pragma once#include <QLabel>#include <halconcpp/HalconCpp.h> #include <qtimer.h> #include <qevent.h> using namespace HalconCpp;#pragma execution_character_set("utf-8&qu…

力扣面试150题--二叉树的右视图

Day 53 题目描述 思路 采取层序遍历&#xff0c;利用一个high的队列来保存每个节点的高度&#xff0c;highb和y记录上一个节点的高度和节点&#xff0c;在队列中&#xff0c;如果队列中顶部元素的高度大于上一个节点的高度&#xff0c;说明上一个节点就是上一层中最右边的元素…

江西某石灰石矿边坡自动化监测

1. 项目简介 该矿为露天矿山&#xff0c;开采矿种为水泥用石灰岩&#xff0c;许可生产规模200万t/a&#xff0c;矿区面积为1.2264km2&#xff0c;许可开采深度为422m&#xff5e;250m。矿区地形为东西一北东东向带状分布&#xff0c;北高南低&#xff0c;北部为由浅变质岩系组…

C# 类和继承(所有类都派生自object类)

所有类都派生自object类 除了特殊的类object&#xff0c;所有的类都是派生类&#xff0c;即使它们没有基类规格说明。类object是唯 一的非派生类&#xff0c;因为它是继承层次结构的基础。 没有基类规格说明的类隐式地直接派生自类object。不加基类规格说明只是指定object为 基…

02业务流程的定义

1.要想用好业务流程&#xff0c;首先必须得了解流程与认识流程&#xff0c;什么是业务流程。在认识流程之前&#xff0c;首先要理清两个基本概念&#xff0c;业务和流程。 业务指的是&#xff1a;个人的或者摸个机构的专业工作。流程&#xff0c;原本指的是水的路程&#xff0…

cursor rules设置:让cursor按执行步骤处理(分析需求和上下文、方案对比、确定方案、执行、总结)

写在前面的话&#xff1a; 直接在cursor rules中设置一下内容&#xff1a; RIPER-5 MULTIDIMENSIONAL THINKING AGENT EXECUTION PROTOCOL 目录 RIPER-5 MULTIDIMENSIONAL THINKING AGENT EXECUTION PROTOCOL 目录 上下文与设置 核心思维原则 模式详解 模式1: RESEARCH…

Linux操作系统之进程(四):命令行参数与环境变量

目录 前言&#xff1a; 什么是命令行参数 什么是环境变量 认识环境变量 PATH环境变量 HOME USER OLDPWD 本地变量 本地变量与环境变量的差异 核心要点回顾 结语&#xff1a; 前言&#xff1a; 大家好&#xff0c;今天给大家带来的是一个非常简单&#xff0c;但也十…

Typora-macOS 风格代码块

效果&#xff1a; 替换 Typora安装目录中 themes 文件夹下的 base.user.css 文件&#xff0c;直接替换即可&#xff0c;建议先备份。 css&#xff1a; /* 语法高亮配色 */ .CodeMirror-line .cm-number { color: #b5cea8; } /* 数字 - 浅绿色 */ .CodeMirror-line .…

ansible自动化playbook简单实践

方法一&#xff1a;部分使用ansible 基于现有的nginx配置文件&#xff0c;定制部署nginx软件&#xff0c;将我们的知识进行整合 定制要求&#xff1a; 启动用户&#xff1a;nginx-test&#xff0c;uid是82&#xff0c;系统用户&#xff0c;不能登录 启动端口82 web项目根目录/…

20250526惠普HP锐14 AMD锐龙 14英寸轻薄笔记本电脑(八核R7-7730U)的显卡驱动下载

20250526惠普HP锐14 AMD锐龙 14英寸轻薄笔记本电脑(八核R7-7730U)的显卡驱动下载 2025/5/26 14:44 百度&#xff1a;AMD 7700 显卡驱动 amd APU 显卡驱动 https://item.jd.com/100054819707.html 惠普HP【国家补贴20%】锐14 AMD锐龙 14英寸轻薄笔记本电脑(八核R7-7730U 16G 1T…

2025年5月蓝桥杯stema省赛真题——象棋移动

上方题目可点下方去处&#xff0c;支持在线编程&#xff5e; 象棋移动_scratch_少儿编程题库学习中心-嗨信奥 程序演示可点下方&#xff0c;支持源码和素材获取&#xff5e; 象棋移动-scratch作品-少儿编程题库学习中心-嗨信奥 题库收集了历届各白名单赛事真题和权威机构考级…

AI重构SEO关键词精准定位

内容概要 随着AI技术深度渗透数字营销领域&#xff0c;传统SEO关键词定位模式正经历系统性重构。基于自然语言处理&#xff08;NLP&#xff09;的智能语义分析引擎&#xff0c;可突破传统关键词工具的局限性&#xff0c;通过解析长尾搜索词中的隐含意图与语境关联&#xff0c;…

SPSS跨域分类:自监督知识+软模板优化

1. 图1:SPSS方法流程图 作用:展示了SPSS方法的整体流程,从数据预处理到模型预测的关键步骤。核心内容: 领域知识提取:使用三种词性标注工具(NLTK、spaCy、TextBlob)从源域和目标域提取名词或形容词(如例句中提取“excellent”“good”等形容词)。词汇交集与聚类:对提…

vscode的Embedded IDE创建keil项目找不到源函数或者无法跳转

创建完Embedded IDE项目后跳转索引很容易找不到源函数或者无法跳转&#xff0c;原因是vscode工作区被eide覆盖了&#xff0c;需要手动往当前目录下的.vscode/c_cpp_properties.json里添加路径 打开eide.json &#xff0c;找到folders&#xff0c; 里面的name是keil里工程的虚拟…

构建高效智能客服系统的8大体验设计要点

构建一流的客户服务中心体验&#xff0c;企业需要以用户需求为核心&#xff0c;将智能化流程、前沿科技与人文关怀有机结合&#xff0c;打造流畅、高效且富有温度的服务生态。在客户需求日益多元化的今天&#xff0c;单纯的问题解决能力已无法满足期待&#xff0c;关键在于通过…

CppCon 2014 学习:Making C++ Code Beautiful

你说的完全正确&#xff0c;也很好地总结了 C 这门语言在社区中的两种典型看法&#xff1a; C 的优点&#xff08;Praise&#xff09; 优点含义Powerful允许底层控制、系统编程、高性能计算、模板元编程、并发等多种用途Fast无运行时开销&#xff0c;接近汇编级别性能&#x…

据传苹果将在WWDC上发布iOS 26 而不是iOS 19

苹果可能会对其操作系统的编号方式做出重大改变&#xff0c;基于年份的新版系统会将iOS 19重新命名为 iOS 26&#xff0c;同时 macOS 也会以同样的方式命名。 苹果的编号系统相当简单&#xff0c;版本号每年都会像钟表一样定期更新。然而&#xff0c;今年秋天情况可能有所不同&…

嵌入式开发STM32 -- 江协科技笔记

1.背景介绍及基础认知 8大输入输出 斯密特触发器&#xff1a;高于设定阈值输出高电平&#xff0c;低于设定阈值输出低电平 有关上拉输入、下拉输入、推挽输出、开漏输出、复用开漏输出、复用推挽输出以及浮空输入、模拟输入的区别 1、上拉输入&#xff1a;上拉就是把电位拉高…

[网页五子棋][用户模块]客户端开发(登录功能和注册功能)

文章目录 客户端开发登录功能htmlcsscommon.csslogin.css jQuery引入 jquery 运行程序注册功能 客户端开发 登录功能 html <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport&…

MQTT协议,EMQX部署,MQTTX安装学习

一、MQTT概述 1.什么是MQTT MQTT是一种基于“发布订阅“”模式的消息传输协议。 消息&#xff1a;设备和设备之间传输的数据&#xff0c;或者服务和服务之间要传输的数据。 协议&#xff1a;传输数据时所遵循的规范。 2.常见的通讯模式 &#xff08;1&#xff09;客户端-服…