计算机组成原理 — CPU 的结构和功能
CPU 的结构和功能
- CPU 的结构和功能
- CPU 概述
- 控制器概述
- CPU 框架图
- CPU 寄存器
- 控制单元 CU
- 指令周期
- 概述
- 指令周期的数据流
- 指令流水
- 概述
- 指令流水的原理
- 影响流水线性能的因素
- 流水线的性能
- 流水线的多发技术
- 流水线结构
- 中断系统
- 概述
- 中断请求标记和中断判优逻辑
- 中断请求标记 INTR
- 中断判优逻辑
- 中断服务程序入口地址查询
- 硬件向量法
- 软件查询法
- 中断响应
- 响应中断的条件
- 保护现场和恢复现场
- 多重中断
- 概述
- 实现多重中断的条件
- 屏蔽技术和屏蔽字
- 多重中断的断点保护
大家好呀!我是小笙,本章我主要分享计算机组成原理的 CPU 的结构和功能知识,希望内容对你有所帮助!
CPU 的结构和功能
CPU 概述
CPU实质包括运算器和控制器两大部分(运算器的功能上述已经介绍:实现算术运算以及逻辑运算),以控制器的功能为重点来讲述
控制器概述
控制器负责协调并控制计算机各部件执行过程的指令序列,其基本功能是取指令、分析指令和执行指令
- 取指令
- 分析指令
- 执行指令。发出各种操作命令
- 控制程序输入以及结果的输出
- 总线管理
- 处理异常情况和特殊情况
CPU 框架图
- 寄存器用于存储当前指令的地址
- 控制器 CU 用于控制指令(获取分析以及执行)
- 运算器 ALU 用于完成算术运算以及逻辑运算
- 中断系统主要用于处理异常的情况以及特殊的请求

CPU 寄存器
用户可见寄存器(通常CPU执行机器语言访问的寄存器为用户可见寄存器)
-
通用寄存器
通用寄存器可由程序设计者指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器
-
数据寄存器
存放操作数(满足各种数据类型)
-
地址寄存器
存放地址,也可以用于特殊的寻址方式 段取值 栈指针
-
条件码寄存器
存放条件码,可作程序分支的依据 如:正、负、零、溢出以及进位等
控制和状态寄存器(一类寄存器用于控制CPU的操作或运算)
-
控制寄存器
PC -> MAR -> M -> MDR -> IR (除 PC 外,其他用户均不可见)
-
状态寄存器
PSW 寄存器 (存放程序状态字)
控制单元 CU
CU 产生全部指令的微操作命令序列
- 组合逻辑设计方法,为硬连线逻辑
- 微程序设计方法,为存储逻辑
指令周期
概述
指令周期:CPU 取出并执行一条指令所需要的全部时间
完成一条指令普遍需要:
- 取指、分析(取指周期)
- 执行 (执行周期)
每条指令的指令周期不同

带有中断周期的指令周期(复杂)
指令周期流程:取值 -> 间接 -> 执行 -> 中断

CPU的工作周期包括四个周期,分别是取值周期 - 间址周期 - 执行周期 - 中断周期,为了区别它们,在CPU内可设置4个标志触发器(状态 1 表示有效)

指令周期的数据流
-
取指周期数据流
-
间址周期数据流
前提:取指周期结束,CU 便检查 IR 中的内容,以确定其是否有间址操作,如果需要间址操作,则 MDR 中指示形式地址的右 N 位将被送到 MAR
-
执行周期数据流
差异较多,下面章节详解
-
中断周期数据流
CPU 进入中断周期要完成一系列操作,其中 PC 当前的内容必须保存起来,以待执行完中断服务程序后可以准确返回到该程序的间断处
指令流水
概述
如何提高机器速度?
- 提高访存速度 (高速芯片、Cache等)
- 提高 I/O 和主机之间的传送速度(中断、DMA、通道、I/O处理机等)
- 提高运算器速度(高速芯片、改进算法、快速进位链等)
- 提高整机处理能力(高速器件、改进系统结构,开发系统的并行性等) 本章重点
系统的并行性概念
- 并发:两个或两个以上的事件在同一时间段发生
- 同时:两个或两个以上的事件在同一时刻发生(流水线方式)
并行性的等级
- 过程级(程序、进程) 粗粒度 软件实现
- 指令级(指令之间、指令内部) 细粒度 硬件实现
指令流水的原理
指令的串行执行
取指令 取指令部件 ;执行指令 执行指令部件

