【软考中级备考笔记】计算机体系结构

计算机体系结构 2月19日 – 天气:阴转小雪

1. 冯诺依曼计算机体系结构

冯诺依曼将计算机分为了五大部分,分别是:

  • 控制器:主要负责协调指令到执行
  • 运算器:负责算数和逻辑运算
  • 存储器:负责存储在指令执行过程中产生的一些中间变量
  • 输出输出设备:用于接收用户输入并将结果显示给用户

冯诺依曼计算机体系结构由一下特点:

  • 冯·诺依曼计算机主要由五大部件组成,分别是:运算器、控制器、存储器、输入设备和输出设备;

  • 冯诺依曼体系结构的指令和数据均采用二进制码表示;

  • 指令和数据以同等地位存放于存储器中,均可按地址寻访;

  • 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数所在存储器中的位置;

  • 指令在存储器中按顺序存放,通常指令是按顺序执行的,特定条件下,可以根据运算结果或者设定的条件改变执行顺序;

  • 机器以运算器为中心,输入输出设备和存储器的数据传送通过运算器。

在这里插入图片描述

其中,控制器和运算器成为CPU,而CPU+主存成为主机。

在这里插入图片描述

2. 主存储器

主存储体有三部分组成:

  • 存储体:实际保存内容的记忆体
  • MAR:地址寄存器。
  • MDR:数据寄存器。

还有一些其他的概念需要知道:

  • 存储单元:用于存储一串二进制的数据,是寻址的最小单元
  • 存储字长:存储单元中二进制数据的位数
  • 存储字:存储单元中存储的二进制的数据
  • 机器字长:CPU一次所能处理的最大二进制位数

其中,MAR的位数决定了存储单元的长度。比如一个长度为4的MAR,那么对应的存储单元的个数就是16个。

MDR决定了每一个存储单元可以存储的二进制的位数。因此对于一个长度为16位的MDR,所对应的存储字长位16。

在这里插入图片描述

3. CPU

CPU主要由运算器和控制器组成,下面是运算器的一些基本结构:

  • ACC:累加器
  • MQ:乘商寄存器,用于在乘除运算时存放操作数和运算结果
  • X:通用操作数寄存器,用于存放操作数
  • ALU:算数逻辑单元,使用复杂电路实现算数和逻辑运算
  • DR:数据缓存寄存器
  • PSW:程序状态字,用于保存程序运行的状态

在这里插入图片描述

对于控制器来说,主要组成由:

  • CU:控制单元,负责分析指令并给出控制信号
  • IR:指令寄存器,存放当前正在执行的指令
  • PC:程序计数器,存放下一条待执行的指令,有自动加一的功能
  • AR:地址寄存器,存放当前CPU所要访问的内存地址
  • ID:指令译码器,对操作码进行分析

在这里插入图片描述

4. Flynn分类法

主要就是记住不同类型的英文缩写。重点掌握第三条的特点是仅仅理论存在,在实际上不可行。

在这里插入图片描述

5. 指令系统

指令指的是计算机执行某一种操作的命令,是计算机运行的最小单位

一台计算机中所有的指令的集合称为指令系统,也叫做指令集

指令建立了计算机软件与硬件之间沟通的桥梁。

在这里插入图片描述

一条指令由两部分构成:

  • 操作码:指定要进行的操作,可以是加减运算,系统中断等等
  • 地址码:指定要操作的对象的,可能是对象本身,也可能是对象在内存中或寄存器中的存储的地址

指令可以没有地址码,但是必须有操作码。比如系统中断指令就不需要地址码

寻找指令的方式由叫做寻址方式,分为一下两步:

  • 指令寻址:指令寻址就是从PC中获取下一条需要执行的指令
  • 数据寻址:当分析完毕需要执行的指令时,如果指令中包含了操作码,则需要根据操作码去获取到真正要操作的数据,这一过程称之为地址寻址。

在这里插入图片描述

常见的七种寻址方式:

