【ShuQiHere】深入理解微架构(Microarchitecture):LC-3 的底层实现 ️
【ShuQiHere】🖥️
微架构(Microarchitecture) 是计算机体系结构中的重要概念,它定义了如何将 指令集架构(Instruction Set Architecture, ISA) 转化为实际硬件。通过微架构,我们可以理解计算机如何执行程序和处理数据。本文将带你深入理解微架构的核心概念,并通过 LC-3 的实现,探讨内存、寄存器、CPU、时钟控制等方面的工作机制。
1. 什么是微架构(Microarchitecture)?🤔
微架构 是指计算机系统如何通过具体的硬件实现指令集架构(ISA)中的操作。虽然多种处理器可以实现相同的 ISA,但微架构的设计可能因处理器的性能、能效需求和制造技术不同而大相径庭。
微架构与 ISA 的对比:
- ISA(指令集架构):定义 CPU 可以执行的操作指令和操作数,例如加法、数据加载和分支跳转。
- 微架构:规定如何通过硬件电路来执行这些指令。例如,加法操作可能由一个简单的 ALU(算术逻辑单元)完成,但其执行速度、功耗和实现方式在不同处理器中可能不同。
2. 冯·诺依曼架构(von Neumann Architecture)🏛️
冯·诺依曼架构 是现代计算机设计的基石。它提出了**存储程序(Stored Program Concept)**的概念,即程序和数据都存储在同一个内存中,并通过中央处理器(CPU)顺序执行。
冯·诺依曼架构的关键组成部分:
- 单一存储器(Single Memory):程序和数据共享相同的存储空间。
- 顺序执行(Sequential Execution):指令按照存储顺序逐条执行,除非遇到跳转指令。
- 可存储的程序:程序代码可以像数据一样被存储和操作。
例子:顺序执行
假设我们有一个简单的计算任务,程序中包含加法、乘法和存储操作。CPU 会按顺序执行这些指令:首先读取加法指令,将结果存储在寄存器中,然后执行乘法操作,最后将结果写回内存。每一步都依赖冯·诺依曼架构的存储程序和顺序执行原则。
3. LC-3 的内存组织 💾
在 LC-3 中,内存由多个**字(word)**组成,每个字为 16 位。LC-3 的内存地址空间为 16 位,这意味着它可以寻址最多 ( 2^{16} = 65536 ) 个内存单元,每个单元存储 16 位数据。
内存操作:
- 读取(LOAD):从指定的内存地址加载数据到寄存器。
- 写入(STORE):将寄存器中的数据写入到指定内存地址。
内存接口:
- MAR(Memory Address Register, 内存地址寄存器):存储要访问的内存地址。
- MDR(Memory Data Register, 内存数据寄存器):存储从内存中读取的数据或将要写入内存的数据。
例子:数据存储过程
如果我们要将数据存储到内存地址 4000 中,首先将地址存入 MAR,将要写入的数据存入 MDR,最后由控制单元发出写入信号,将数据写入到指定地址。这个过程在每个程序执行过程中不断重复。
4. CPU:计算机的核心 🧠
中央处理器(CPU, Central Processing Unit) 是计算机中执行指令的核心部分。它负责从内存中获取指令、解码指令,并执行指令。CPU 的两个主要部分是:数据路径(Data Path) 和 控制单元(Control Unit)。
数据路径的组成:
- 寄存器(Registers):CPU 内部的高速存储器,用于存储临时数据和运算结果。LC-3 具有 8 个 16 位通用寄存器(R0-R7)。
- 算术逻辑单元(ALU, Arithmetic Logic Unit):用于执行算术和逻辑运算,例如加法、减法、按位与(AND)、按位取反(NOT)等。
控制单元的作用:
- 解码指令:将从内存中取到的指令解码,并根据指令的操作码生成控制信号。
- 控制执行流程:控制数据在寄存器、ALU 和内存之间的流动,确保指令按照正确顺序执行。
5. LC-3 的寄存器与 ALU 📦
在 LC-3 中,寄存器是执行指令时临时存储数据的关键单元。寄存器的存取速度远快于内存,因此它们是 CPU 执行计算的基础。
LC-3 寄存器:
LC-3 有 8 个 16 位通用寄存器(R0 - R7),用于存储操作数和运算结果。每个寄存器都可以被用于各种运算指令的操作数。
算术逻辑单元(ALU):
ALU 是执行所有算术和逻辑运算的核心。例如,LC-3 的 ADD
指令会使用 ALU 计算两个操作数的和,并将结果存储在目标寄存器中。
例子:加法运算
假设我们有指令 ADD R1, R2, R3
,该指令将寄存器 R2 和 R3 中的值相加,并将结果存储在寄存器 R1 中。这一过程中,控制单元会将 R2 和 R3 的值输入到 ALU,然后将 ALU 的输出结果存入 R1,同时更新条件码寄存器以反映结果的正、负或零状态。
6. 控制单元与有限状态机(FSM)🎛️
控制单元(Control Unit) 是 CPU 的指挥中心,它通过生成控制信号来协调数据在寄存器、内存和 ALU 之间的流动。在 LC-3 中,控制单元使用了**有限状态机(Finite State Machine, FSM)**模型来处理指令的各个执行阶段。
控制单元的关键组件:
- PC(Program Counter, 程序计数器):存储下一条要执行指令的地址。
- IR(Instruction Register, 指令寄存器):存储当前正在执行的指令。
控制单元通过 FSM 模型,依次控制每条指令的取指、解码、执行等步骤。
例子:有限状态机如何工作
假设当前有一条 LD R1, 3000
指令,控制单元首先从程序计数器获取地址,接着从内存中取出指令并加载到 IR 中,然后解码指令并执行数据加载操作,将内存地址 3000 处的数据存入 R1。FSM 的每个状态对应指令执行过程中的一个阶段。
7. LC-3 的输入输出设备 🔄
LC-3 通过特殊寄存器与外部设备(如键盘和显示器)进行通信。每个 I/O 设备都有自己的数据寄存器和状态寄存器,这些寄存器与 CPU 之间的通信由控制单元管理。
设备寄存器:
- KBDR(Keyboard Data Register, 键盘数据寄存器):用于存储从键盘输入的字符。
- KBSR(Keyboard Status Register, 键盘状态寄存器):指示键盘输入的状态,表示是否有新的按键输入。
- DDR(Display Data Register, 显示数据寄存器):用于存储要输出到显示器的字符。
- DSR(Display Status Register, 显示状态寄存器):指示显示器是否准备好接收新的字符输出。
8. LC-3 的指令执行流程 📜
LC-3 的每条指令都是由**操作码(Opcode)和操作数(Operands)**构成。指令的执行分为多个步骤,每个步骤对应微架构中的不同时钟周期。
指令的执行阶段:
- 取指(Fetch):从内存中获取下一条要执行的指令,并将其加载到 IR。
- 解码(Decode):分析操作码,确定需要执行的操作。
- 计算地址(Evaluate Address):计算内存操作所需的地址。
- 取操作数(Fetch Operands):从寄存器或内存
中获取操作数。
- 执行(Execute):执行指令指定的操作,如加法、数据加载等。
- 存储结果(Store Result):将运算结果存储到寄存器或内存中。
例子:数据加载指令执行过程
LD R1, 3000
指令会从内存地址 3000 读取数据并存入寄存器 R1。控制单元首先通过程序计数器取指,然后解码这条指令。接着,CPU 会计算内存地址 3000,并将该地址的数据加载到 R1。
9. 时钟与控制 🕰️
时钟信号(Clock Signal) 是微架构的核心推动力。在每个时钟周期,控制单元会依次执行指令的不同阶段。时钟的频率越高,指令执行的速度就越快。
例子:多周期执行
假设有一条 ADD R1, R2, R3
指令,时钟信号控制指令的不同阶段:在第一个时钟周期取指,第二个周期解码,第三个周期执行加法运算,最后一个周期将结果存储在 R1 中。
总结 🎯
通过深入理解 微架构(Microarchitecture),我们看到了计算机如何将指令集架构(ISA) 转化为硬件操作。LC-3 通过简单的设计,展示了现代 CPU 的核心原理,包括内存管理、寄存器操作、ALU 执行、控制单元的状态转换以及指令的多阶段处理。通过掌握这些基础概念,你将具备更深的计算机体系结构理解,为进一步学习现代复杂处理器打下坚实的基础。
相关文章:
【ShuQiHere】深入理解微架构(Microarchitecture):LC-3 的底层实现 ️
【ShuQiHere】🖥️ 微架构(Microarchitecture) 是计算机体系结构中的重要概念,它定义了如何将 指令集架构(Instruction Set Architecture, ISA) 转化为实际硬件。通过微架构,我们可以理解计算机…...
Ubuntu24.04.1系统下VideoMamba环境配置
文章目录 前言第一步:基本的环境创建第二步:causal-conv1d和mamba_ssm库的安装第三步:安装requirements.txt 前言 VideoMamba环境的配置折磨了我三天,由于Mamba对Cuda的版本有要求,因此配置环境的时候Cuda版本以及各种…...