指令的二级流水
取指和执行阶段事件上完全重叠,指令周期减半,速度提高一倍

影响指令流水效率加倍的因素
-
执行时间 > 取指时间
取指令部件 ——> 指令部件缓冲区 ——> 执行指令部件
-
条件转移指令对指令流水的影响
必须等上条指令执行结束,才能确定下条指令的地址造成时间的损失
指令的六级流水

影响流水线性能的因素
-
结构相关 不同指令争用同一功能部件产生资源冲突
解决方法:停顿、指令存储器和数据存储器分开、指令预取技术(适用于访存周期短的情况)
-
数据相关 不同指令因重叠操作,可能改变操作数的读/写 访问顺序
解决办法:后推法(类似停顿)、采用旁路技术(不需要等待计算结果并写入到寄存器再读取,可以等计算出结果则可以读取该数据)
-
写后读相关(RAW)
需要读取到写之后的寄存器里的数据
-
读后写相关(WAR)
需要读取到写之前的寄存器的数据
-
写后写相关(WAW)
-
-
控制相关 有指令转移引起(类似于条件判断)
流水线的性能
-
吞吐率
单位时间内流水线所完成指令或者输出结果的数量
对于m段的指令流水线而言,若各段的时间均为 △t 的情况
-
最大吞吐率
-
实际吞吐率
连续处理 n 条指令的吞吐率
-
-
加速比 Sp
m 段的流水线的速度与等功能的非流水线的速度之比
-
设流水线隔断时间为 △t ,完成 n 条指令在 m 段流水线共需时间
-
完成 n 条指令在等效的非流水线上的共需要时间
T = nm* △t
-
因此加速度比 Sp 求得如下
-
-
效率
流水线中各功能段的利用率
效率 = 流水线各段处于工作时间的时空区 / 流水段中各段总的时空区
流水线的多发技术

