计算机组成原理|第一章(笔记)

news2024/12/28 20:27:07

目录

  • 第一章 计算机系统概论
    • 1.1 计算机系统简介
      • 1.1.1 计算机的软硬件概念
      • 1.1.2 计算机系统的层次结构
      • 1.1.3 计算机组成和计算机体系结构
    • 1.2 计算机的基本组成
      • 1.2.1 冯 · 诺伊曼计算机的特点
      • 1.2.2 计算机的硬件框图
      • 1.2.3 计算机的工作过程
    • 1.3 计算机硬件的主要技术指标
      • 1.3.1 机器字长
      • 1.3.2 运算速度
      • 1.3.3 存储容量


第一章 计算机系统概论


1.1 计算机系统简介


1.1.1 计算机的软硬件概念

计算机系统是由 软件硬件 两大部分组成的。

  • 硬件:指计算机的实体部分,它由看得见摸得着的各种电子元器件、各类光、电、机设备的实物组成,如主机、外设等等
  • 软件:它是看不见摸不着的,由人们事先编制成具有各类特殊功能的信息组成。通常把这些信息,诸如各类程序寄寓于各类媒体中,如 RAM、ROM、磁带、磁盘、光盘等

计算机的软件通常又可分为两大类:系统软件应用软件

  • 系统软件:又称为系统程序,主要用来管理整个计算机系统,监视服务,使系统资源得到合理调度,确保高效运行。它包括:表中程序库、语言处理程序、操作系统、服务性程序、数据库管理系统、网络软件等等
  • 应用软件:又称为应用程序,它是用户根据任务需要所编制的各种程序。如科学计算程序、数据处理程序、过程控制程序、事务管理程序等等

在这里插入图片描述

硬件是计算机的物理基础,它决定了计算机系统的瓶颈在哪,而软件又决定了可以将硬件的性能发挥到什么样的程度,所以,计算机性能的好坏取决于 “软”、“硬” 件功能的总和。


1.1.2 计算机系统的层次结构

计算机的解题过程:
在这里插入图片描述
现代计算机的解题过程通常是先由用户用高级语言编写程序(称作源程序),然后将它和数据一起送入计算机内,再由计算机将其翻译成机器能识别的机器语言程序(称作目标程序),机器自动运行该机器语言程序,并将计算结果输出。

早期只有机器语言,用户编写的机器语言程序,直接在机器上执行,我们把直接执行机器语言的实际机器称 M1

在这里插入图片描述
20 世纪 50 年代开始出现了符号式的程序设计语言,即汇编语言,它使程序员摆脱了繁杂而又易错的二进制代码编写程序,但是没有机器能直接识别这种汇编语言程序,必须先将汇编语言程序翻译成机器语言程序后,才能被机器接受并自动运行。我们把具有翻译功能的汇编程序的计算机看作一台 M2 机器。

两级层次结构的计算机系统:

在这里插入图片描述
20 世纪 60 年代开始出现了各种面向问题的高级语言,如 FORTRAN、BASIC、Pascal、C 等等。这类高级语言对问题的描述十分接近人们的习惯,给程序员带来了极大的方便,当然,M1 机器本身是不能识别高级语言的,因此,在进入 M1 机器运行前,必须先将高级语言程序翻译成汇编语言程序,然后再将其翻译成机器语言程序。我们把将高级语言程序直接翻译成汇编或者机器语言程序的机器称为 M3

三级层次结构的计算机系统:

在这里插入图片描述
由于软件的发展,使实际机器 M1 向上延伸构成了各级虚拟机器。同理 M1 机器内部也可向下延伸而形成下一级的微程序机器 M0 。M0 机器是直接将 M1 机器中的每一条机器指令翻译成一组微指令,即构成一个微程序。微程序机器 M0 可看作是对实际机器 M1 的分解,即用 M0 的微程序解释并执行 M1 的每一条机器指令。

四级层次结构的计算机系统:

在这里插入图片描述
实际上再实际机器 M1 与虚拟机器 M2 之间,还有一级虚拟机器,它是由操作系统软件构成的。操作系统提供了在汇编语言和高级语言的使用和实现过程中所需的某些基本操作,还起到控制并管理系统硬件和软件全部资源的作用。

五级层次结构的计算机系统:

在这里插入图片描述


1.1.3 计算机组成和计算机体系结构

计算机体系结构是指那些能够被程序员所见到的计算机系统的属性,即概念性的结构与功能特性,通常是指用机器语言编程的程序员所看到的传统机器的属性,包括指令集、数据类型、存储器寻址技术、I/O 机理等等,大都属于抽象的属性。