c++第十二章续(队列结构类模拟)
队列类 设计类,需要开发公有接口和私有实现 Queue类接口 公有接口: 默认初始化,和可以用显式初始化覆盖默认值 Queue类的实现 如何表示队列数据: 一种方法是使用new动态分配一个数组,它包含所需的元素数。不过&…...

数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall
数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall 数据集-目标检测系列-豹子 猎豹 检测数据集 leopard 数据量:5k 想要进一步了解,请联系。 DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集&#x…...

基于ESP8266—AT指令连接阿里云+MQTT透传数据(3)
MQTT_RX设备为接收(订阅)数据的Topic,使用ESP8266通过AT指令实现。 首先需要串口通信软件,如 SSCOM、PuTTY、SecureCRT 等串口调试工具,功能丰富,支持常见的串口调试功能,用于发送AT指令。 以下是ESP8266通过AT指令连接阿里云MQTT服务的步骤: 1、初始化WiFi 发送下面…...

redis的数据结构,内存处理,缓存问题
redisObject redis任意数据的key和value都会被封装为一个RedisObject,也叫redis对象: 这就redis的头信息,占有16个字节 redis中有两个热门数据结构 1.SkipList,跳表,首先是链表,和普通链表有以下差异&am…...
机器学习模型评估与选择
前言 承接上篇讲述了机器学习有哪些常见的模型算法,以及使用的场景,本篇将继续讲述如何选择模型和评估模型。几个概念了解一下: 经验误差:模型在训练集上的误差称之为经验误差;过拟合:模型在训练集上表现…...

