计算机组成原理——第五章中央处理器

半生风雨半生伤,半醉半醒半心凉

文章目录

  • 前言
  • 5.1 CPU的功能和基本结构
  • 5.2 指令周期的数据流
  • 5.3.1 单总线结构
  • 5.3.2 专用通路结构


前言

之前我们就说过CPU主要包括两个部分,运算器和控制器,运算器主要是实现算数运算.逻辑运算,
运算器若是再细分,则可分为ACC累加器,用于存放操作数,或者运算结果,MQ:乘商寄存器,在乘,除运算时,用于存放操作数或者运算结果,MQ乘商寄存器,在乘除运算时,用于存放操作数或运算结果,X 通用的操作数寄存器,用于存放操作数,ALU 算数逻辑单元,通过内部复杂的电路实现算数运算,逻辑运算
控制器可分为CU:控制单元,分析指令,给出控制信号
IR:指令寄存器,存放当前执行的指令
PC:程序计数器,存放下一条指令地址,有自动加1功能,完成一个指令需要取指令PC 分析指令IR 执行指令CU
本章主要讲的问题就是如何控制数据在这些元件之间进行流动的,CU又是如何确定每一步需要做些什么的呢

5.1 CPU的功能和基本结构

cpu的功能
请添加图片描述
运算器和控制器的功能
请添加图片描述
运算器的基本结构
之前我们说过运算器的核心部件是ALU,但是ALU,我们提供操作数,通过ALU 这个逻辑电路的处理可以输出数据,很多时候我们需要把参与的数据提前存放于通用寄存器中
堆栈寄存器SP 保存了堆栈指针,堆栈指针的作用是函数的运行过程中可以会发生函数的调用,程序的执行流发生改变,为了能够使得程序间的相互调用能够完成 堆栈指针指明了当前正在运行的地址在什么位置,因为R0既可以从A输入数据又可以从B 输入数据,所以需要两个线,若是寄存器可以存放16bit的数据,应该是通过十六个线并行的送到ALU的端口的,这种就是称为专用数据通路方式,但是这样也就意味这电路太多,并且可能会有一种情况就是多个寄存器同时并且一直向ALU传输数据,解决方法1,使用多路选择器,根据控制信号选择一路输出,
请添加图片描述
CPU内部总线方式
将所有寄存器的输入端输出端都连接到一条公共的通路上,可以从数据总线上获取输出数据,但是也有一个缺点若是同时通过总线送,则会导致ALU无法判断A,与B的值,一个方法就是设置一个暂存寄存器,先把一个数据送到暂存寄存器中存储起来,不能读入其他通用寄存器是因为其他通用寄存器也可能存放后面需要使用的数据,同时R0给的输入信号不稳定之前,ALU 就会输出信号,此时都在数据总线上 可能会发生冲突,我们的方法是ALU的输出端再加一个暂存寄存器,先把计算的结果放在暂存寄存器中,同时运算器内部还需要一个计数器,如乘的时候需要控制加的次数
请添加图片描述
控制器的基本结构
我们取出一个指令之后要把这个指令存放于IR中,把指令的操作码部分作为指令译码器的输入,然后经过指令译码器中的逻辑电路就能判断出当前是什么指令,然后产生微操作序列,然后我们还需要一个时序系统来产生一个时序信号,注意mar的连线只有一个输入的连线没有输出的连线,当有一个地址信息来到MAR中,这个地址指明了在主存中的地址,我们需要外部的地址总线传送给主存,然后通过外部的数据总线将数据存放于MDR中,我们注意到MDR中加E的表示从外部数据总线 上的输入输出是有效的,不加E的是内部输入输出有效的
用户可以通过条件转移指令或者无条件转移指令来修改PC的值,我们之前说过之前条件转移的时候就使用到PSW的值 ,或者使用CMP比较两个数的时候也会直接影响PSW的值
请添加图片描述

5.2 指令周期的数据流

