每天进步一点点,每天创造一点点,每天做事多一点,愿你事事都领先,卓越成绩现眼前,美好生活一天又一天。
文章目录
目录
前言
前置知识
认识一下计算机的真实相貌
都说计算机使用二进制传输,为什么要使用二进制呢?
为什么人常用十进制呢?
计算机的发展趋势?
软件介绍
硬件的发展历史
电子管时代
晶体管时代
中小规模集成电路
大规模超大规模集成电路
x64的原理(机器字长)
摩尔定律
软件的发展
计算机目前发展的趋势
一、冯诺依曼体系
二、CPU中央处理器
1.衡量CPU的好坏
2.组成
2.1 指令
2.2 控制器
2.3 运算器
2.4 寄存器
2.5 时钟
2.6 总线接口单元
三、存储器
1. 内存
1. MAR(Memory Address Register,内存地址寄存器)
2. MDR(Memory Data Register,内存数据寄存器)
操作过程示例:
2. 外存
四、输入设备
五、输出设备
六、代码运行各个工作流程
总结
前言
这篇博客中,我们会从软件工程师的角度解释计算机是如何工作的,对于开发人员,我们的主要目标既不是可以造出自己的计算机,也不是介绍如何编程,而是希望让我们了解计算机的核心工作机制后,打破计算机的神秘感,并且有利于理解我们平时编程时的一些行为、动作的历史渊源。大家可以配合下述视频做更详尽的学习和了解。 【计算机科学速成课】[40集全/精校] - Crash Course Computer Science_哔哩哔哩_bilibili
前置知识
认识一下计算机的真实相貌
都说计算机使用二进制传输,为什么要使用二进制呢?
-
电子开关的自然状态: 计算机内部的所有数据处理和存储都是通过电子开关来实现的。这些开关只能处于两种状态中的一种:开或关,即逻辑上的 0 或 1。这种二元性质非常适合使用二进制表示,其中 0 表示开,1 表示关,从而直接对应电子开关的状态。
-
硬件实现简单: 电子设备能够轻松地处理和区分两种状态(低电压和高电压),这使得二进制成为传输和存储数据的理想选择。使用二进制可以简化硬件电路的设计和制造,提高了可靠性和效率。
-
容错性和稳定性: 二进制信号在传输过程中的误差容忍度较高。电子设备能够准确地识别和恢复损失的数据位,使得在噪声环境中依然能够可靠传输信息。
-
与逻辑运算的匹配性: 计算机内部所有的逻辑运算,如加法、乘法、逻辑与或非等,都可以直接应用于二进制数。这种一致性使得计算机可以在硬件层面上高效地执行复杂的运算和逻辑操作。
-
标准化和互操作性: 使用二进制作为计算机内部和外部通信的基础,促进了标准化和互操作性。几乎所有的数字设备和通信协议都支持二进制数据传输,这样不同设备之间可以更轻松地进行数据交换和通信。
当谈到二进制时,我们通常想到它只有两种状态:1和0。在光和电传输的快速速度下,最直观的方法是利用光的亮度(强光和弱光)或电流的强度(强电流和弱电流)来区分不同的状态。因此,二进制可以利用这些高速传输媒介来有效地传输信息。
工作原理
cpu的针脚也就跟我们的手指一样用来接收高低电频,来判断2进制数据
为什么人常用十进制呢?
几进制就是有几种不同的符号,十进制能推广主要是符合人的身体构造,十根手指头所有逢十进一。
计算机的发展趋势?
软件介绍
硬件的发展历史
电子管时代
晶体管时代
中小规模集成电路
大规模超大规模集成电路
x64的原理(机器字长)
摩尔定律
软件的发展
编程语言实际就是用来创造应用软件的
计算机目前发展的趋势
一、冯诺依曼体系
美籍匈牙利科学家冯·诺依曼最先提出“程序存储”的思想,并成功将其运用在计算机的设计之中,根据这一原理制造的计算机被称为冯·诺依曼结构计算机。由于他对现代计算机技术的突出贡献,因此冯·诺依曼又被称为“现代计算机之父”。
“程序存储” :指令以代码的形式事先输入到计算机的主存储器中,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。即按地址访问并顺序执行指令
计算机按照此原理应具有5大功能:数据传送功能、数据存储功能、数据处理功能、操作控制功能、操作判断功能
- CPU 中央处理器: 进行算术运算和逻辑判断.
- 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
- 输入设备: 用户给计算机发号施令的设备.
- 输出设备: 计算机个用户汇报结果的设备.
但这样的结构会存在一个问题,比如:我某个数据想存在存储器中,而这种结构会通过运算器作为中转站,但是我们的运算器的主要功能是处理核心数据,现在还要用来中转是不是就会导致数据计算的效率降低。由此我们就会推出线代计算机的结构。
现代计算机:
- 主机:主存、运算器、控制器
- 其他硬件装置(外存、I/O设备等)统称为外部设备,简称外设
二、CPU中央处理器
1.衡量CPU的好坏
时钟频率:
- CPU的时钟频率(Clock Speed)是指其每秒钟执行的时钟周期数。更高的时钟频率通常意味着更高的性能,因为CPU能够更快地执行指令。但是,仅仅依赖时钟频率无法全面评估CPU的性能,因为性能还受到其他因素的影响。
指令集:
- CPU的指令集架构(Instruction Set Architecture, ISA)对其性能和功能有重要影响。现代CPU通常支持复杂的指令集,如x86、ARM等,并且可能支持多种扩展指令集,如SSE、AVX等,这些指令集能够提高特定应用程序的性能。
流水线结构:
- CPU的流水线(Pipeline)结构影响其每个时钟周期内能够完成的指令数目。较长的流水线可以提高吞吐量,但会增加分支预测错误等问题的成本。因此,流水线的设计需要在性能、延迟和功耗之间进行权衡。
缓存:
- CPU的缓存系统包括L1、L2和L3缓存,用于存储近期使用的数据和指令,以提高访问速度。较大、更高速的缓存可以显著提高CPU的性能,特别是对于需要频繁访问内存的应用程序。
并行处理能力:
- 现代CPU通常具有多核心,并支持超线程(Hyper-Threading)等技术来提高多任务处理能力。并行处理能力对于多线程应用程序和分布式计算至关重要。
功耗和散热:
- CPU的功耗直接影响到设备的电池寿命和散热需求。优秀的CPU设计能在提供高性能的同时保持较低的功耗。
制造工艺:
- CPU的制造工艺(如7nm、5nm等)影响其集成度、功耗和性能。较先进的制造工艺通常能够提供更高的性能和更低的功耗。
可靠性和容错能力:
- CPU的设计也涉及到可靠性和容错能力,包括错误检测与纠正(ECC)内存支持、断电保护等,这些能够提高系统的稳定性和可靠性。
- 主频:每秒钟CPU执行的次数,例如2.2GHZ,每秒钟执行22亿次指令,目前的CPU都是通过当前的状态动态改变的。
- 核心数:CPU上焊上去的核心,就好比几个人同时工作一样。
2.组成
2.1 指令
CPU上能够执行任务的最小单元,这些最小单元都是由二进制表示的机械语言,比如读写内存指令,堆栈操作指令。
指令通常由操作码(Opcode)和地址码(Addressing Mode)组成:
- 操作码(Opcode):指定要执行的具体操作,例如加法、乘法、逻辑运算等。
-
地址码(Addressing Mode):地址码通常用于指定操作数的位置。它指定了操作数在内存或寄存器中的地址或寻址方式。地址码有助于指明操作码将如何访问或处理操作数。
- 操作数(Operands):提供给操作码的数据或者操作的目标。
2.2 控制器
控制器是计算机的指挥中心,有其指挥各部件自动协调第进行工作,现代计算机将运算器和控制器集成到一个芯片上,合成为中央处理器,简称CPU。有程序计数器(PC)、指令寄存器(IR)和控制单元(CU)。
控制器的核心组成:
- CU (Control Unit) : 控制单元,分析指令给程序发出信号。
- IR (Instruction Register) :指令寄存器,存放当前执行的指令。
- PC (Program Counter) :程序计数器,存放下一条指令地址,有自动加1的功能。
完成一条指令:
- 取指令 PC
- 分析指令 IR
- 执行指令 CU
控制器负责控制指令的执行顺序和处理器中其他部件的操作。它从内存中获取指令,并按照指令的顺序执行各项操作。举例:当你打开一个应用程序时,控制单元会协调各个部件执行加载程序、分配内存等操作。
2.3 运算器
运算器,是计算机的运算单元,用于算术运算(减加乘除)和逻辑运算(与或非)
运算器的核心单元是算术逻辑单元(ALU)
- ACC(Accumulator): 累加器,用于存放操作数,或运算结果。
- MQ(Multiplier-Quotient Register ): 乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
- X:通用的操作数寄存器,用于存放操作数。
- ALU(Arithmetic Logic Unit):算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算。
负责执行算术运算(如加减乘除)和逻辑运算(如与、或、非)。 举例:当你进行数学计算或逻辑运算时,ALU会执行相应的操作。
2.4 寄存器
寄存器是CPU内部的一些存储区域,用于临时保存和处理。
寄存器用于临时存储指令、数据和中间结果。CPU中包含多种类型的寄存器,如通用寄存器、指令寄存器、程序计数器等。 举例:当执行一个加法操作时,数据会被加载到寄存器中,ALU执行运算后的结果也会暂时存储在寄存器中。
-
程序计时器
-
保存当前执行到哪个指令,exe程序运行起来,就会把指令和数据加入到内存中(内存地址),cpu就会从内存中取指令,然后再执行指令,初始情况下,程序计时器就指向程序指令的入口,每一次取完一条指令,程序计数器的值都会自动更新,你一般情况下程序计时器指向下一条(顺序执行),但是如果遇到跳转类指令(jmp,call...)就会被设置成跳转的地址。
-
-
栈指针寄存器
-
栈指针寄存器存储了栈顶的地址,用于当前程序的调用栈。栈也是一块内存,这块内存保存当前这个程序方法调用过程中,一系列的关系(局部变量和方法参数),ebp始终指向栈底,esp始终指向栈顶,修改esp值就可以实现"出栈"/"入栈",有了这个才知道一个方法执行完毕后要回到哪里执行。
-
-
其他的通用寄存器
-
用来保存计算的中间结果,比如10+20+30,10+20=30就会存储在寄存器中,如果再算完10+20之后,还没来得及算后面,进程调度走了,就需要把保存10+20的寄存器的值给备份到上下文中。
-
2.5 时钟
-
CPU中的时钟控制着整个计算机系统的节奏和同步,决定了指令和数据在CPU中的流动速度
2.6 总线接口单元
负责处理CPU与其他硬件设备之间的数据传输,举例:当你从硬盘读取文件时,总线接口单元会协调数据在CPU和硬盘之间的传输。
-
地址总线:用于传输内存地址,指示数据在内存中的位置。
-
数据总线:负责传输数据信号,将数据从一个地方传输到另一个地方。
三、存储器
1. 内存
速度快,空间小,耗电快,耗电后数据丢失,临时存储计算机正在运行的程序和数据。当你打开一个程序或文件时,计算机会将相关的数据加载到内存中以便CPU能够快速访问,CPU一般都是先读内存里面的内容。
- 主存储器(Main Memory):包括RAM(随机存取存储器),用于临时存储程序和数据,其访问速度非常快,但是断电后数据会丢失。
- 辅助存储器(Secondary Storage):如硬盘驱动器、固态硬盘(SSD)、光盘等,用于长期存储数据,数据在断电后仍能保持。
1. MAR(Memory Address Register,内存地址寄存器)
- 功能:
- MAR是一个CPU内部的寄存器,用于存储当前正在处理的内存地址。
- 当CPU需要访问主存储器中的特定数据或指令时,它会将要访问的内存地址存储在MAR中。
- 通过PC或者CU传来地址,去对应的主存储器中执行对应的操作,然后将结果返回给MDR。
2. MDR(Memory Data Register,内存数据寄存器)
- 功能:
- MDR也是CPU内部的寄存器,用于临时存储从主存储器读取或将写入主存储器的数据。
- 当CPU从主存储器中读取数据时,数据首先被加载到MDR中,然后传输到CPU的其他部分进行处理。
- 当CPU向主存储器写入数据时,数据被放置在MDR中,然后传输到指定的内存地址。
- 存储着从主存读取的数据,如果是指令给控制器让CU分析,如果是数据传输给运算器,让其存放在操作数栈中。
操作过程示例:
-
读取操作:
- CPU通过MAR将要访问的内存地址发送到主存储器。
- 主存储器根据MAR中的地址找到相应的数据,并将数据加载到MDR中。
- CPU从MDR中读取数据进行进一步处理。
-
写入操作:
- CPU将要写入的数据放置在MDR中。
- CPU将写操作的目标内存地址存储在MAR中。
- 如果是指令给控制器让CU分析,如果是数据传输给运算器,让其存放在操作数栈中。
- 主存储器接收到MAR和MDR中的地址和数据,并将数据写入到指定的内存地址。
2. 外存
外存(Secondary Storage)是计算机系统中用于长期数据存储的部分,与CPU内部的高速缓存和主存(RAM)相比,外存通常拥有更大的存储容量但访问速度较慢。按照计算机组成原理的角度来看,评估外存的好坏和性能通常考虑以下几个方面:
-
存储容量:
- 外存的主要优势之一是其大容量,可以存储大量数据,包括操作系统、应用程序、用户文件等。优秀的外存能够提供足够的存储空间来满足不同用户和应用的需求。
-
访问速度:
- 相比主存和高速缓存,外存的访问速度较慢,通常以毫秒甚至更长的时间单位来衡量。这是因为外存通常使用机械硬盘(HDD)或固态硬盘(SSD),其数据存取涉及到物理位置的读写操作,远不及内存和高速缓存的速度。
-
接口和传输速率:
- 外存设备通过不同的接口连接到计算机系统,如SATA、USB、NVMe等。传输速率取决于接口类型和设备本身的性能。现代高速SSD通过NVMe接口可以提供比传统SATA接口更快的数据传输速率。
-
持久性:
- 外存的数据是持久存储的,即使在断电或重启后数据依然保存。这种持久性是外存的重要特征,使其适合长期存储和备份数据。
-
耐用性和可靠性:
- 优秀的外存设备通常具有高耐用性和可靠性,能够在长时间内保持数据完整性,并能抵抗物理损坏或意外事件(如断电)的影响。
-
成本效益:
- 外存设备的成本通常比较低廉,特别是机械硬盘。这使得外存成为存储大量数据的经济有效选择。
注意:输入、输出是以主机为中心谈论的!输入、输出设备都属于外部设备。
四、输入设备
-
用户给计算机发号施令的设备,例如,鼠标键盘
五、输出设备
-
计算机个用户汇报结果的设备,例如,音响
六、代码运行各个工作流程
指令和变量的数据都是存储在存储体中。
控制器会告诉主存储器是读操作还是写操作。
核心:
- PC把要执行的主存地址给MAR
- MAR通过内存地址到主存中拿到指令给MDR
- MDR把拿到的数据交给IR执行指令
- IR把操作码分给CU让其分析指令
- CU分析到指令是 “取出至ACC”,就会通知IR
- IR将指令的地址码送给MAR
- MAR取数据交给MDR,MDR根据操作码交给ACC
总结上述代码:
总结
学习计算机组成原理对于学习和理解Java编程语言有着重要的帮助。计算机组成原理涵盖了计算机硬件系统的基本原理和组件,如处理器、存储器和输入输出设备。这些知识可以帮助学习者深入理解Java程序在计算机上的执行过程和性能优化。此外,它还能帮助理解数据结构、算法、内存管理和并发编程,从而编写更高效、更可靠的Java代码。掌握计算机组成原理还有助于学习者在系统级调试和分析上更加得心应手,提高职业竞争力。