Web认识 -- 第一课
文章目录 前言一、HTML是什么?二、了解Web1. 基本概念2.Web标准3. Web构成1.前端1. HTML2.CSS3. javaScript4.常见浏览器介绍 2.Web标签构成1.结构标准2.表现标准 -- css3. 行为标准 -- javaScript 总结 前言 这里是我们进入前端学习的开端,在本次更新之后我会陆续…...

Recaptcha2 图像识别 API 对接说明
Recaptcha2 图像识别 API 对接说明 本文将介绍一种 Recaptcha2 图像识别2 API 对接说明,它可以通过用户输入识别的内容和 Recaptcha2验证码图像,最后返回需要点击的小图像的坐标,完成验证。 接下来介绍下 Recaptcha2 图像识别 API 的对接说…...
6种MySQL高可用方案对比分析
大家好,我是 V 哥,关于 MySQL 高可用方案,在面试中频频出现,有同学在字节面试就遇到过,主要考察你在高可用项目中是如何应用的,V 哥整理了6种方案,供你参考。 MySQL的高可用方案有多种…...
FastAPI: websocket的用法及举例
1. Websocket 1.1 Websocket介绍 WebSocket 是一种在单个TCP连接上进行全双工通信的协议,允许客户端和服务器之间相互发送数据,而不需要像传统的HTTP请求-响应模型那样频繁建立和断开连接。 全双工通信(Full-Duplex Communication)是一种通信模式&#…...

JavaSE——面向对象2:方法的调用机制、传参机制、方法递归、方法重载、可变参数、作用域
目录 一、成员方法 (一)方法的快速入门 (二)方法的调用机制(重要) (三)方法的定义 (四)注意事项和使用细节 1.访问修饰符(作用是控制方法的使用范围) 2.返回的数据类型 3.方法名 4.形参列表 5.方法体 6.方法调用细节说明 (五)传参机制 1.基本数据类型的传参机制 …...
Vue+Flask
App.vue 首先要安装 npm install axios<template><div><h1>{{ message }}</h1><input v-model"name" placeholder"Enter your name" /><input v-model"age" placeholder"Enter your age" /><…...
深入剖析 Android Lifecycle:构建高效稳定的应用
在 Android 开发中,管理应用组件的生命周期是至关重要的。正确处理生命周期事件可以确保应用的性能、稳定性和用户体验。Android Framework 提供了一系列的机制来管理应用组件的生命周期,而android.arch.lifecycle库则为我们提供了更简洁、更灵活的方式来…...

ElasticSearch分词器、相关性详解与聚合查询实战
目录 1. ES分词器详解 1.1 基本概念 1.2 分词发生时期 1.3 分词器的组成 切词器:Tokenizer 词项过滤器:Token Filter 字符过滤器:Character Filter 1.4 倒排索引的数据结构 2. 相关性详解 2.1 什么是相关性(Relevance&am…...
删除二叉树中以x为根节点的子树(包括根结点)
已知二叉树以二叉链表存储,编写算法完成:对于树中每个元素值为x的结点,删除以它为根的子树,并释放相应的空间。 思想: 删除二叉树采用后序遍历。先删除左子树,然后右子树,最后根。 利用层次遍…...

Netty 与 WebSocket之间的关系
WebSocketProtocolHandler 和 Netty 在处理 WebSocket 连接时扮演不同的角色,但它们通常是一起使用的,尤其是在基于 Netty 的项目中。为了更好地理解它们之间的区别,我们首先需要了解 WebSocket 和 Netty 的基本概念。 WebSocket WebSocket…...

通信工程学习:什么是CSMA/CA载波监听多路访问/冲突避免
CSMA/CA:载波监听多路访问/冲突避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance),即载波监听多路访问/冲突避免,是一种用于数据传输时避免各站点之间冲突的算法,尤其适用于无线局域网&…...

JAVA并发编程系列(13)Future、FutureTask异步小王子
美团本地生活面试:模拟外卖订单处理,客户支付提交订单后,查询订单详情,后台需要查询店铺备餐进度、以及外卖员目前位置信息后再返回。 时间好快,一转眼不到一个月时间,已经完成分享synchronized、volatile、…...
【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像?
【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像? 【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像? 文章目录 【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像?前言1. 使用…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...