计算机组成是指如何实现计算机体系结构所体现的属性,它包含了许多对程序员来说是不知道的硬件细节。


1.2 计算机的基本组成


1.2.1 冯 · 诺伊曼计算机的特点

1945 年数学家 冯·诺依曼 等人,在研究 EDVAC 机时,提出了 “存储程序” 的概念。以此概念为基础的各类计算机,统称为 冯·诺依曼机。它的特点可归结为:

  • 计算机由运算器存储器控制器输入设备输出设备五大部件组成
  • 指令和数据以同等地位存放于存储器内,并可按地址寻访
  • 指令和数据均以二进制码表示
  • 指令由操作码地址码组成,操作码用来表示操作的性质,地址码用来表示操作数所在存储器中的位置
  • 存储程序,指令在存储器内按顺序存放
  • 机器以运算器为中心,输入输出设备与存储器的数据传送通过运算器

1.2.2 计算机的硬件框图

冯 · 诺伊曼计算机结构框图:
在这里插入图片描述
典型的冯·诺依曼计算机是以运算器为中心的。其中,输入、输出设备与存储器之间的数据传送都需通过运算器。图中实线为数据线,虚线为控制线和反馈线。

各组件的功能:

  • 运算器:完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内
  • 存储器:用来存放数据和程序
  • 控制器:用来控制、指挥程序和数据的输入、运行以及处理运算结果
  • 输入设备:将信息转换成机器能识别的形式,比如键盘、鼠标等
  • 输出设备:将结果转换成人民熟悉的形式,比如打印机输出,显示器输出等

这个结构存在两个问题:

  1. 以运算器为中心,导致运算器成为系统的瓶颈
  2. 不具有层次化的特征

以存储器为中心的计算机硬件框图:

在这里插入图片描述
以存储器为中心,实现输入和输出设备与存储器之间直接的信息交换,图中实现为控制线,虚线为反馈线,双线为数据线。

现代计算机硬件框图:

在这里插入图片描述

由于运算器控制器在逻辑关系和电路结构土联系十分紧密,尤其在大规模集成电路制作工艺出现后,这两大部件往往制作在同一芯片上,因此,通常将它们合起来统称为中央处理器(Central Processing Unit),简称 CPU。把输入设备输出设备简称为 IO设备(Input/Output equipment)。

这样,现代计算机可认为由三大部分组成:CPUIO设备主存储器M.M(Main Memory)。CPUM.M 合起来又可称为主机IO设备 可叫作外部设备

主存储器 M.M 是存储器子系统中的一类,用来存放程序和数据,它可以直接与CPU 交换信息。另一类叫辅助存储器,简称辅存,又叫外存

ALU (Arithmetic Logic Unit)叫做算术逻辑运算单元(简称算逻部件),用来完成算术逻辑运算。CU(Control Unit)叫做控制单元,用来解释存储器中的指令,并发出各种操作命令来执行指令。ALUCUCPU 的核心部件。

I/O设备 也受 CU 控制,用来完成相应的输入、输出操作。

在这里插入图片描述

可见,计算机有条不紊地自动工作,都是在控制器统一指挥下完成的。

系统复杂性管理的方法(3Y):

  • 层次化(Hierachy):将被设计的系统划分为多个模块或子模块
  • 模块化(Modularity):有明确定义(well-defined)的功能和接口
  • 规则化(Regularity):模块更容易被重用

1.2.3 计算机的工作过程

用计算机解决一个实际问题,通常包含两大过程:上机前的各种准备上机运行

  • 上机前的准备
    • (1)建立数学模型
    • (2)确定计算方式
    • (3)编制解题程序
  • 计算机的解题过程
    在这里插入图片描述

存储器的基本组成:
在这里插入图片描述
主存储器(简称主存内存)包括存储体、各种逻辑部件控制电路等。存储体由许多存储单元组成,每个存储单元又包含若干个存储元件(或称存储基元、存储元),每个存储元件能寄存一位二进制代码 “0” 或者 “1”。一个存储单元可存储一串二进制代码,称这串二进制代码为一个存储字,这串二进制代码的个数叫做存储字长