这一小节中我们对指令的阶段进行一个细化,我们会分析每一个阶段数据流的流向,并且如何安排多条指令的执行
指令周期
取指令是需要访问内存的,也就需要而时间较多,分析指令是cpu来处理的,也就会很快能够完成指令的译码,有的执行指令需要访存 有的不需要,所以导致执行指令的时间差别很大,一个机器周期完成一个较小的子工作,一个指令周期又会包含多个机器周期,并且包含的机器周期数也可能不一样请添加图片描述
如下图左部分 cpu为了区分这四个阶段,也就是设置四个触发器
请添加图片描述
取指周期的一个数据流向
请添加图片描述
间址周期
这里Ad(MDR)->MAR能成功是因为我们取指的时候是先将MDR中的地址先放在MDR中,然后IR在复制一份的,所以MDR中存储的是当前执行的指令的一个信息
请添加图片描述
执行周期
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行的结果,不同的指令的执行周期操作不同,因此没有统一的数据流向
中断周期
之前我们就说过在每一个进程,每一个程序运行的过程中,操作系统都会给程序在主存中开辟一个空间作为运行堆栈,堆栈指针SP会指向当前的栈顶元素,这里与数据结构中有区别,数据结构中地址是从下往上画的,但是操作系统是从上往下画的,也就是我们的栈顶指针是指向低地址部分,所以我们要将一个数压入栈中,就需要先减,此时我们是想把pC的值写入栈顶,CU 通过控制总线启动主存做写操作
请添加图片描述
指令执行方案
单指令周期:对所有的指令都选用相同的执行时间来完成,时间较短的会导致浪费较长的时间,从而导致效率低
多指令周期:其实也就是一个指令执行完了就执行另外一个,
流水线方案:不同指令在不同的时间用到的部件可能不同,所以并行也是存在可行性
请添加图片描述
本节回顾
请添加图片描述

5.3.1 单总线结构

无论我们执行的是什么操作,数据的流向都是不外乎三种,寄存器与寄存器之间,寄存器与主存之间,寄存器与算术逻辑单元之间进行数据交换,无论是数据的输出还是输入操作都是由这个微操作信号发生器来控制的,之前我们说过的一种CPU内部单总线方式,这种也就意味着同一时刻内部总线只允许两个部件之间进行数据交换,为了解决这个问题,有的计算机就设计三个总线,或若是两个会进行数据交换,则在此部件之间设置一个专用的数据通路方式,这里选哟注意执行算数运算的时候,ALU需要两个输入信号必须同时有效,而我们CPU的内部总线同一时刻只能有一个输入信号,我们只有将一个操作数存放于暂存寄存器Y中,若是使用多总线则可不设置暂存寄存器
请添加图片描述

5.3.2 专用通路结构

也就是假如元件之间有数据的交流,则其中的控制信号有效就好,这里用灰色是因为有的并不会给你指令寄存器到cu的通路
请添加图片描述
多路选择器:如下图中的MAR,当有多个输入的时候,可以接一个多路选择器,选择让哪一个输入通过,还有就是使用三态门,只有微操作信号发生器发出一个信号之后,输入的通路才会被导通,
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
本节回顾
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亲测:腾讯云轻量应用服务器性能如何?

腾讯云轻量应用服务器性能评测,轻量服务器CPU主频、处理器型号、公网带宽、月流量、Ping值测速、磁盘IO读写及使用限制,轻量应用服务器CPU内存性能和标准型云服务器CVM处于同一水准,所以大家不要担心轻量应用服务器的性能,腾讯云百…

springboot项目中的mysql用国产数据库达梦替换的相关说明

一、 用“DM管理工具”的“管理用户”创建你需要用户,也是达梦的模式。 用户的权限问题可以直接角色授权,方便一些。 二、借用达梦的“DM数据迁移工具”做数据库的表内容转移。 1. 新建工程、新建迁移 编辑mysql的数据库源 编辑达梦的目的端数据库 选择之…

应届生通过Java培训班转行IT有前途吗?

借用邓小平同志曾说过的一句话:科学技术是第一生产力。IT行业作为科技行业中的一员,不管是在自身的发展,还是支持其他行业的发展中都扮演了不可或缺的角色,“互联网”是社会发展的趋势,前途是无限的。而计算机语言是目…

春季儿童吃什么有助于长高,3款适合孩子长高的食谱做法,学起来

儿童身高一直以来都比较受到父母的关注,虽然身高不能说明一个人的能力有多强,但是会影响到人的外表。身高影响成败,一些专业对身高要求非常严格,因此大部分家长都希望孩子在身高方面能有一定的优势。 春季是孩子分泌生长激素增加时…

你了解C语言中的数组指针和函数指针吗?

如题,本篇文章重点讲解C语言中的数组指针和函数指针。这2种指针其实都不是很常用,个人感觉使用起来代码的可读性不是很高,但是还是需要了解一下。 数组指针 数组指针,即指向数组的指针,是用来存放数组的地址的。那如…

Redis Lua沙盒绕过命令执行(CVE-2022-0543)

一、描述 影响范围:Debian系得linux发行版本Ubuntu Debian系得linux发行版本 其并非Redis本身漏洞,形成原因在于系统补丁加载了一些redis源码注释了的代码 揭露时间:2022.3.8 二、原理 redis在用户连接后可以通过eval命令执行Lua脚本&#x…

Flutter成不了“顶流明星”的7大理由

