计算机的基本组成是什么样子的?

作者:小牛呼噜噜 | https://xiaoniuhululu.com
计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」

前言

软件行业非常迅速,以前流行C,C++java,spring,现在springcloud,docker,微服务,k8s云原生等概念火热,还有各种各样的新技术在不断的涌现出来。但是计算机底层原理 这几十年一直并没有太大的变化,与其不断去尝试新技术,不如耐住性子,深入学习底层的知识,好好修炼”内功”。

计算机的软硬件概念

计算机系统由”软件”和”硬件”2大部分组成

计算机的基本组成是什么样子的?

其中软件如果按应用范围分类,一般分为 系统软件和应用软件

  1. 系统软件是各类操作系统,如windows、Linux、UNIX等,还包括操作系统的补丁程序及硬件驱动程序,都是系统软件类。
  2. 应用软件可以细分的种类就更多了,如工具软件、游戏软件、管理软件等都属于应用软件类。

其中计算机硬件经过发展历程:

  1. 电子管时代,速度每秒几千次~几万次
  2. 晶体管时代,速度每秒几万次~几十万次
  3. 中小规模集成电路时代,速度每秒几十万次~几百万次
  4. 大规模、超大规模集成电路时代,速度每秒上千万次~万亿次

冯·诺依曼体系结构

1946年,第一台计算机ENIAC诞生,人类进入计算机时代,冯诺依曼和其他计算机科学家们 提出了计算机 "存储程序"的计算机设计理念,即将计算机指令进行编码后存储在计算机的存储器中,需要的时候可以顺序地执行程序代码,从而控制计算机运行。还定义计算机基本结构为 5 个部分,分别是 运算器、控制器、存储器、输入设备、输出设备,这就是 冯.诺依曼计算机

计算机的基本组成是什么样子的?

实线箭头表示 数据线,虚线箭头表示 控制线和反馈线

冯·诺依曼计算机特点:

  1. 计算机由 运算器、存储器、控制器、输入设备和输出设备 五大部件组成, 侧重于硬件抽象
  2. 将计算机的计算和记忆分开,负责计算的部分由运算器和控制器组成,负责记忆的部分称为存储器
  3. 指令和数据均用 二进制数 表示
  4. 指令和数据以同等地位存放于存储器内,并可 按地址寻访
  5. 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置
  6. 指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下,可根据运算结果或根据设定的条件改变执行顺序
  7. 以运算器为中心

现代计算机系统与冯·诺依曼计算机差别不大,最大的区别冯·诺依曼计算机 是 以运算器为中心的,而现代计算机 以储存器为中心:

计算机的基本组成是什么样子的?

这张图很重要,大家得记住,我们后文会对其,进行讲解和补充!

接下来,我们分别介绍一下这几个重要组成部分

  1. 存储器

存储器是用来存放数据和程序。存储器 包含主存和辅存

  • 主存:直接与CPU交换信息,就是我们熟悉的内存。常见的有内存条
  • 辅存:辅存可作为主存的后备存储器,不直接与CPU交换信息,容量比主存大,但速度比主存慢。比如机械硬盘、固态硬盘等
  • 我们得注意一下: *能和CPU直接交换信息的只有主存,辅存是不直接与CPU交换信息

  • 运算器

运算器也叫 算数逻辑单元,是进行算数运算和逻辑运算的部件,在控制器的控制下,对取自内存储器的数据进行算术运算或逻辑运算,并将运算的结果送到内存储器。

  1. 控制器

控制器用来控制、指挥程序和数据的输人、运行以及处理运算结果。计算机在工作时,控制器首先从内存储器中按顺序取出一条指令,并对该指令进行译码分析,根据指令的功能向相关部件发出操作命令,使这些部件执行该命令所规定的任务,执行之后再取出第二条指令进行分析执行。如此反复,直到所有指令都执行完成。

  1. 输入设备

输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式,常见的有键盘、鼠标等

  1. 输出设备

输出设备可将机器运算结果转换为人们熟悉的信息形式,如打印机输出、显示器输出等。

  1. 中央处理器(CPU)