在计算机科学中,寻址方式是指计算机处理器中用于获取内存地址的方法。以下是七种常见的寻址方式:

  • 立即寻址(Immediate Addressing):指令中包含要操作的数据本身的值,而不是该数据的地址。例如,ADD #5 意味着将寄存器中的值与立即数5相加。

    • 实际操作的数据即不存储在内存中,也不存储于内存中。
    • 不访问内存和寄存器。
  • 直接寻址(Direct Addressing):指令中包含要操作数据的内存地址。例如,LOAD 500 意味着从内存地址500中加载数据到寄存器中。

    • 实际操作的数据存储于内存中。
    • 访问一次内存。
  • 间接寻址(Indirect Addressing):指令中包含一个地址,该地址存储了要操作数据的内存地址。例如,LOAD (500) 意味着从存储在地址500处的内存中加载数据到寄存器中。

    • 实际操作的数据存储于内存中。
    • 访问两次内存。第一次取地址,第二次根据地址找到操作数。
  • 寄存器寻址(Register Addressing):指令中包含一个寄存器的编号,该寄存器中存储了要操作的数据。例如,LOAD R1 意味着将寄存器R1中的数据加载到另一个寄存器中。

    • 实际操作的数据存储于寄存器中。
    • 只访问一次寄存器。
  • 寄存器间接寻址(Register Indirect Addressing):指令中包含一个寄存器的编号,该寄存器中存储了要操作数据的内存地址。例如,LOAD (R1) 意味着从寄存器R1中存储的内存地址中加载数据到寄存器中。

    • 实际操作的数据存储于内存中。
    • 需要首先访问寄存器获取到内存地址。然后根据内存地址获取操作数。
  • 相对寻址(Relative Addressing):指令中包含一个相对于程序计数器(PC)的偏移量,该偏移量用于计算要操作数据的地址。例如,JUMP 10 意味着将程序控制转移到当前位置加上10的地址处。

    • 实际操作的数据存储于内存中。
    • 需要访问一次内存
  • 基址寻址(Base Addressing):指令中包含一个基址寄存器的编号和一个偏移量,该偏移量用于计算要操作数据的地址。例如,LOAD 10(R1) 意味着从存储在寄存器R1中的基址加上偏移量10处加载数据到寄存器中。

    • 实际操作的数据存储于内存中。
    • 需要首先从寄存器中获取基址,根据基址和偏移量获取内存地址。然后访问内存根据地址取出操作数。

一般计算机的指令系统主要分为了CISC和RISC,下面是一个简答的对比:

在这里插入图片描述

6. 流水线计算题

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7. 存储系统的层次结构

根据距离CPU的远近程度,划分了一下层级:

在这里插入图片描述

其中cache的作用是为了解决CPU和主存不一致的问题而建立的。

在这里插入图片描述

需要注意的问题

  • cache的作用是为了解决CPU和主存不一致的问题而建立的。
  • cache中存储的是内存中的部分数据
  • CPU先去cache中搜索数据,如果存在则直接返回。如果不存在,则到内存中搜索。同时将搜索到的数据存放到cache中

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

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

相关文章

全网最 2024 GitHub Copilot超详细免费激活教学-干货

全网最🔥 2024 GitHub Copilot免费超详细激活教学 尊重原创,编写不易 ,帮忙点赞关注一下~转载小伙伴请注明出处!谢谢 GitHub Copilot 概述 GitHub Copilot 是由 GitHub 和 OpenAI 合作开发的一款人工智能编程助手。它利用机器…

JS基础(语法结构变量数据类型运算符流程控制)

JS基础(语法结构/变量/数据类型/运算符/流程控制) 目录 JS基础(语法结构/变量/数据类型/运算符/流程控制)什么是js?注释语法语法结构引入方式【1】script标签内部直接书写js代码【2】script标签src属性引入外部js代码 JS基础数据类型变量与常量变量的定义常量的定义…

ONLYOFFICE 8.0:引领数字化办公新纪元

目录 前言 软件安装 软件启动 软件新版本特性 个人评价 总结 前言 在当今快节奏的数字化世界中,高效的办公软件已成为企业竞争力的关键因素。ONLYOFFICE,作为全球领先的办公解决方案提供商,始终致力于通过技术创新来优化用户体验。如今…

Java使用Redis实现消息队列

近期刷Java面试题刷到了“如何使用Redis实现消息队列”,解答如下: 一般使用 list 结构作为队列, rpush 生产消息, lpop 消费消息。当 lpop 没有消息的时候,要适当sleep 一会再重试。若不使用sleep,则可以用…

【力扣 - 二叉树的最大深度】

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 提示&#xff1a; 树中节点的数量在 [0, 10^4] 区间内。 -100 < Node.val < 100方法一&#xff1a;深度优先搜索 思路与算法 如…

