CPU设计实战-加载和存储指令(2)

目录

一 ll和sc指令说明

二 ll和sc指令的实现

1 llbit寄存器

2 译码阶段

3 访存阶段

4 Load相关问题

5 流水线在取指阶段暂停


本章介绍两个比较特殊的加载存储指令ll和sc,这两个指令的存在用于实现信号量机制。

信号量机制:在多线程中为了保证某个正在运行的线程不被其他线程打扰,需要遵循RMW操作序列,这是一个规范过程:读取,修改,返回,并且此过程不能有任何打扰即为一个原子操作(一定执行且不被打扰的操作为原子操作)。

原子操作的实现方式需要基于信号量机制,semaphore是一个信号量,用来表示当前是否有进程在运行,为1表示信号量使用中,为0表示信号量空闲。进行原子操作前,使用wait函数查询semaphore的值(读取),如果为1,则等待,否则,将其置为1,开始执行原子操作(修改)。操作结束后,signal 函数将semaphore置为0(返回),这样其他线程就可以执行原子操作了。

MIPS32架构采用ll和sc这两个指令实现信号量机制,具体步骤如下:

ll指令同一般的加载指令一样,从内存中加载一个字, 但是,有一点不同,ll指令还会将处理器内部的一个链接状态位LLbit置为1,表明发生了一个链接加载操作,并将链接加载的地址保存到一个特殊寄存器LLAddr中(这个寄存器在多处理器中有作用,OpenMIPS是单处理器,所以在OpenMIPS实现过程中并没有实现LLAddr寄存器)。ll指令执行完毕后,会进行一定定的操作(如:修改加载得到的数据),然后执行sc指令。

执行sc指令时,会对从II指令开始的RMW序列进行检查,判断是否受到干扰,实际就是判断LLbit是否为1,如果没有受到任何干扰,LLbit 保持为1,那么操作是原子的,sc指令会对II指令加载数据的地址进行写回操作,并设置一个通用寄存器的值为1,表示成功, 反之不进行写回操作,并设置一个通用寄存器的值为0,表示失败。

 可以看到在这里LLbit就是一种信号量,ll和sc指令搭配实现了一种RWM操作序列,ll进行读取与修改,sc指令进行返回操作。在这个过程中通过对信号量LLbit的修改实现了原子操作。

一 ll和sc指令说明

ll指令作用为:从内存中指定的加载地址处,读取一个字节,然后符号扩展至32位,保存到地址为rt的通用寄存器中。并设置LLbit状态位为1.

sc指令作用为:如果RMW序列没有受到干扰,也就是LLbit为1,那么将地址为rt的通用寄存器的值保存到内存中指定的存储地址处,同时设置地址为rt的通用寄存器的值为1,设置LLbit为0。如果RMW序列受到了干扰,也就是LLbit为0,那么不修改内存,同时设置地址为rt的通用寄存器的值为0。

二 ll和sc指令的实现

我们可以把LLbit当做一个寄存器模块,ll指令在结束后会进行写操作,sc指令会先读它,然后再进行写rt寄存器。最后还会对LLbit寄存器进行写。LLbit寄存器同样放到回写阶段。

 需要注意的是,由于对LLbit寄存器的修改是在回写阶段最后的时钟上升沿进行的,如果直接采用LLbit模块给出的LLbit寄存器的值,可能不是正确的值,因为此时处于回写阶段的上一条指令可能会需要修改LLbit寄存器,这一问题在第6章添加HI、LO寄存器时也遇到过,解决方法还是数据前推,将回写阶段指令对LLbit寄存器的操作信息(是否进行写LLbit操作以及写入的值)前推到访存阶段,访存阶段依据这些情况,确定正确的LLbit寄存器的值,所以MEM/WB模块的输出信号wb_LLbit_we、wb_LLbit_value也要送到MEM模块,就是用来解决数据相关问题的。

1 llbit寄存器

只需要对异常情况判断以及写使能,如果有异常情况信号量更新为0。至于具体的异常处理在后面才会介绍。

2 译码阶段

 ll指令加载内存地址写入寄存器,需要写使能,需要读base地址,此外还需要修改LLbit的值,也就是要对LLbit寄存器进行写操作。

sc指令从寄存器读数据写入内存,最后还要修改LLbit寄存器和原通用寄存器,要读两个寄存器,一个base一个寄存器的值。

3 访存阶段