由于 运算器控制器在逻辑关系和电路结构上联系十分精密,特别是大型集成电路时代的到来,所以现如今往往会 将运算器和控制器集成到同一个芯片上,统称 在中央处理器(CPU),其功能是从内存储器中取出指令、解释指令并执行指令。

  1. 现代CPU内部 还有一个常见的组件,寄存器

寄存器是CPU内部用来存放数据的一些小型的存储区域,用来暂时存放参与运算的数据以及运算结果。寄存器由电子线路组成,存取速度非常快,与CPU的速度相当,寄存器的成本较高,因而数量较少。在CPU中至少要有六类寄存器: 指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。

大家对寄存器感兴趣的话,可以看看我之前一篇文章: https://mp.weixin.qq.com/s/_udXTFH7Nkfg8wPsKKfG6A

总线

总线是贯穿整个系统的是一组电子管道,称作 总线,它携带信息字节并负责在各个计算机部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。现在的大多数机器字长要么是4个字节(32位),要么是8个字节(64位)。本文我们不对字长做任何固定的假设

另外 计算机最小的存储单位字节( byte,1 字节等于 8 位( 1Byte=8bit),而 位/比特(bit)计算机最小的数据传输单位1 字节等于 8 位(1Byte=8bit)这个换算规则大家需要牢记

我们顺便把内存相关的知识串起来:计算机将8个bit归为一组,为字节,每一个字节都对应一个内存地址。内存的地址是从 0 开始编号的,然后自增排列,最后一个地址为内存总字节数 - 1。CPU只需要知道某个数据类型的地址, 就可以直接去到对应的内存位置去提取数据了。

总线可分为 3 种:

  • 地址总线,一般用于指定 CPU 将要操作的内存地址;
  • 数据总线,一般用于读写内存的数据;
  • 控制总线,一般用于发送和接收信号,比如中断、设备复位等信号,CPU 收到信号后,通过控制总线进行响应;

计算机为什么普遍采用二进制?

这是一个很常识性但非常重要的问题, 冯.诺依曼计算机也叫 存储程序 计算机,其中”存储程序”的概念是 指 将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。

我们更熟悉十进制的运算,0、1、2、3、4、5、6、7、8、9十个数字,逢十进一。比如中国人从小背的”九九乘法表”其实就是十进制变种。但是计算机中使用二进制,只有0和1两个数字,逢二进一。

采用二进制的原因:

  1. 二进制在自然界中最容易被表现出来。自然界中二值系统非常多,电压的高低、水位的高低、门的开关、电流的有无等等都可以组成二值系统,都可以用来做计算机。
  2. 计算机依靠电力工作,通过电子原件的电压高低反应,很容易就表现出二进制的特性。从某种意义上说,中国古人的八卦是利用符号的二元形态来表示事物,这一点与二进制颇为相同。

64位和32位CPU的区别

64位、32位指的是 CPU寄存器数据宽度,也叫 CPU 的位宽,他们最主要区别在于 CPU一次能计算多少字节数据

  • 32位CPU,表明处理器 一次可以计算 4 个字节(Byte),即一次可以计算32位(bit)数据。
  • 64位CPU,表明处理器 一次可以计算 8 个字节(Byte),即一次可以计算64位(bit)数据。

CPU的位数越高也将会使它的寻址范围、最大内存容量、数据传输和处理速度、数值精度等指标成倍增加,也就是CPU的处理能力得到大幅提升

我们都知道, 32位CPU最大支持4G内存,这是怎么算出来的? 2^32B = 4GB,2^35b = 4GB,注意B和b的区别
“CPU中32位”中的”位”并不是 内存中的”位bit”的概念,对应到内存中其实是”字节Byte”
由于32位最大内存寻址能力只能达到是4G左右,我们就算给32位的电脑装8G的内存条,也无法提高其计算能力

计算机性能

接下来介绍一下关于计算机性能相关的基本概念:

储存器的性能指标

储存器的性能指标主要和以下3个方面有关:

  1. 存储容量:存储单元个数 * 储存字长(如1M*8bit)

计算机的基本组成是什么样子的?

其中:

  • MAR位数反映储存单元的个数,即最多能表示多少个不同的状态

n个2进制位能表示 2^n个状态,
2^10=1 K,2^20=1 M,2^30=1 G,2^40=1 T

  • MDR位数=储存字长=每个储存单元的大小

  • 单位成本:每位价格=总成本/总容量。

  • 存储速度:数据传输率=数据的宽度/存储周期

另外还有3个概念,再了解一下:

  • 存取时间 又称存储器访问时间,是指从启动一次存储器操作到完成该操作所经历的时间。
  • 存储周期 又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立地访问存储器操作(读或写操作)之间所需的最小时间间隔。
  • 存储器带宽 是单位时间里存储器所存取得信息量。

CPU的性能指标

当我们去京东淘宝上去买,CPU的时候,商家一般会写下面的信息:

12代 酷睿 i7-12700KF 处理器 12核20线程 单核睿频至高可达5.0Ghz 25M三级缓存 台式机CPU

其中除了一下CPU的型号,5.0Ghz是表示CPU性能的一个重要的指标

CPU主频:CPU内核的时钟频率,表示在 CPU内数字脉冲信号震荡的频率,常用单位为Hz。平时我们打游戏常说的超频,超的就是这个CPU主频。
CPU时钟周期:通常为节拍脉冲或T周期,即 主频的倒数,它是CPU中基本时间单位。
执行一条指令的耗时 = CPI * CPU时钟周期, 其中CPI表示 执行一条指令所需的时钟周期数
一段程序的耗时=指令数*CPI * CPU时钟周期, 如果我们想要提升CPU性能问题,其实就是要优化这三者。

系统整体的性能指标

计算机系统的性能主要受是下面3个指标

  1. 数据通路带宽

数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据)

  1. 吞吐量
    指系统在单位时间内处理请求的数量。 它取决于信息能多快地输入内存,CPU能多快地取指令,数据能多快地从内存取出或 存入,以及所得结果能多快地从内存送给一台外部设备。这些步骤中的每一步都关系 到主存,因此,系统吞吐量主要取决于主存的存取周期。
  2. 响应时间
    指从用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需 要的结果的等待时间。 通常包括CPU时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储 器访问、I/O操作、操作系统开销等时间)