Flutter是一款由Google推出的跨平台移动应用开发框架,近年来备受关注。尽管Flutter在某些方面表现出色,但仍然有一些人对它的发展前景表示怀疑。近期一些文章针对Flutter的发展提出了不少质疑和批评,称其难以成为移动应用开发的“顶流明星”&…

[Java]面向对象高级篇

文章目录包装类包装类层次结构基本类型包装类特殊包装类数组一维数组多维数组可变长参数字符串String类StringBuilder类内部类成员内部类静态内部类局部内部类匿名内部类Lambda表达式方法引用异常机制自定义异常抛出异常异常的处理常用工具类数学工具类随机数数组工具类包装类 …

在线文章生成工具-原创文章生成工具

在线文章生成器 在线文章生成器是指一种可以在线使用的自动化创造文章的工具。它可以使用自然语言处理(NLP)技术和人工智能算法提供需要的信息,基于标题、关键字,句子关联性等元素自动创造文章内容,涵盖各种类型&…

Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线程异常捕获

场景 Java中Thread类的常用API以及使用示例: Java中Thread类的常用API以及使用示例_霸道流氓气质的博客-CSDN博客 上面讲了Thread的常用API,下面记录下线程的一些常用操作。 注: 博客:霸道流氓气质的博客_CSDN博客-C#,架构之…

Win10,详细永久关闭更新方法(附图文)

一、服务设置 1.同时按下键盘 Win R,打开运行对话框,然后输入命令 services.msc ,点击下方的“确定”打开服务。 2.找到 Windows Update 这一项,并双击打开。 3.停止该服务,启动类型设置为禁用 4.点击恢复&#…

完整指南:如何安装Man手册

Man手册简介 man手册是Unix和类Unix操作系统中的命令行工具,用于提供关于特定命令、函数和文件的帮助文档。它通常包含命令的语法、选项、参数、示例以及其他相关信息。man手册可以通过在终端输入"man"命令,后跟要查看的命令或函数名称来访问…

惠普Probook455电脑开机突然卡住无法进入桌面

惠普Probook455电脑开机突然卡住无法进入桌面解决方法分享。最近有用户使用的惠普Probook455电脑在开机的时候,电脑一直卡在开机的界面上,无法进入到系统中。无论是重启还是安全模式都无法解决问题。那么遇到这个情况怎么去进行问题的解决,来…

远程组态管理的好处

远程组态管理可以简化管理工作,帮助您节省时间和金钱。远程组态管理可以通过各种应用程序来实现,包括: •监控所有设备的状态,以确保它们正常工作。 •记录现场数据,例如温度,压力或流量。 •快速、轻松地…

CSDN粉丝首破一千关,有你名字

2023-4-11,CSDN粉丝首破一千关。 感谢词版本1,哈哈哈哈哈哈哈哈 在编程世界里,人们可以像创造生命一样创造程序,而我对这种创造和创新的热情,从我的csdn博客社区粉丝首次突破一千人的消息中得到了极大的满足和激励。作为一个Pyth…

全面解析反欺诈(羊毛盾)API,助你识别各类欺诈风险

前言 反欺诈(羊毛盾)反机器欺诈 API,是一种基于大数据分析和模型产品的技术,通过输入手机号、手机 IP 地址进行检测,帮助客户识别大量存在恶意的账号。 反欺诈(羊毛盾)API 的作用 反欺诈&…

智慧工厂可视化合集,推动行业数字化转型

图扑软件基于 HTML5(Canvas/WebGL/WebVR)标准的 Web 技术,满足了工业物联网跨平台云端化部署实施的需求,以低代码的形式自由构建三维数字孪生、大屏可视化、工业组态等等。从 SDK 组件库,到 2D 和 3D 编辑,…

【Camunda】 -- Docker 安裝及使用

【Camunda】 -- Docker 安裝及使用1. Docker install Camunda platform1.1 Web2. Big Data -- Postgres1.1 Big Data -- Postgres3.Awakening1.1 Big Data -- PostgresCamunda platform 是一個任務監控的平台。 Camunda Modeler是建模工具。 1. Docker install Camunda platfor…

SpringSecurity之基础认知

前言 之前一直说开一个SpringSecurity的专栏,今天抽空整理一下,准备开始更新。 也欢迎大家订阅此专栏! 什么是SpringSecurity? Spring是非常成功的Java应用框架,目前是非常主流的开发框架。Spring Securtiy正是我们…

基于K-最近邻算法构建红酒分类模型

基于K-最近邻算法构建红酒分类模型 描述 Wine红酒数据集是机器学习中一个经典的分类数据集,它是意大利同一地区种植的葡萄酒化学分析的结果,这些葡萄酒来自三个不同的品种。数据集中含有178个样本,分别属于三个已知品种,每个样本…