这是加载存储指令与特殊寄存器进行读写交互的地方,为了避免数据相关操作需要先获取一下LLbit寄存器最新值,即如果回写阶段也要写LLbit那就把写入的值给LLbit的最新值:

ll指令:需要读数据存储器一个字,需要写LLbit寄存器1

sc指令:因为是信号量机制所以要先检测信号量是否异常,无异常(为1)时再进行操作:需要写寄存器值到数据存储器,需要写寄存器为1,需要写LLbit寄存器为0

4 Load相关问题

加载操作需要写入值到寄存器,如果下一条指令就需要使用此寄存器的值会不会有影响?

答案是有的,因为load加载操作在访存阶段才获取到写入寄存器的新值,而下一条指令在译码阶段就已经获取了此寄存器的值,显然这个值是落后的。如下图:

那么是否可以使用数据前推来解决数据相关问题?

答案是不可以的。原因主要是因为load是在访存阶段才获取到新值,我们之前的数据数据相关问题在执行阶段就获取到了最新的值,所以落后了一个阶段后,就算把访存的值前推倒执行阶段,而下一条指令早在前一个译码阶段就获取了。

那么该如何解决?

既然相比之前的数据相关问题落后了一个阶段,如果我们可以让第二条指令在译码阶段如果识别到当前指令与上一条指令存在load关系就暂停一次,那么就相当于如下图:

此时访存阶段获取到新值,译码阶段正好需要取值,满足数据前推的解决条件,可以使用来解决问题。

5 流水线在取指阶段暂停

输出暂停信号之前还需要把上一条的指令回传过来好进行load相关的判定(如果上一条指令是load指令且当前指令操作的寄存器就是load写入的寄存器,那么就是load相关发生)

 具体实现:

先判断上一条指令是不是加载指令:

为什么SC指令也在这里呢?因为sc指令在最后会回写寄存器,也会更改寄存器的值。

接下来判断加载指令的目的地址是否和当前指令读的寄存器一样:

如果满足load相关条件就请求流水线暂停:

 至此,加载存储指令基本结束。

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

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

相关文章

smplx pkl格式可视化

smplx pkl格式可视化 import glob import os import pickleimport torch import numpy as npfrom smplpytorch.pytorch.smpl_layer import SMPL_Layer from display_utils import display_model, display_model_continuousfrom matplotlib import pyplot as plt from matplotl…

社区服务类创业项目推荐:抓住社区商业新机遇

大家好,我是一名90后鲜奶吧创业者,目前在社区经营5年时间,今天我想和大家分享一些关于社区服务类创业项目的推荐,都是这么多年我见证过生意最好的店面。 1、社区便利店: 随着人们生活节奏的加快,对便利购…

【Linux实践室】Linux常用命令:文件操作|文件夹操作

🌈个人主页:聆风吟 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux文件操作2.1.1 👻创建文件2…

2024年第二届智能制造与自动化前沿国际会议 | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第二届智能制造与自动化前沿国际会议(CFIMA 2024) 会议时间:2024年8月23 -25日 召开地点:中国包头 大会官网:www.cfima.org 随着全球新一轮科技革命和产业变革突飞猛进,…

Java Web开发---复试Tips复习

***********(自用,摘录自各种文章和自己总结)********** 小知识点理解 Web Web应用开发主要是基于浏览器的应用程序开发。一个Web应用由多部分组成 java web就是用java语言开发出可在万维网上浏览的程序 Web应用程序编写完后,…

ES分布式搜索-IK分词器