跑分软件,像鲁大师等,就是把多个预设好的程序(基准程序)在计算机上运行,然后根据运行需要 的时间,算出一个分数来评估计算机的性能,以便和其他计算机进行比较。

计算机功耗

通过上文 CPU 执行时间 = 指令数*CPI * CPU时钟周期,我们知道程序的 CPU 的性能 受到 指令数、CPI 以及 CPU 主频 的影响, 指令数或者 CPI 工程师,由于影响条件复杂,没法直接干预,或者可能反向干预。主要手段是提高CPU的主频, CPU 变得更快,程序的执行时间自然就会缩短 , 主频越高越好?答案是否定的
由本文一开始,我们知道现在的计算机里的CPU,都是超大规模集成电路,实际上都是一个个晶体管组合而成的。通过电路的开关的”打开”和”关闭”,来实现计算和储存的能力。要想计算得更快,从硬件角度来说,就是单位体积多放一些晶体管。从软件角度,手动将CPU的主频提升。但这2种手段,会增加CPU的耗电和散热,即功耗增加。
虽然可以通过降低电压来缓解功耗的问题,但是一味地提升主频,提升的性能效果日益衰弱。后面为了提升性能,不再依赖堆硬件方面,计算机采用了从单核CPU到多核CPU,将CPU执行任务流水线化,高并发多线程等等更多的手段

参考资料:
深入理解计算机系统
计算机组成原理
计算机组成原理(第2版)-唐朔飞
深入浅出计算机组成原理
https://blog.csdn.net/ZCMUCZX/article/details/80026508
https://www.zhihu.com/question/309983509
https://cpu.zol.com.cn/445/4453295.html

本篇文章到这里就结束啦,很感谢你能看到最后,如果觉得文章对你有帮助,别忘记关注我!更多精彩的文章

计算机的基本组成是什么样子的?