-
超标量技术
- 每个时钟周期内可 并发多条独立指令:配置多个功能部件
- 不能调整指令的执行顺序:通过编译优化技术,把可并行执行的指令搭配起来
-
超流水线技术
在同一个时钟周期内再分段,但是依旧不能调整指令的执行顺序
-
超长指令字技术
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
流水线结构
-
指令流水线结构
完成一条指令分成6段,每段需要一个时钟周期,并且每个段之间需要加上锁存(用于保存前面流水段的操作结果以及为下面的流水提供操作数据等功能)
-
运算流水线
完成浮点加减法运算可分为 对阶、尾数求和、规格化三段
中断系统
概述
引起中断的各种因素
-
人为设置的各种因素,如:转管指令(通常出现在流水线处理器的上下文中,它们是用来控制流水线操作的一组指令)
-
程序性事故,如溢出、操作码等由于程序设计不周导致的
-
硬件故障,如电源掉电
-
I/O设备(I/O设备被启动以后,一旦准备就绪,便向CPU发出中断请求)
-
外部事件,如键盘中断现行程序
中断请求标记和中断判优逻辑
中断请求标记 INTR
各中断源如何向 CPU 提出请求?
一个请求源对应一个中断请求标志触发器,如果有多个中断请求标记,将会组成中断请求标记寄存器,如下图
中断请求标记触发器有的是集中在 CPU 的中断系统内,也有的是分散在各个中断源的接口电路中
中断请求触发器越多,说明计算机处理中断的能力越强
中断判优逻辑
各中断源如果同时向 CPU 提出请求怎么办?
-
硬件实现(排队器)
-
分散在各个中断源的接口电路中 (链式排队器)
-
集中在 CPU 内部
-
-
软件实现 (程序查询)
编写代码实现查询中断服务程序
中断服务程序入口地址查询
如何寻找中断服务执行入口地址?
通常有两种方法寻找入口地址:硬件向量法和软件查询法
硬件向量法
-
输入:排队器的输出 ;输出:中断向量地址
-
通过输出的向量地址,再如下的中断向量地址表里去查询中断服务程序入口地址
软件查询法
- 用软件寻找中断服务程序入口地址的方法称为软件查询法,框图类似中断判优逻辑的软件实现
- 相比于硬件向量法,软件查询查询时间长,但是方便用户使用更加灵活
中断响应
CPU 在什么情况下以各种方式来响应中断?
响应中断的条件
-
响应中断条件:允许中断触发器 EINT = 1
-
响应中断的时间:指令执行周期结束时刻由 CPU 发出查询条件
-
中断隐指令
所谓中断隐指令,即在机器指令系统中没有的指令,它是CPU在中断周期内由硬件自动完成的一条指令
-
保存程序断点:断点存于特定地址内 ; 断点进栈
-
寻找服务程序入口地址(如上)
-
硬件关中断(防止其他优先级低的中断请求打断当前的中断)
-
保护现场和恢复现场
保护现场和恢复现场是CPU在中断处理过程中采取的操作,通常用于单片机和嵌入式系统
如何保护现场?
- 保护断点: 中断隐指令完成如上
- 保护CPU内部各寄存器内容: 中断服务程序完成
中断服务程序的四个步骤
- 保护现场 PUSH (保存在堆栈中)
- 其他服务程序 视不同请求源而定
- 恢复现场 POP
- 中断返回 IRET
如何恢复现场?
恢复现场是指在中断返回前,必须将寄存器的内容恢复到中断处理前的状态,这部分工作也由中断服务程序完成如上
多重中断
概述
当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个新的请求,暂时停止正在运行的服务程序,转去执行新的中断服务程序,这称为多重中断,又称中断嵌套
实现多重中断的条件
-
提前设置开中断指令
-
优先级别高的中断源有权中断优先级别低的中断源
屏蔽技术和屏蔽字
屏蔽技术
作用:使某个中断源无法向 CPU 提出中断请求,也不能参加中断优先级排队器
触发器 D、中断请求触发器 INTR、 屏蔽触发器 MASK
如果排队器集中设在 CPU 内,加上屏蔽条件,就可组成具有屏蔽功能的排队器如下图

屏蔽字
对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字

屏蔽技术可以改变改变处理优先级等级
优先级包含响应优先级和处理优先级
- 响应优先级是指 CPU 响应各中断源请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动
- 处理优先级是指 CPU 实际对各中断源请求的处理优先次序(如果不采用屏蔽技术,响应的优先次序就是处理的优先次序)
修改屏蔽字前后的变化

新屏蔽字的设置

多重中断的断点保护
多重中断时,每次中断出现的断点都必须保存起来
- 断点可以保存在堆栈中,由于堆栈先进后出的特点,实现对断点的保存和恢复
- 断点也可保存在特定的存储单元内,在中断服务程序中的开中断指令之前,必须先将 0地址单元的内容转存至其他地址单元中,才能真正保存每一个断点
相关文章:

计算机组成原理 — CPU 的结构和功能
CPU 的结构和功能 CPU 的结构和功能CPU 概述控制器概述CPU 框架图CPU 寄存器控制单元 CU 指令周期概述指令周期的数据流 指令流水概述指令流水的原理影响流水线性能的因素流水线的性能流水线的多发技术流水线结构 中断系统概述中断请求标记和中断判优逻辑中断请求标记 INTR中断…...

npm包安装与管理:深入解析命令行工具的全方位操作指南,涵盖脚本执行与包发布流程
npm,全称为Node Package Manager,是专为JavaScript生态系统设计的软件包管理系统,尤其与Node.js平台紧密关联。作为Node.js的默认包管理工具,npm为开发者提供了便捷的方式来安装、共享、分发和管理代码模块。 npm作为JavaScript世…...

序列化结构(protobuf)实现一个TCP服务器(C++)
Protocol Buffers(protobuf)是一种由Google开发的用于序列化结构化数据的方法,通常用于在不同应用程序之间进行数据交换或存储数据。它是一种语言无关、平台无关、可扩展的机制,可以用于各种编程语言和环境中。 1、首先建立proto文…...

Python中的list()和map() 用法
list() 在Python中,list() 是一个内置函数,用于创建列表(list)对象。它有几个不同的用途,但最常见的是将一个可迭代对象(如元组、字符串、集合或其他列表)转换为一个新的列表。 以下是一些使用…...