每个存储单元会被赋予一个编号,叫做存储单元的地址号。主存的工作方式就是按存储单元的地址号来实现对存储字各位的存、取。这种存取方式叫做按地址存取,也即按地址访问存储器(简称访存

为了能实现按地址访问的方式,主存中还必须配置两个寄存器 MARMDR

  • MAR(Memory Address Register):存储器地址寄存器,用来存放欲访问的存储单元的地址,其位数对应存储单元的个数(如 MAR 为 10 位,则有 210=1024 个存储单元,记为 1K)。
  • MDR(Memory Data Register):存储器数据寄存器,用来存放从存储体某单元取出的代码或者准备往某存储单元存入的代码,其位数与存储字长相等。

运算器的基本组成及操作过程:
在这里插入图片描述
运算器包括三个寄存器和一个算逻电路 ALU。其中 ACC (Accumulator)累加器MQ (Multiplier-QuotientRegister)乘商寄存器X操作数寄存器。这三个寄存器在完成不同运算时,所存放的操作数类别也各不相同。

在这里插入图片描述
不同机器的运算器结构可能不同。

以下简要分析这种结构的运算器其加、减、乘、除四则运算的操作:

设:M 表示存储器的任意地址号
[M] 表示对应 M 地址号单元中的内容
X 表示 X 寄存器
[X] 表示 X 寄存器中的内容
ACC 表示累加器
[ACC] 表示累加器中的内容
MQ 表示乘商寄存器
[MQ] 表示乘商寄存器中的内容
假设 ACC 中已存有前一时刻的运算结果,并作为下述运算中的一个操作数。则:

  • 加法操作过程:
    • [M] -> X
    • [ACC] + [X] -> ACC

即将 [ACC] 看作被加数,先从内存中取一个存放在 M 地址号内的加数 [M],送至运算器的 X 寄存器中,然后将被加数 [ACC] 与加数 [X] 相加,其结果和保留在累加器 ACC 中。

  • 减法操作过程:
    • [M] -> X
    • [ACC] - [X] -> ACC

即将 [ACC] 看作被减数,先取出减数 [M] 送入 X,再作 [ACC] - [X],其结果差保留在 ACC 中。

  • 乘法操作过程:
    • [M] -> MQ
    • [ACC] -> X
    • 0 -> ACC
    • [X] ×[MQ] -> ACC//MQ (ps:// 表示两个寄存器串联)

即把 [ACC] 看作被乘数,先把在 M 号单元中的乘数 [M] 送入乘商寄存器 MQ,再把被乘数送入 X 寄存器,并将寄存器 A 清 “0”,然后 [X] 和 [MQ] 相乘,其结果积的高位保留在 ACC 中,积的低位保留在 MQ 中。

  • 除法操作过程:
    • [M] -> X
    • [ACC] ÷ [X] -> MQ
    • 余数 R 在 ACC 中

即将 [ACC] 看作被除数,先将在 M 号单元内的除数 [M] 送至寄存器,然后 [ACC] 除以 [X],其结果商暂留于MQ,[ACC] 为余数 R。若需要将商保留在 ACC 中,只需做一步 [MQ] - ACC 即可。

控制器的基本结构:

控制器是计算机组成的神经中枢,它指挥全机各部件自动、协调地工作,它的主要功能是解释指令保证指令的按序执行

完成一条指令操作由取指分析执行三阶段组成。

  • 取指阶段:命令存储器读出一条指令,这叫取指过程(也称取指阶段)
  • 分析阶段:对取出来的指令进行分析,指出该指令要完成什么样的操作,并按寻址特征指明操作数的地址,这叫做分析过程(也称分析阶段)
  • 执行阶段:根据操作数所在的地址,取出操作数并完成某种操作,这叫作执行过程(也称执行阶段)

控制器由程序计数器 PC(Program Counter)指令寄存器 IR(Instruction Register)以及控制单元 CU 几部分组成。
在这里插入图片描述

  • PC:用来存放当前欲执行指令的地址,它与主存的 MAR 之间有一条直接通路,且具有计数功能,即可自动形成下一条指令的地址。
  • IR:用来存放当前的指令,内容来自主存的 MDR,用来分析指令
  • CU:用来分析当前指令所需完成的操作,并发出各种微操作命令序列,用以控制所有被控对象

在这里插入图片描述

主机完成一条指令的过程:

  • 以取数指令为例

在这里插入图片描述

  1. PC 将指令的地址送给 MAR
  2. 再由 MAR 送给存储体
  3. 在控制器的控制下,存储体把指令存储单元当中保存的那条取数指令取出来,送入 MDR 当中
  4. MDR 再将指令送到 IR ,IR 保存当前正在执行的这条指令,完成取指的操作
  5. 将指令寄存器 IR 当中的操作码部分送给 CU,CU 内部分析指令、译码
  6. 在控制器的控制之下,需要把指令当中的地址部分送给存储器,以便将数据从存储体当中取出来,因为 IR 保存了当前指令和当前指令操作数的地址,所以从 IR 的地址码部分,把地址取出,送入 MAR
  7. 然后由 MAR 将该地址送往存储体
  8. 在控制器的控制下,从存储体中将取数指令要取的数取出来存入到 MDR
  9. 最后送到 ACC ,完成取数的操作
  • 以存数指令为例

在这里插入图片描述

  1. PC 将指令的地址送给 MAR
  2. 再由 MAR 送给存储体
  3. 在控制单元 CU 的控制下,从存储体指定的存储单元当中将指令取出来放入到 MDR 当中
  4. MDR 再将指令送到 IR,IR 保存当前正在执行的这条指令,完成取指的操作
  5. 将指令寄存器 IR 当中的操作码部分送给 CU,CU 内部分析指令、译码
  6. CU 控制,将 IR 当中地址码部分送到 MAR
  7. MAR 再送入到存储体
  8. 将 ACC 中的内容送到 MDR
  9. 将 MDR 中的数据保存到存储体中

I/O 的基本结构:
I/O 子系统包括各种外部设备及相应的接口。每一种设备都是由 I/O 接口与主机联系的,他接受 CU 发出的各种控制命令完成相应的操作。如键盘由键盘接口电路与主机联系;打印机由打印机接口电路与主机联系


1.3 计算机硬件的主要技术指标


1.3.1 机器字长

机器字长是指 CPU 一次能处理数据的位数,通常与 CPU 的寄存器位数有关。机器的字长会影响机器的运算速度,倘如 CPU 字长较短,又要运算位较多的数据,那么需要经过两次或多次的运算才能完成,这样势必会影响整机的运行速度。


1.3.2 运算速度

计算机的运算速度与许多因素有关,如:

  • 主频
  • 核数:每个核支持的线程数
  • 吉普森法:综合考虑每条指令的执行时间以及它们在全部操作中所占的百分比
  • CPI:执行一条指令所需时钟周期数
  • MIPS:每秒执行百万条指令
  • FLOPS:每秒浮点运算次数

1.3.3 存储容量

存储容量的大小可以用存放二进制信息的总位数进行衡量。

存储器的容量包括主存容量赋存容量

  • 主存容量:是指主存中存放二进制代码的总数
    • 衡量方法
      • 存储单元个数 × 存储字长
      • 字节数
  • 辅存容量
    • 衡量方法
      • 字节数

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

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

相关文章

kaggle数据集下载当中所遇到的问题

kaggle数据集下载当中所遇到的问题报错分析pip install kagglethe SSL module is not available解决方法pip的版本升级解决办法下载kaggle包kaggle数据集下载问题解决参考内容报错分析 今天在尝试使用pip install kaggle的方法去下载我需要的数据集的时候遇到了一些报错的问题…

二分查找与判定树

二分查找的算法思想二分查找也称“折半查找”,要求查找表为采用顺序存储结构的有序表。本例一律采用升序排列。二分查找每一次都会比较给定值与序列[low,high]的中间元素,该元素的下标为mid (lowhigh)/2,若两者相等,则返回元素的下标为mid;如…

Django的DRF从入门到精通

第一讲:建立纯净版Django项目 ① 创建Django项目 ② 创建app一个 python manage.py startapp APP名字 ③ 在settings里配置rest_framework,把不需要的全部注释掉 INSTALLED_APPS = [# django.contrib.admin,# django.contrib.auth,# django.contrib.contenttypes,# djang

centos7 安装 MySQL5.7

1.下载MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm2.安装 Yum Repository yum -y install mysql57-community-release-el7-10.noarch.rpm3 使用 yum 安装 MySQL yum -y install mysql-community-server若…

推荐系统1--Deepfm学习笔记

目录 1 keras实现Deepfm demo 2 deepctr模版 3 其他实现方式 ctr_Kera 模型 数据集 预处理 执行步骤 4何为focal loss 参考 1 keras实现Deepfm 假设我们有两种 field 的特征,连续型和离散型,连续型 field 一般不做处理沿用原值,离散型一…

Promise学习基础学习 promise封装fs模块、AJAX请求

Promise 是什么? 抽象表达: 1、Promise 是一门新的技术(ES6规范) 2、Promise 是JS中进行异步编程的新解决方案 备注:旧方案是单纯使用回调函数 具体表达: 1、从语法上来说:Promise 是一个构造…

QML Loader(加载程序)

Loader加载器用于动态加载 QML 组件。加载程序可以加载 QML 文件(使用 source 属性)或组件对象(使用 sourceComponent 属性) 常用属性: active 活动asynchronous异步,默认为falseitem项目progress 进度so…

package.json中 版本号详解

1. 版本号简介 软件版本号有四部分组成: 第一部分:主版本号,当进行不兼容的 API 更改时,则升级主版本;第二部分:次版本号,当以向后兼容的方式添加功能时,则升级次版本;…

FPGA实现SDI视频编解码 SDI接收发送,提供2套工程源码和技术支持

目录1、前言2、设计思路和框架SDI接收SDI缓存写方式处理SDI缓存读方式处理SDI缓存的目的SDI发送3、工程1详解4、工程2详解5、上板调试验证并演示6、福利:工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片&#xff0…

【玩转c++】vector讲解和模拟底层实现

本期主题:vector的讲解和模拟实现博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐vector的介绍及使用1.1vector的介绍vector其实就是一个数组的模板 ,存放的数据可以改变而已…

不想长大,却又期待成长

长大后的世界、 会让我觉得很陌生、很陌生、 为什么我们都要长大、 为什么要学会独立?甚至还恨害怕长大。. 因为没有依靠、没有安全感、 虽然我知道、总有一天我要步入这个大人的世界、 可是不想、害怕、害怕自己会受伤、 世界的变化、太快了、太快了、 成人的世…

PMP项目管理项目运行环境

目录1 概述2 事业环境因素和组织过程资产3 组织系统3.1 概述3.2 组织治理框架3.2.1 治理框架3.2.2 项目治理3.3 管理要素3.4 组织结构类型3.4.1 组织结构类型3.4.2 项目管理办公室1 概述 项目所处的环境可能对项目的开展产生有利或不利的影响,这些影响的两大主要来…

数据结构——链表讲解(2)

作者:几冬雪来 时间:2023年3月5日 内容:数据结构链表讲解 目录 前言: 剩余的链表应用: 1.查找: 2.改写数据: 3.在pos之前插入数据: 4.pos位置删除: 5.在pos的后…

零死角玩转stm32初级篇1-STM32如何编译和下载程序

本篇博文目录:一.程序的编译二.程序的下载1.ISP方式2.JTAG方式3.SWD方式4.SWIM方式一.程序的编译 Keil uVision5 工具中有四个编译如图&#xff0c;他们分别表示什么意思,下面进行介绍,解释来源于<<零死角玩转stm32>>。 第一个按钮&#xff1a; Translate 就是翻译…

【项目实战】Linux下安装Nginx教程

一、环境准备 Linux版本&#xff1a;CentOS7 64位 二、具体步骤 2.1 步骤1&#xff1a;确认系统中安装以下基础依赖 确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。 在安装Nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。 yu…

Feature interation—— Bridge、Fusion、Filte

Feature interation&#xff08;特征交互&#xff09;&#xff1a;物品不同模态的表示属于不同的语义空间&#xff0c;并且每个用户对模态也有不同的偏好。因此&#xff0c;多模态推荐系统&#xff08;MRS&#xff09;寻求融合和交互多模态特征来生成用户和物品的特征表示。特征…

STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解

文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置1、STM32CubeMX基本配置2、STM32CubeMX RS485 相关配置四、Vscode代码讲解五、结果演示以及报文解析一、基础知识点 了解 RS485 Modbus协议技术 。本实验是基于STM32F103开发 实现 通过RS-485实现modbus协议。 准备…

DJ1-1 计算机网络和因特网

目录 一、计算机网络 二、Interent 1. Internet 的介绍 2. Internet 的具体构成 3. Internet 提供的服务 4. Internet 的通信控制 一、计算机网络 定义&#xff1a;是指两台以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。 计算机网络向…

Python机器学习17——极限学习机(ELM)

本系列基本不讲数学原理&#xff0c;只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法。 背景&#xff1a; 极限学习机(ELM)也是学术界常用的一种机器学习算法&#xff0c;严格来说它应该属于神经网络&#xff0c;应该属于深度学习栏目&#xff0c;但是我这里把它…

C/C++开发,无可避免的多线程(篇四).线程与函数的奇妙碰撞

一、函数、函数指针及函数对象 1.1 函数 函数&#xff08;function&#xff09;是把一个语句序列&#xff08;函数体, function body&#xff09;关联到一个名字和零或更多个函数形参&#xff08;function parameter&#xff09;的列表的 C 实体&#xff0c;可以通过返回或者抛…