算术逻辑单元 ALU(Arithmetic & Logic Unit)
算术逻辑单元(ALU)是计算机中的一个核心组件,用于执行算术和逻辑运算。ALU 可以对两个二进制数进行加、减、乘、除等算术运算,并且还可以进行与、或、非、异或等逻辑运算。
一个标准的 ALU 通常由以下几个部分组成:
数据输入:用于接收要进行计算的数据,通常包括两个二进制数和一个控制位。
运算器:根据控制位决定所需的运算类型,如加法、减法、乘法、除法、比较、位移等。
状态寄存器:用于记录运算结果的状态信息,如是否进位、是否溢出等。
数据输出:将运算结果输出到其他部件或总线上。
ALU 在 CPU 中发挥着重要的作用,它能够快速有效地执行各种算术和逻辑操作,从而实现计算机的各种功能。实际上,大多数 CPU 都使用了多个 ALU,以提高计算效率并支持并行计算。此外,ALU 也被广泛应用于数字信号处理(DSP)、嵌入式系统、通信设备等领域。
由于算术逻辑单元(ALU)性能的高低对计算机整体性能有着很大的影响,因此现代 CPU 通常采用多级流水线结构和超标量技术来提高逻辑单元的效率和性能。
算术单元(Arithmetic Unit)
算数单元,通常也称为算术部件或运算器,是算术逻辑单元一个核心组成部分。
算术单元通常由一组加法器、乘法器、除法器和移位器等门电路组成,以实现各种不同的算术操作,如加法、减法、乘法、除法位移、取反等其他运算。
在计算机中,CPU 通常包含一个或多个算术单元,用于处理各种算术运算。当 CPU 需要进行算术运算时,它会将数据送入算术单元,并根据指令选择需要进行的运算类型。算术单元计算出结果后,将其返回给 CPU 进行下一步操作。
总的来说,算术单元是计算机中非常重要的组件之一,它通过实现各种算术运算来支持计算机的各种应用,如数据处理、图像处理、音频处理等。
逻辑单元(Logic Unit)
逻辑单元(Logic Unit,简称LU)是计算机中的一个核心组件,用于执行逻辑运算。它通常由一组逻辑门电路(如与门、或门、非门、异或门等)组成,以实现各种不同的逻辑操作。
逻辑单元主要负责执行以下几种基本逻辑运算:
- 与运算:将两个二进制数的对应位进行“与”操作,并输出结果。
- 或运算:将两个二进制数的对应位进行“或”操作,并输出结果。
- 非运算:对一个二进制数的每一位进行取反操作,并输出结果。
- 异或运算:将两个二进制数的对应位进行“异或”操作,并输出结果。
- 在计算机中,逻辑单元通常与算术单元(ALU)结合使用,形成更加完整的算数逻辑单元(ALU)。当 CPU 需要执行逻辑运算时,它会将数据送入逻辑单元,并根据指令选择需要进行的运算类型。逻辑单元会计算出结果,并将其返回给 CPU 进行下一步操作。
- 总的来说,在现代计算机中,逻辑单元也是非常重要的组件之一,它通过实现各种逻辑运算来支持计算机的各种应用,如控制决策、布尔逻辑运算、比较判断等。
ALU 符号
现代的计算机中的 ALU 部件非常强大,复杂度远远超过了我们的想象,32 位甚至 64 位基本已经普及全球了。
现代CPU中的ALU通常支持浮点数运算、SIMD指令(单指令多数据),以及更加复杂的指令集和多级流水线结构。这些先进的技术让我们能够进行更加高效、精确、复杂的计算任务,从而推动了科学技术的发展和人类社会的进步。
ALU 是第一次将人类历史上的数学和逻辑学学科有机地结合起来,可以视为人类智慧发展的现代巅峰。
寄存器(Register) 和内存(RAM)
寄存器(Register)和内存(RAM)都是计算机中存储数据的组件,但它们在存储、使用、速度等方面有很大区别。
寄存器是位于CPU内部的高速存储器,用于暂时存储指令和数据,是CPU执行指令过程中必不可少的组件。寄存器的容量比内存小得多,通常只有几十个字节到几百个字节,但由于其位于CPU内部,访问速度非常快,可以在一个时钟周期内完成读写操作。寄存器一般被用来存储当前正在执行的程序或数据,以及存储各种状态信息,例如程序计数器、指令寄存器、标志寄存器、通用寄存器等。
关于寄存器还想了解更多的:一口气看完45个寄存器,CPU核心技术大揭秘 - 知乎 (zhihu.com)
相比之下,内存(RAM)是一种外部存储设备,用于存储程序和数据,它的容量比寄存器大得多,可以存储更多的数据。内存的数据可以随时读取和修改,但访问速度比寄存器慢得多,需要几十甚至几百个时钟周期才能完成读写操作。内存一般分为静态内存和动态内存两种类型,其中静态内存速度较快,而且不需要刷新操作,但成本较高;动态内存成本较低,但需要定时进行刷新操作以保持数据的正确性。
总的来说,寄存器和内存在计算机中都具有非常重要的作用。寄存器通过提供快速且方便的存储空间来支持CPU的指令执行和数据处理;而内存则提供了更大容量的存储空间,支持计算机系统的日常运行和各种应用程序的执行。通常情况下,计算机会将一部分数据存储在寄存器中,以便快速访问,在需要存储更多数据时则将其存储在内存中。
控制单元 CU(Control Unit)
控制单元(Control Unit,CU)它负责指挥和控制计算机系统中的各个部件进行工作。CU通常位于CPU内部,主要功能包括从主存中读取指令、解析指令并生成相应的控制信号、以及协调各个部件的工作等。
具体地说,当CPU要执行某个程序时,CU首先从主存中读取指令,并将其送入指令寄存器中。然后,CU会对指令进行解码,并根据解码结果生成一系列控制信号,例如内存读写控制信号、ALU操作控制信号、总线控制信号等。这些控制信号会被发送到各个部件,使得它们按照指令要求进行相应的操作,最终完成指令的执行。
除了指挥各个部件进行工作之外,CU还负责处理异常情况和错误。例如,在执行某个指令时,如果发生了除以零或者非法指令等错误,CU会立即停止当前程序的执行,并向操作系统或用户报告错误信息。
总的来说,CU可以看做是计算机系统中的“大脑”,它负责协调和控制整个系统的工作,确保计算机的正确运行。同时,CU也是计算机系统整体性能的关键因素之一,它的设计和实现质量直接影响到计算机的运行效率和稳定性。
指令(Instruction)
首先,我们先介绍下我们需要到的指令(instruction)。
所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。
其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。 指令本身也是一个数字,用二进制形式保存在内存的某个区域中。
指令表(Instruction Table)
🍈对cpu感兴趣的小伙伴可以看看下面这个视频(大佬爆肝纯手工自制cpu)
[爆肝]纯手工自制CPU
编程语言(Program Language)
程序(Program)
所谓程序,就是一组指令以及这组指令要处理的数据,程序的基本单元就是指令。狭义上来说,程序对我们来说,通常表现为一组文件。 程序 = 指令+ 指令要处理的数据。
计算机中的程序是由一系列指令组成的,用来完成特定任务的代码序列。程序可以通过编程语言编写,然后由计算机进行解析和执行。
程序可以分为两类:系统程序和应用程序。系统程序是控制计算机硬件和操作系统的程序,例如操作系统、设备驱动程序、安全软件等。应用程序是用户使用计算机时运行的程序,例如文字处理器、游戏、浏览器、音视频播放器等。
程序可以由源代码编写而成,也可以通过编译器将源代码转换为目标代码来创建。在某些情况下,程序还可以直接使用汇编语言编写,以便更好地控制硬件资源和优化性能。
在程序执行过程中,计算机会将指令从内存中读入到CPU中,并根据指令类型执行相应的操作。CPU还需要维护一些寄存器和状态信息,例如程序计数器、堆栈指针、标志寄存器等,以帮助它正确地执行指令序列。
程序是计算机中最基本的元素之一,它们使得计算机能够完成各种任务并为用户提供服务。
早期编程
很久以前,那还是我用Win98的时候有次我系统崩溃了,因为我是电脑白痴,我朋友给我介绍了一个高 手来帮我修电脑。
他看了一下电脑,问我有没有98的盘,我说没有。
他想了一下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好说什么,就把电话拔下来给他了。
他把电话线空着的一头接在电脑的一个插孔内,然落后入了dos ,然后就开始在电话上不停的按着键,他按键的速度异常快,但是只按0 , 1 两个键,我搞不懂这有什么用,但也不敢问,看了半个多小时,他还是不停的按这两个键, 两性,我徐徐的有些困,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就一个人去隔壁睡觉了。
醒来的时候,一看已经过了4 个多小时,我起身到隔壁,看见他正在 98 里面调试,过了一会儿,他说,你 试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。
后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了一个98 系统,我后来问我 朋友那位高手的下落,我朋友说前几年去了美国之后,杳无音讯....
这是一个早先流传的趣味小故事,当然这件事不是真实的。但最早的电脑,要进行编程,是真的需要用 0、 1进行编程的😐
下面图给大家展示了 Altair 8800 计算机,是最早的一批微型电脑。用户需要控制开关,一个一个 bit 的将程序录入该电脑中。
如果要求计算机的用户都必须使用二进制编程,那大家都要疯掉了,这可是一件门槛太高的事情了。所以编程语言应运而生了。
编程语言发展
为了提升编程效率,最早创造了汇编语言的概念。其实汇编语言和机器语言(也就是指令)直接是完全 一一对应的,只是相对于 0 、 1 这些数字,发明了一些帮助人类记忆和理解的符号将其对应起来,也就 是我们上面看到的类似 LOAD_A 、 LOAD_B 等。程序员完成编程之后,需要使用汇编器( assembler ) 将汇编语言翻译成机器语言。
虽然汇编降低了程序员的记忆成本,但要求程序还是必须掌握计算机硬件的所有知识,而且随着计算机 厂商越来越多,一次编写的程序往往只适用于一类计算机。这个是远远不够的,所以更为高级的语言诞 生了,高级语言屏蔽了硬件细节,让程序员可以站在更高的层面上思考自己的业务。这里以 C 语言为 例,程序员完成程序的编写之后,需要使用编译器(compiler )和连接( linker )将程序翻译成汇编 语言,再借助汇编器变成最终的机器语言。
借助封装的思想,我们学习编程变得越来越容易。不过有利则有弊,高度的抽象,导致很多的程序员把 计算机视为一个黑箱,完全无法理解自己的程序是如何工作起来的,希望我们大家不要做这种程序员。
编程语言是用来描述计算机程序的形式化语言。自从计算机诞生以来,编程语言不断地发展和演变,经历了许多里程碑事件:
第一代编程语言(1940s-1950s):第一代编程语言是早期计算机使用的机器语言,它通过二进制代码直接控制计算机硬件。由于它很难理解和使用,因此只有专家才能编写程序。
第二代编程语言(1950s-1960s):第二代编程语言是汇编语言,它使用助记符号代替了二进制代码,使得人们更容易地编写程序。但它仍需要对硬件有深入的了解。
第三代编程语言(1960s-1970s):第三代编程语言是高级语言,例如FORTRAN、COBOL、BASIC等,它们的语法更加接近自然语言,使编程变得更加简单。同时,出现了编译器和解释器等工具,为程序员提供了更好的开发环境。
第四代编程语言(1970s-1990s):第四代编程语言是面向数据库的语言,例如SQL,它们不需要程序员编写大量的代码来操作数据,而是提供了高度抽象的接口。
现代编程语言(1990s-至今):现代编程语言包括Java、Python、C++等,它们具有更多的特性和功能,例如面向对象编程、函数式编程、动态类型等。同时,出现了许多框架和库,帮助程序员更快地构建应用程序。
编程语言的发展经历了从低级到高级、从硬件到软件、从过程化到面向对象等几个阶段,每个阶段都为计算机的发展做出了重要贡献。未来,人工智能、量子计算和其他新技术的发展也将进一步推动编程语言的演变和创新。
注意:高级语言的一条语句 (Statement) 往往对应很多条指令 (Instruction) 才能完成
操作系统
操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
操作系统(Operating System,OS)是计算机系统中的一种软件,它负责管理和控制计算机硬件和软件资源,为用户和应用程序提供服务。操作系统通常包括以下几个核心组件
- 内存管理:内存管理模块负责管理计算机的内存资源,包括内存分配、内存保护、虚拟内存等。通过有效地管理内存,操作系统可以最大化利用系统资源,并确保应用程序之间不会相互干扰。
- 进程管理:进程管理模块负责管理计算机的进程和线程,包括进程的创建、调度、终止、同步等。通过对进程和线程进行管理,操作系统可以使多个程序同时运行,并确保它们之间不会相互干扰或竞争系统资源。
- 文件管理:文件管理模块负责管理计算机的文件系统,包括文件的创建、读取、写入、删除等。通过对文件进行统一管理,操作系统可以保护文件的安全性、完整性和可用性。
设备管理:设备管理模块负责管理计算机的外部设备,包括I/O设备、网络设备等。通过对设备进行管理,操作系统可以协调多个设备之间的操作,以达到最优的系统性能。
- 用户接口:用户接口模块提供了用户和操作系统之间的交互方式,例如命令行界面、图形用户界面等。通过友好的用户接口,操作系统可以使得用户更加轻松地使用计算机系统。
除了这些核心组件之外,操作系统还包括其他一些功能,例如安全管理、网络支持、多处理器支持等。总的来说,操作系统是计算机系统中最重要的组成部分之一,为用户和应用程序提供了强大的支持和保障。
篇幅过长 ,就不详细说了,想详细了解可看
结语
作为一名程序员,计算机将会一直陪伴我们今后的日子,我深知计算机技术对于现代社会的重要性。在这个五一劳动节之际,我想向所有辛勤工作的人们致以敬意,并分享一些我认为程序员应该掌握的基础知识。
我们今天介绍了计算机的历史以及了解了计算机时如何工作的,但是计算机技术是一个不断演变和发展的领域,身为程序员的我们需要不断学习和创新,才能保持竞争力和应对未来的挑战。
在这个特别的节日里,让我们一起感恩劳动、尊重知识、珍惜时间,为自己和社会创造更多价值!