公网环境下如何端口映射?
公网端口映射是一种网络技术,它允许将本地网络中的设备暴露在公共互联网上,以便能够从任何地方访问这些设备。通过公网端口映射,用户可以通过互联网直接访问和控制局域网中的设备,而无需在本地网络中进行复杂的配置。 公网端口映射…...

7-36 输入年份和月份
输入一个年份和月份,输出这个月的天数。 输入格式: 输入年份year和月份month,年份和月份中间用一个空格隔开。 输出格式: 输入year年的month月对应的天数。 输入样例: 2000 2输出样例: 29输入样例: 1900 2输出样例: 28输入样例: 1900 6输出样例…...

Linux C++ 023-类模板
Linux C 023-类模板 本节关键字:Linux、C、类模板 相关库函数:getCapacity、getSize 类模板语法 类模板的作用:建立一个通用的类,类中的成员 数据类型可以不具体制定, 用一个虚拟的类型代表语法: templa…...

Android图形显示架构概览
图形显示系统作为Android系统核心的子系统,掌握它对于理解Android系统很有帮助,下面从整体上简单介绍图形显示系统的架构,如下图所示。 这个框架只包含了用户空间的图形组件,不涉及底层的显示驱动。框架主要包括以下4个图形组件。…...

算法学习17:背包问题(动态规划)
算法学习17:背包问题(动态规划) 文章目录 算法学习17:背包问题(动态规划)前言一、01背包问题:1.朴素版:(二维)2.优化版:(一维…...

axios-mock-adapter使用
文章目录 1. 安装 axios-mock-adapter2. 引入所需的库3. 创建一个模拟适配器实例4. 定义模拟响应5. 在你的代码中使用 axios6. 在测试或开发完成后清理模拟 axios-mock-adapter 是一个用于模拟 axios HTTP 请求的库。它允许你在测试或开发过程中,为 axios 实例提供…...

基于单片机的家用无线火灾报警系统设计
摘 要:针对普通家庭的火灾防范需求,设计一种基于单片机的家用无线智能火灾报警系统。该系统主要由传感器、单片机、无线通信模块、GSM 模块、输入显示模块、声光报警电路和GSM 报警电路组成。系统工作时,检测部分单片机判断是否发生火灾,并将信息通过无线通信模块传…...

LangChain:索引(Indexes)--基础知识
引言 在当今信息爆炸的时代,如何高效地获取、处理和利用信息成为了关键。LangChain,作为一种先进的语言模型框架,提供了强大的索引功能,帮助用户更好地管理和应用文本数据。本文将详细介绍LangChain索引中的几个核心组件…...

Cortex-M4架构
第一章 嵌入式系统概论 1.1 嵌入式系统概念 用于控制、监视或者辅助操作机器和设备的装置,是一种专用计算机系统。 更宽泛的定义:是在产品内部,具有特定功能的计算机系统。 1.2 嵌入式系统组成 硬件 ①处理器:CPU ②存储器…...

对称排序(蓝桥杯)
文章目录 对称排序问题描述模拟 对称排序 问题描述 小蓝是一名软件工程师,他正在研究一种基于交换的排序算法,以提高排序的效率。 给定一个长度为 N 的数组 A,小蓝希望通过交换对称元素的方式对该数组进行排序。 具体来说,小蓝…...

React - 你使用过高阶组件吗
难度级别:初级及以上 提问概率:55% 高阶组件并不能单纯的说它是一个函数,或是一个组件,在React中,函数也可以做为一种组件。而高阶组件就是将一个组件做为入参,被传入一个函数或者组件中,经过一定的加工处理,最终再返回一个组件的组合…...

【C语言】结构体、枚举、联合(自定义类型)
文章目录 前言一、结构体1.结构体的声明2.结构体的自引用3.结构体变量的定义和初始化4.结构体成员的访问5.结构体内存对齐(重点)6.#pragma修改默认对齐数7.结构体传参 二、位段1.位段的声明2.位段的内存分配3.位段的跨平台问题 三、枚举四、联合 &#x…...

用vue.js写案例——ToDoList待办事项 (步骤和全码解析)
目录 一.准备工作 二.编写各个组件的页面结构 三.实现初始任务列表的渲染 四.新增任务 五.删除任务 六.展示未完成条数 七.切换状态-筛选数据 八.待办事项(全)代码 一.准备工作 在开发“ToDoList”案例之前,需要先完成一些准备工作&a…...

提高大型语言模型 (LLM) 性能的四种数据清理技术
原文地址:four-data-cleaning-techniques-to-improve-large-language-model-llm-performance 2024 年 4 月 2 日 检索增强生成(RAG)过程因其增强对大语言模型(LLM)的理解、为它们提供上下文并帮助防止幻觉的潜力而受…...

Rust 练手小项目:猜数游戏
好久没写 Rust 了,参考《Rust 程序设计语言》写了一下猜数游戏。差不多 40 行,感觉写起来真舒服。 use rand::Rng; use std::{cmp::Ordering, io};fn main() {let secret_number rand::thread_rng().gen_range(0..100);println!("[*] Guess the n…...

蓝桥杯物联网竞赛_STM32L071_16_EEPROM
仍然是没有考过的知识点 朴素的讲就是板子中一块不会因为断电重启而导致数值初始化的一片地址 要注意的是有时候容易把板子什么写错导致板子什么地址写坏了导致程序无法烧录,这个时候记得一直按flash键烧录,烧录时会报错,点击确定࿰…...

复习知识点整理
零碎语法 1.导入某个文件夹的index文件,index可以省略(这里导入的是router和store文件下的index.js文件) 2.路由懒加载 this 1.在vue文件中使用router\store对象时 this:普通函数的this指向vue实例对象(在没有明确指向的时候…...

7款公司电脑监控软件
7款公司电脑监控软件 研究证明,人们在家办公的效率比在办公室办公的效率低一半,其中原因是缺少监督,即便在公司办公,还存在员工偷闲的时刻,比如聊天、浏览无关网站、看剧、炒股等,企业想提高员工的工作效率…...

服务器 安装1Panel服务器运维管理面板
服务器 安装1Panel服务器运维管理面板 SSH链接服务器安装1Panel 出现此提示时输入目标路径,须以“/”开头,默认:/opt,本例:/www。 出现此提示时输入目标端口,须未被使用的端口,默认࿱…...

最大花之能量(蓝桥杯)
文章目录 最大花之能量问题描述动态规划 最大花之能量 问题描述 在一个神奇的王国里,有一个美丽的花园,里面生长着各种奇妙的花朵。这些花朵都有一个特殊的能力,它们能够释放出一种叫做「花之能量」的神秘力量。每朵花的花之能量都不同&…...

探索算力(云计算、人工智能、边缘计算等):数字时代的引擎
引言 在数字时代,算力是一种至关重要的资源,它是推动科技创新、驱动经济发展的关键引擎之一。简而言之,算力即计算能力,是计算机系统在单位时间内完成的计算任务数量或计算复杂度的度量。随着科技的不断发展和应用范围的不断扩大…...

数据可视化-ECharts Html项目实战(10)
在之前的文章中,我们学习了如何在ECharts中编写雷达图,实现特殊效果的插入运用,函数的插入,以及多图表雷达图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错&…...

甲方安全建设之研发安全-SCA
前言 大多数企业或多或少的会去采购第三方软件,或者研发同学在开发代码时,可能会去使用一些好用的软件包或者依赖包,但是如果这些包中存在恶意代码,又或者在安装包时不小心打错了字母安装了错误的软件包,则可能出现供…...

[html]网页结构以及常见标签用法
哎,我服了,明明之前学了html的,但时间一长我就忘记了,本来flask学到视图了,但涉及到了html我觉得还是需要重新回顾一下,,,,,, web开发技术栈一共有3门语言。分别是: HTML:译作超文本标记语言&am…...

【C语言】if语句选择题
前言 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 题目七: 题目八: 前言 关于if语句相关的选择题 题目一: 关于if语句说法正确是:( ) A .if语…...

ZLMediaKit ubantu 下编译
1、获取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init二、依赖库 Debian系(包括ubuntu)系统下安装依赖的方法: #除了…...