Original: https://www.cnblogs.com/xiaoniuhululu/p/16779265.html
Author: 小牛呼噜噜
Title: 计算机的基本组成是什么样子的?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/800990/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 集成学习之Stacking(堆栈)方法

    文章目录 集成学习(Ensemble learning) Stacking(堆栈)方法定义 Stacking中的交叉验证 Stacking中的过拟合问题 其他 集成学习(Ensem…

    Python 2023年9月16日
    050
  • pandas的Series和DataFrame

    文章目录 pandas的核心类 Series(数据系列)带标签的数组 * 一、创建Series对象 二、Series索引和切片 三、Series的基本用法 – 1.处理…

    Python 2023年8月8日
    034
  • 使用C#写一个Windows服务

    创建服务程序 可能你的VS里面没有【Windows服务】这个模板,那么你就需要通过”打开Visual Studio安装程序”,通过VisualStudio …

    Python 2023年10月7日
    042
  • stm32F103C8T6通过写寄存器点亮LED灯

    因为我写寄存器的操作不太熟练,所以最近腾出时间学习了一下怎么写寄存器,现在把我的经验贴出来,如有不足请指正 我使用的板子是stm32F103C8T6(也就是最常用的板子),现在要通…

    Python 2023年6月6日
    060
  • windows 2012 python IIS flask 发布部署详细记录

    windows 2012 python IIS flask 发布部署详细记录 python flask 最好是部署到linux + nginx中,但因各种原因,这里记录下在wind…

    Python 2023年8月14日
    043
  • C++绘图库matplotlibcpp在Visual Studio中的配置方法

    本文介绍在 Visual Studio软件中配置、编译 C++ 环境下 matplotlibcpp库的详细方法。 matplotlibcpp库是一个 C++ 环境下的绘图工具,其通…

    Python 2023年8月30日
    054
  • 文盘Rust — struct 中的生命周期

    最近在用rust 写一个redis的数据校验工具。redis-rs中具备 redis::ConnectionLike trait,借助它可以较好的来抽象校验过程。在开发中,不免要定…

    Python 2023年10月19日
    039
  • 文件概述

    我们这里讨论的文件并不是文件夹中的纸质文件,特指计算机中的文件。 那计算机中的文件到底是什么呢? 什么是文件 计算机文件是存储在存储器上的数据序列,可以包含任何数据内容。 概念上,…

    Python 2023年6月11日
    055
  • 基于pytorch用yolov5算法实现目标检测与分割

    适合新手入门玩一下目标的检测和分割,大概了解yolov5算法的一些基本操作。 1.1 课题背景 目标检测的目的是判断在单张图片或者连续图片(视频)中,感兴趣的单个或者 多个物体是否…

    Python 2023年9月27日
    046
  • python iloc用法_pandas.DataFrame.loc和.iloc用法详解

    .loc[ ]与.iloc[ ]用法详解 pandas.DataFrame.loc pandas.DataFrame.iloc 通过.loc[ ]或者.iloc[ ]获取数据时需要…

    Python 2023年8月19日
    046
  • Python 爬虫爬取当当网

    一、模块使用 requests >>> pip install requestsparsel >>> pip install parselcsv…

    Python 2023年5月24日
    0119
  • 机器学习-数据科学库-day2

    机器学习-数据科学库-day2 matplotlib * 在一个图上绘制多个折线图 对比常用统计图 绘制散点图 绘制条形图 绘制条形图(横向) 绘制多个条形图 绘制直方图 用条形图…

    Python 2023年9月1日
    048
  • Docker构建python环境

    Docker构建python环境 –潘登同学的Linux笔记 文章目录 * – Docker构建python环境 –潘登同学的Linux笔记* …

    Python 2023年8月9日
    047
  • 新冠疫情预测模型–逻辑斯蒂回归拟合、SEIR模型

    通过构建统计学模型、数学模型,或者利用机器学习、深度学习方法拟合疫情发展趋势,利用历史数据对未来的确诊病例等疫情形势进行预测,比如说,逻辑斯蒂生长曲线拟合数据,预测未来几天可能的发…

    Python 2023年10月27日
    041
  • 使用 JavaScript 检测用户是否在线

    💂 个人网站:【海拥 】【摸鱼游戏 】【神级源码资源网站 】 🤟 前端学习课程:👉【28个案例趣学前端 】【400个JS面试题 】 *💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点…

    Python 2023年11月6日
    051
  • python pandas dataframe 排序_Pandas dataframe按数量排序

    我有一个Pandas dataframe,其中每一列代表一个单独的属性,每一行保存特定日期的属性值:import pandas as pd dfstr = \ ”&#8…

    Python 2023年8月8日
    046
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球