ES分词器-IK 1、为什么使用分词器? es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。 我们在kibana的DevTools中测试: GET /_analyze {"analyzer": "…

day37 贪心算法part6

738. 单调递增的数字 中等 提示 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 不知道怎么讲思路……以9287举例&#xff0c;…

AntV L7的pointLayer点图层

本案例使用L7库和Mapbox GL JS创建点数据并加载进地图。 文章目录 1. 引入 CDN 链接2. 引入组件3. 创建地图4. 创建场景5. 创建点数据5.1. 普通 json 数据5.2. geojson 数据 6. 创建点图层6.1. 普通 json 数据6.2. geojson 数据 7. 演示效果8. 代码实现 1. 引入 CDN 链接 <s…

【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题

【网络连接】ping不通的常见原因解决方案&#xff0c;如何在只能访问网关时诊断&#xff0c;并修复IP不通的问题 写在最前面网络基础可能的问题、表现以及解决方案如何诊断和解决操作步骤 详细问题描述详细解决方案1. 防火墙或安全软件拦截2. IP配置错误3. 网络设备问题4. 物理…

面试官问:生成订单30分钟未支付,则自动取消,该怎么实现

今天给大家上一盘硬菜&#xff0c;并且是支付中非常重要的一个技术解决方案&#xff0c;有这块业务的同学注意自己试一把了哈&#xff01; 在开发中&#xff0c;往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付&#xff0c;则自动取消 生成订单60秒后,给用户发短…

论文翻译:一种基于强化学习的车辆队列控制策略,用于减少交通振荡中的能量消耗

A Reinforcement Learning-Based Vehicle Platoon Control Strategy for Reducing Energy Consumption in Traffic Oscillations 一种基于强化学习的车辆队列控制策略&#xff0c;用于减少交通振荡中的能量消耗 文章目录 A Reinforcement Learning-Based Vehicle Platoon Cont…

QT中的信号和槽

信号和槽概述 在 Qt 中&#xff0c;用户和控件的每次交互过程称为⼀个事件。比如 “用户点击按钮” 是⼀个事件&#xff0c;“用户关闭窗口” 也是⼀个事件。每个事件都会发出⼀个信号&#xff0c;例如用户点击按钮会发出 “按钮被点击” 的信号&#xff0c;用户关闭窗口会发出…

突破编程_前端_JS编程实例(自适应表格列宽)

1 开发目标 针对如下的表格组件&#xff1a; 根据表格的各个列字符串宽度动态调整表格列宽&#xff1a; 2 详细需求 本组件目标是提供一个自动调整 HTML 表格列宽的解决方案&#xff0c;通过 JS 实现动态计算并调整表格每列的宽度&#xff0c;以使得表格能够自适应容器宽度&a…

微信作为私域营销的载体有哪些优势?

私域流量的本质就是&#xff1a; 降低我的获客成本&#xff0c;提高我产品服务的复购率&#xff0c;增加我和用户之间的粘性&#xff0c;挖掘用户的终身价值。 私域流量的优势&#xff1a; 1、更精准&#xff1b; 2、节约成本&#xff0c;减少广告成本&#xff1b; 3、有利于品…

LCR 179. 查找总价格为目标值的两个商品 - 力扣

1. 题目 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 2. 示例 3. 分析 我们首先想到暴力解法&#xff0c;这道题目的暴力还是比较简单的&#xff0c;列举每个数的情况即可…

C/C++的内存管理与初阶模板

引言 我们在学习C的时候&#xff0c;会经常在堆上申请空间&#xff0c;所以这个时候就体现了内存管理遍历。 图下是我们常见的计算机的内存划分&#xff1a; 我也在图下对部分变量存在的位置&#xff0c;及时标注。(如果有任何问题可以联系博主修改&#xff0c;感谢大家。) 那…

智慧油气场站:油气行业实现数字化转型的关键一步

智慧油气场站&#xff1a;油气行业实现数字化转型的关键一步 在现代社会&#xff0c;能源供应是国家经济发展和人民生活的重要保障。而油气场站作为能源的重要供应和储存基地&#xff0c;扮演着至关重要的角色。此外&#xff0c;油气场站还可以为石油和天然气的生产提供支持。…

Docker安装主从数据库

我自己的主数据库名字 user_muster 密码是123456 从数据库 就是slave2 名字是root 密码是123456 首先开启docker后直接执行命令 docker run -d \ -p 3307:3306 \ -v /xk857/mysql/master/conf:/etc/mysql/conf.d \ -v /xk857/mysql/master/data:/var/lib/mysql \ -e MYSQL_…

【随笔】程序员的金三银四求职宝典,每个人都有最合适自己的求职宝典

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读文章&#xff01; 此篇是【话题达人】系列文章&#xff0c;这一次的话题是《程序员的金三银四求职宝典》 目录 背景能力流程图求职宝典就业数据人数曲线图增长率柱状图 其他建议文章推荐 背景 随着春天的脚步渐近&#xff0…

【JavaEE初阶】 关于JVM垃圾回收

文章目录 &#x1f343;前言&#x1f38b;死亡对象的判断算法&#x1f6a9;引用计数算法&#x1f6a9;可达性分析算法 &#x1f333;垃圾回收算法&#x1f6a9;标记-清除算法&#x1f6a9;复制算法&#x1f6a9;标记-整理算法&#x1f6a9;分代算法&#x1f388;哪些对象会进入…