Rust中不可变变量与const有何区别?

Rust作者认为变量默认应该是immutable&#xff0c;即声明后不能被改变的变量。这一点是让跨语言学习者觉得很别扭&#xff0c;不过这一点小的改变带来了诸多好处&#xff0c;本节我们来学习Rust的变量。 什么是变量&#xff1f; 如果你初次学习编程语言&#xff0c;变量会是一…

使用go-llama.cpp 运行 yi-01-6b大模型,使用本地CPU运行,速度挺快的

1&#xff0c;视频地址 2&#xff0c;关于llama.cpp 项目 https://github.com/ggerganov/llama.cpp LaMA.cpp 项目是开发者 Georgi Gerganov 基于 Meta 释出的 LLaMA 模型&#xff08;简易 Python 代码示例&#xff09;手撸的纯 C/C 版本&#xff0c;用于模型推理。所谓推理…

手撕C语言习题

定义一个表示公交线路的结构体&#xff0c;要求有线路名称(例如 616)&#xff0c;起始站&#xff0c;终点站&#xff0c;里程等成员&#xff0c; 定义结构体数组&#xff0c;用来存储多条条公交线路信息&#xff0c;要求能够输出从指定起始站发车的所以公交线路信息。 2、定义…

【软考高项】【教材知识梳理】- 15 - 第15章 - 项目风险管理

一、基本问题 1&#xff1a;按照可预测性&#xff0c;风险分哪三类&#xff1f; &#xff08;1&#xff09;已知风险&#xff1a;如项目目标不明确&#xff0c; 过分乐观的进度计划&#xff0c; 设计或施工变更和材料价格波动等。&#xff08;2&#xff09;可预测风险&#xff…

NVIDIA Corporation 在 GitHub 的官方主页

NVIDIA Corporation 在 GitHub 的官方主页 References https://github.com/NVIDIA References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

力扣题目训练(17)

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练&#xff0c;今…

Mysql Day06

sql优化 插入数据 大批量插入数据 主键顺序插入性能高于乱序插入 load data local infile /root/load_user_100w_sort.sql into table tb_user fields terminated by , lines terminated by \n ; 主键优化 这个黄色的都是一个一个Page 主键乱序插入之后会变成1-3-2&#x…

qt - 19种精美软件样式

qt - 19种精美软件样式 一、效果演示二、核心程序三、下载链接 一、效果演示 二、核心程序 #include "mainwindow.h"#include <QtAdvancedStylesheet.h> #include <QmlStyleUrlInterceptor.h>#include "ui_mainwindow.h" #include <QDir&g…

从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作

NIO基础 1.三大组件 1.1. Channel & Buffer Channel 在Java NIO&#xff08;New I/O&#xff09;中&#xff0c;“Channel”&#xff08;通道&#xff09;是一个重要的概念&#xff0c;用于在非阻塞I/O操作中进行数据的传输。Java NIO提供了一种更为灵活和高效的I/O处理方…

基于微信小程序的日语学习的系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

中台的介绍及讲解

什么是中台 公司在新的一年规划中提出了新的发展战略&#xff0c;我们老板听说最近中台的概念很火&#xff0c;让我们调研公司实习中台战略的可行性&#xff0c;于是乎最近一段时间被老板折腾得够呛。刚开始并不理解什么是中台… 因此&#xff0c;写篇博客先简单介绍下什么是中…

mp3播放器

无界面播放器 一、首先需要一个存放音乐文件的路径 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <glob.h> #include <signal.h>int menu(void); void fu…

24-k8s的附件组件-Metrics-server组件与hpa资源pod水平伸缩

一、概述 Metrics-Server组件目的&#xff1a;获取集群中pod、节点等负载信息&#xff1b; hpa资源目的&#xff1a;通过metrics-server获取的pod负载信息&#xff0c;自动伸缩创建pod&#xff1b; 参考链接&#xff1a; 资源指标管道 | Kubernetes https://github.com/kuberne…

静态时序分析:SDC约束命令set_input_delay详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 本章将讨论使用set_input_delay命令对输入端口的约束。首先需要说明的是&#xff0c;在进行静态时序分析时&#xff0c;任何一条时序路径都需要有约束&#xff0…

如何使用安卓平板远程Ubuntu服务器通过VS Code远程开发

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;…