其实计算机在很早以前就处处是它的影子:
人类对计算的需求,驱动我们不断的发明、改善计算机。目前这个时代是 “ 电子计算机 ” 的时代,发展的 潮流是:更快速、更稳定、更微型。
说起计算机我们首先要了解的就是这两位祖师爷,一位是从理论上奠定了计算机基础,另一位是在发明电子计算机中所起到关键性作用,被西方人誉为“计算机之父”。
谁年轻时不是一个帅哥呢?
艾伦·麦席森·图灵(Alan Mathison Turing)是一位英国数学家、逻辑学家和密码学家,被誉为计算机科学之父。他的一生经历充满了传奇色彩。
1912年6月23日,图灵出生在英国的伦敦,是一个富有的家庭的儿子。在小时候,他就表现出了超群的智力和对数学的天赋。他自幼勤奋好学,阅读了大量的数学书籍和论文,十分喜欢研究数学问题。
1929年,图灵考入剑桥大学国王学院学习数学,并在1931年获得了数学荣誉学士学位。随后,他继续在剑桥大学攻读博士学位,并在1936年发表了《可计算数及其在问题上的应用》一文,提出了“图灵机”的概念,这是计算机科学中一个非常重要的理论基础。
到了二战期间,图灵加入了英国情报局,负责破解德国的密码系统。他主导开发了一种名为“图灵机器”的机械设备,可以自动破解德国军方的密电。这项工作对于英国在二战期间的胜利起到了重要的作用。
战争结束后,图灵继续在剑桥大学从事计算机和人工智能的研究。他是第一个提出“人工智能”一词的人,也是计算机科学中最有影响力、最具创造性的人物之一。不幸的是,他的生命经历被彩虹情色事件打破。1952年,他因为涉嫌同性恋而被定罪,被迫接受荷尔蒙治疗,并失去了国家安全机构的任职资格。在此背景下,1954年6月7日,图灵在自己家中去世,死因是氰化钾中毒,享年42岁。
直到20世纪70年代,才有越来越多的人们开始重视图灵的成就和贡献。1983年,英国政府正式宣布向图灵道歉,称他是一位“伟大的数学家”,并对他所受到的不公当场表示遗憾。1999年,在《时代周刊》评选的“20世纪最杰出100人”名单上,图灵名列第46位。
总的来说,图灵是一位伟大的数学家、逻辑学家和密码学家,他的成就和贡献影响了整个计算机科学领域,并为人工智能的发展奠定了基础。他的一生经历虽然注定有些不幸和戏剧性,但是他所留下来的精神和思想,将永存于计算机科学史上。
图灵机,又称图灵计算机指一个抽象的机器,于1936年提出的一种抽象的计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人类进行数学运算。它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动 。
想详细了解可看: 什么是图灵机 - 知乎 (zhihu.com)
网上流传甚广的一张图:年轻人,你渴望力量吗?(可见大家对祖师爷的崇拜)
约翰·冯·诺依曼(John von Neumann)是一位匈牙利出生的美国数学家、物理学家和计算机科学家,也是现代计算机体系结构和程序设计的重要先驱之一。
1903年12月28日,冯诺依曼出生在匈牙利的布达佩斯市,是一个富裕的犹太人家庭的孩子。他自幼表现出了卓越的智力和对数学的天赋。在成长过程中,他接触了许多不同领域的知识,并表现出了对物理学、化学和哲学等方面的浓厚兴趣。
1921年,冯诺依曼进入柏林大学学习化学,并于1925年获得了博士学位。随后,他转向了数学领域,并成为了德国著名数学家希尔伯特的学生之一。在此期间,他发表了一系列关于量子力学、矩阵论和函数分析等方面的论文,展现了卓越的数学才华。
1930年,冯诺依曼来到美国,并开始在普林斯顿大学担任数学系教授。在普林斯顿工作的期间,他与爱因斯坦等人合作,成为了美国原子弹计划的顾问之一,并对核武器的研制做出了重要贡献。
二战结束后,冯诺依曼继续从事计算机和物理学的研究,并提出了现代计算机体系结构的重要概念(冯诺依曼体系)。他是第一个将计算机内部存储程序的思想化为实际方案的人,并提出了“存储程序计算机”和“指令集架构”的概念。这些概念对现代计算机的设计和开发产生了深远的影响,也为冯诺依曼赢得了“计算机科学之父”的美誉。
1955年,冯诺依曼被诊断出罕见的骨髓增生性疾病,并于当年2月8日去世,享年51岁。他留下来的贡献和成就不仅影响了计算机科学领域,也影响了物理学、数学和其他许多领域的发展。
总的来说,冯诺依曼的一生经历充满了传奇色彩。他是一位极具才华的数学家、物理学家和计算机科学家,为现代计算机体系结构和程序设计的发展做出了重要贡献。他对于人类思维方式的影响和贡献将永存于历史长河中。
上面说到冯诺依曼体系,直到现在大部分计算机仍然遵守 冯诺依曼体系结构。下面我就来讲讲冯诺依曼体系
冯诺依曼体系是一种计算机系统的结构和工作原理,也称为冯诺依曼计算机体系结构。该体系结构由匈牙利数学家约翰·冯诺伊曼于1945年提出,被誉为现代计算机体系结构的奠基之作。
冯诺依曼体系结构主要分为四个部分:存储器、算术逻辑单元(ALU)、控制器和输入/输出(I/O)设备。其中,存储器用于存储指令和数据,ALU负责进行算术、逻辑运算等操作,控制器则负责控制指令的执行过程,而I/O设备则用于与外部世界交互。
在冯诺依曼体系结构中,所有指令和数据都以二进制形式存储在内存中,CPU通过总线来读取和写入内存中的数据。CPU可以根据指令集中的指令来执行不同的操作,如加法、减法、乘法、除法等算术运算,以及逻辑运算、比较运算、移位等操作。同时,CPU还可以通过控制器来控制程序的执行流程,实现分支、循环、函数调用等功能。所有这些操作都是由指令集中的指令来实现的。
冯·诺依曼体系的一大优势是其具有较高的通用性,即可以运行各种不同的程序。同时,由于其存储程序的特性,使得修改程序变得更加方便,这是其他类型计算机体系结构所不具备的优势之一。
冯诺依曼体系结构的设计使得计算机能够以通用的方式进行程序设计,并且能够将计算机内部的运算和存储空间分离开来。这对于现代计算机科学的发展具有历史性的意义。同时,冯诺依曼体系结构的出现也标志着计算机科学从硬件设计上实现了程序可重用的革命。
我只是简单介绍了一下冯诺依曼体系,想详细了解的小伙伴可看三分钟带你了解冯.诺依曼结构 - 知乎 (zhihu.com)
- CPU 中央处理器: 进行算术运算和逻辑判断.
- 存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
- 输入设备: 用户给计算机发号施令的设备.
- 输出设备: 计算机用户汇报结果的设备.
计算机小常识:
计算机的工作原理可以简单地概括为:输入、处理和输出。
输入(Input):计算机需要从外界获取数据和指令,例如通过键盘、鼠标、扫描仪等设备输入数据,并通过网络或存储设备读取程序。
处理(Processing):计算机对输入的数据和指令进行处理,并产生结果。处理过程包括数据运算、逻辑判断、控制流程等操作。这是计算机最核心的功能,主要由 CPU(中央处理器)和内存组成,并通过各种输入/输出设备与用户交互。
输出(Output):计算机将处理结果输出给用户,如显示器、音频设备、打印机等。用户可以看到或听到计算机处理的结果。
在计算机内部,数据和指令通常以二进制形式表示和处理。二进制是一种只包含0和1的数字系统,与十进制相比,它可以更直接地映射到计算机存储器中的电子信号。数据和指令都可以被存储在计算机内存(RAM)中,由CPU通过总线访问。
计算机的工作原理基于通用图灵机模型。这个模型定义了一个机器状态、指令集、数据格式和输入输出方式的规范,可应用于任何计算机体系结构。实际上,现代计算机体系结构包括 CPU、内存、I/O 控制器等组件,并使用操作系统来协调它们的工作。操作系统提供了许多高级函数和服务,隐藏了底层硬件细节,使得程序员可以更容易地编写程序。
可以看出cpu是计算机的灵魂所在,那下面我们来认识认识cpu,看看cpu是如何工作的。
CPU(中央处理器)是计算机的核心部件,它的工作流程可以分为以下三个步骤。
1、取指令阶段(Instruction Fetch)
CPU从内存中读取下一条要执行的指令,并将其存储在指令寄存器中。这些指令按照地址顺序存放在内存中,由程序计数器(Program Counter,PC)来记录下一条指令的地址。取指令阶段通常需要多次执行,以读取多个指令。
2、解码阶段(Instruction Decode)
CPU从指令寄存器中读取指令,并对其进行解码。在这个阶段,CPU会确定该指令需要对哪些数据进行操作,以及操作的方式和结果存放的位置等信息。这些信息被存储在控制单元的控制信号中,用于指导CPU后续的执行过程。
3、执行阶段(Execution)
CPU根据指令解码阶段提供的控制信号,执行相应的操作,并将结果存储到寄存器或内存中。执行阶段包括算术逻辑运算、数据传输和控制转移等操作。其中,算术逻辑运算包括加法、减法、乘法、除法、位运算和逻辑运算等;数据传输包括从寄存器或内存中读取数据,以及将数据写入寄存器或内存中;控制转移包括跳转、分支和函数调用等操作。
以上三个阶段构成了CPU的主要工作流程。在实际应用中,为了提高CPU的性能和效率,通常会采用流水线(Pipeline)技术,使多条指令可以同时执行不同的阶段。这样可以大大缩短执行时间,提高计算机的运行速度。
时钟频率(又译:时钟频率速度,英语: clock rate),是指同步电路中时钟的基础频率,它以“若干次周期每秒”来度量,量度单位采用 SI单位 赫兹(Hz)。它是评定 CPU 性能的重要指标。一般来说主频数字值越大越好。
cpu要完成上面工作,需要逻辑门、算术逻辑单元 ALU、寄存器(Register) 和内存(RAM)、控制单元 CU、指令多种组件相互配合,可能有人不认识这些组件,下面我就来介绍介绍它们。
机械继电器,也称为电磁继电器,是一种基于电磁原理工作的电气开关。它由线圈、铁芯、触点和弹簧等组成。当线圈通电时,会产生一个磁场,使得铁芯被吸引,同时触点也会跟随移动。当线圈断电时,铁芯会失去磁性,触点则会回到原位。通过这样的方式,机械继电器可以实现电路的开关控制。机械继电器可以用于各种电气设备中,如灯泡、家用电器、电机和汽车电气系统等。
门电路指的是一种基本逻辑电路,用于实现不同的逻辑函数。门电路通常由晶体管、二极管和其他电子元件组成。它们分为以下几种类型:
与门(AND Gate):当所有输入均为高电平时,输出为高电平。
或门(OR Gate):当任一输入为高电平时,输出为高电平。
非门(NOT Gate):输入为高电平时,输出为低电平;输入为低电平时,输出为高电平。
异或门(XOR Gate):当输入相同时,输出为低电平;当输入不同时,输出为高电平。
与非门(NAND Gate):当所有输入均为高电平时,输出为低电平。
或非门(NOR Gate):当任一输入为高电平时,输出为低电平。
除了以上提到的基本门电路之外,还有许多其他的门电路,如三态门(Tri-state Gate)、模拟开关(Analog Switch)、触发器(Flip-flop)等。在数字电子学中,门电路是构建其他数字电路的基础。
算术逻辑单元(ALU)是计算机中的一个核心组件,用于执行算术和逻辑运算。ALU 可以对两个二进制数进行加、减、乘、除等算术运算,并且还可以进行与、或、非、异或等逻辑运算。
一个标准的 ALU 通常由以下几个部分组成:
数据输入:用于接收要进行计算的数据,通常包括两个二进制数和一个控制位。
运算器:根据控制位决定所需的运算类型,如加法、减法、乘法、除法、比较、位移等。
状态寄存器:用于记录运算结果的状态信息,如是否进位、是否溢出等。
数据输出:将运算结果输出到其他部件或总线上。
ALU 在 CPU 中发挥着重要的作用,它能够快速有效地执行各种算术和逻辑操作,从而实现计算机的各种功能。实际上,大多数 CPU 都使用了多个 ALU,以提高计算效率并支持并行计算。此外,ALU 也被广泛应用于数字信号处理(DSP)、嵌入式系统、通信设备等领域。
由于算术逻辑单元(ALU)性能的高低对计算机整体性能有着很大的影响,因此现代 CPU 通常采用多级流水线结构和超标量技术来提高逻辑单元的效率和性能。
算数单元,通常也称为算术部件或运算器,是算术逻辑单元一个核心组成部分。
算术单元通常由一组加法器、乘法器、除法器和移位器等门电路组成,以实现各种不同的算术操作,如加法、减法、乘法、除法位移、取反等其他运算。
在计算机中,CPU 通常包含一个或多个算术单元,用于处理各种算术运算。当 CPU 需要进行算术运算时,它会将数据送入算术单元,并根据指令选择需要进行的运算类型。算术单元计算出结果后,将其返回给 CPU 进行下一步操作。
总的来说,算术单元是计算机中非常重要的组件之一,它通过实现各种算术运算来支持计算机的各种应用,如数据处理、图像处理、音频处理等。
逻辑单元(Logic Unit,简称LU)是计算机中的一个核心组件,用于执行逻辑运算。它通常由一组逻辑门电路(如与门、或门、非门、异或门等)组成,以实现各种不同的逻辑操作。
逻辑单元主要负责执行以下几种基本逻辑运算:
与运算:将两个二进制数的对应位进行“与”操作,并输出结果。
或运算:将两个二进制数的对应位进行“或”操作,并输出结果。
非运算:对一个二进制数的每一位进行取反操作,并输出结果。
异或运算:将两个二进制数的对应位进行“异或”操作,并输出结果。
在计算机中,逻辑单元通常与算术单元(ALU)结合使用,形成更加完整的算数逻辑单元(ALU)。当 CPU 需要执行逻辑运算时,它会将数据送入逻辑单元,并根据指令选择需要进行的运算类型。逻辑单元会计算出结果,并将其返回给 CPU 进行下一步操作。
总的来说,在现代计算机中,逻辑单元也是非常重要的组件之一,它通过实现各种逻辑运算来支持计算机的各种应用,如控制决策、布尔逻辑运算、比较判断等。
现代的计算机中的 ALU 部件非常强大,复杂度远远超过了我们的想象,32 位甚至 64 位基本已经普及全球了。
现代CPU中的ALU通常支持浮点数运算、SIMD指令(单指令多数据),以及更加复杂的指令集和多级流水线结构。这些先进的技术让我们能够进行更加高效、精确、复杂的计算任务,从而推动了科学技术的发展和人类社会的进步。
ALU 是第一次将人类历史上的数学和逻辑学学科有机地结合起来,可以视为人类智慧发展的现代巅峰。
寄存器(Register)和内存(RAM)都是计算机中存储数据的组件,但它们在存储、使用、速度等方面有很大区别。
寄存器是位于CPU内部的高速存储器,用于暂时存储指令和数据,是CPU执行指令过程中必不可少的组件。寄存器的容量比内存小得多,通常只有几十个字节到几百个字节,但由于其位于CPU内部,访问速度非常快,可以在一个时钟周期内完成读写操作。寄存器一般被用来存储当前正在执行的程序或数据,以及存储各种状态信息,例如程序计数器、指令寄存器、标志寄存器、通用寄存器等。
关于寄存器还想了解更多的:一口气看完45个寄存器,CPU核心技术大揭秘 - 知乎 (zhihu.com)
相比之下,内存(RAM)是一种外部存储设备,用于存储程序和数据,它的容量比寄存器大得多,可以存储更多的数据。内存的数据可以随时读取和修改,但访问速度比寄存器慢得多,需要几十甚至几百个时钟周期才能完成读写操作。内存一般分为静态内存和动态内存两种类型,其中静态内存速度较快,而且不需要刷新操作,但成本较高;动态内存成本较低,但需要定时进行刷新操作以保持数据的正确性。
总的来说,寄存器和内存在计算机中都具有非常重要的作用。寄存器通过提供快速且方便的存储空间来支持CPU的指令执行和数据处理;而内存则提供了更大容量的存储空间,支持计算机系统的日常运行和各种应用程序的执行。通常情况下,计算机会将一部分数据存储在寄存器中,以便快速访问,在需要存储更多数据时则将其存储在内存中。
控制单元(Control Unit,CU)它负责指挥和控制计算机系统中的各个部件进行工作。CU通常位于CPU内部,主要功能包括从主存中读取指令、解析指令并生成相应的控制信号、以及协调各个部件的工作等。
具体地说,当CPU要执行某个程序时,CU首先从主存中读取指令,并将其送入指令寄存器中。然后,CU会对指令进行解码,并根据解码结果生成一系列控制信号,例如内存读写控制信号、ALU操作控制信号、总线控制信号等。这些控制信号会被发送到各个部件,使得它们按照指令要求进行相应的操作,最终完成指令的执行。
除了指挥各个部件进行工作之外,CU还负责处理异常情况和错误。例如,在执行某个指令时,如果发生了除以零或者非法指令等错误,CU会立即停止当前程序的执行,并向操作系统或用户报告错误信息。
总的来说,CU可以看做是计算机系统中的“大脑”,它负责协调和控制整个系统的工作,确保计算机的正确运行。同时,CU也是计算机系统整体性能的关键因素之一,它的设计和实现质量直接影响到计算机的运行效率和稳定性。
首先,我们先介绍下我们需要到的指令(instruction)。
所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。
其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。 指令本身也是一个数字,用二进制形式保存在内存的某个区域中。
指令表(Instruction Table)
指令(instruction)
|
功能说明 | 4位opcode | 操作的地址或者寄存器 |
---|---|---|---|
LOAD_A
|
从RAM的指定地址,将
数据加载到A 寄存器
|
0010 |
4 位RAM 地址
|
LOAD_B
|
从RAM的指定地址,将
数据加载到B 寄存器
|
0001 |
4 位RAM 地址
|
STORE_A
|
将数据从A 寄存器写入
RAM 的指定地址
|
0100 |
4 位RAM 地址
|
ADD
|
计算两个指定寄存器的
数据的和,并将结果放
入第二个寄存器
|
1000 |
2 位的寄存器ID
2 位的寄存器ID
|
对cpu感兴趣的小伙伴可以看看下面这个视频(大佬爆肝纯手工自制cpu)
[爆肝]纯手工自制CPU
计算机中的程序是由一系列指令组成的,用来完成特定任务的代码序列。程序可以通过编程语言编写,然后由计算机进行解析和执行。
程序可以分为两类:系统程序和应用程序。系统程序是控制计算机硬件和操作系统的程序,例如操作系统、设备驱动程序、安全软件等。应用程序是用户使用计算机时运行的程序,例如文字处理器、游戏、浏览器、音视频播放器等。
程序可以由源代码编写而成,也可以通过编译器将源代码转换为目标代码来创建。在某些情况下,程序还可以直接使用汇编语言编写,以便更好地控制硬件资源和优化性能。
在程序执行过程中,计算机会将指令从内存中读入到CPU中,并根据指令类型执行相应的操作。CPU还需要维护一些寄存器和状态信息,例如程序计数器、堆栈指针、标志寄存器等,以帮助它正确地执行指令序列。
程序是计算机中最基本的元素之一,它们使得计算机能够完成各种任务并为用户提供服务。
很久以前,那还是我用Win98 的时候有次我系统崩溃了,因为我是电脑白痴,我朋友给我介绍了一个高 手来帮我修电脑。他看了一下电脑,问我有没有98 的盘,我说没有。他想了一下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好说什么,就把电话拔下来给他了。他把电话线空着的一头接在电脑的一个插孔内,然落后入了dos ,然后就开始在电话上不停的按着键,他按键的速度异常快,但是只按0 , 1 两个键,我搞不懂这有什么用,但也不敢问,看了半个多小时,他还是不停的按这两个键, 两性,我徐徐的有些困,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就一个人去隔壁睡觉了。醒来的时候,一看已经过了4 个多小时,我起身到隔壁,看见他正在 98 里面调试,过了一会儿,他说,你 试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了一个98 系统,我后来问我 朋友那位高手的下落,我朋友说前几年去了美国之后,杳无音讯....
编程语言是用来描述计算机程序的形式化语言。自从计算机诞生以来,编程语言不断地发展和演变,经历了许多里程碑事件:
第一代编程语言(1940s-1950s):第一代编程语言是早期计算机使用的机器语言,它通过二进制代码直接控制计算机硬件。由于它很难理解和使用,因此只有专家才能编写程序。
第二代编程语言(1950s-1960s):第二代编程语言是汇编语言,它使用助记符号代替了二进制代码,使得人们更容易地编写程序。但它仍需要对硬件有深入的了解。
第三代编程语言(1960s-1970s):第三代编程语言是高级语言,例如FORTRAN、COBOL、BASIC等,它们的语法更加接近自然语言,使编程变得更加简单。同时,出现了编译器和解释器等工具,为程序员提供了更好的开发环境。
第四代编程语言(1970s-1990s):第四代编程语言是面向数据库的语言,例如SQL,它们不需要程序员编写大量的代码来操作数据,而是提供了高度抽象的接口。
现代编程语言(1990s-至今):现代编程语言包括Java、Python、C++等,它们具有更多的特性和功能,例如面向对象编程、函数式编程、动态类型等。同时,出现了许多框架和库,帮助程序员更快地构建应用程序。
编程语言的发展经历了从低级到高级、从硬件到软件、从过程化到面向对象等几个阶段,每个阶段都为计算机的发展做出了重要贡献。未来,人工智能、量子计算和其他新技术的发展也将进一步推动编程语言的演变和创新。
操作系统(Operating System,OS)是计算机系统中的一种软件,它负责管理和控制计算机硬件和软件资源,为用户和应用程序提供服务。操作系统通常包括以下几个核心组件:
内存管理:内存管理模块负责管理计算机的内存资源,包括内存分配、内存保护、虚拟内存等。通过有效地管理内存,操作系统可以最大化利用系统资源,并确保应用程序之间不会相互干扰。
进程管理:进程管理模块负责管理计算机的进程和线程,包括进程的创建、调度、终止、同步等。通过对进程和线程进行管理,操作系统可以使多个程序同时运行,并确保它们之间不会相互干扰或竞争系统资源。
文件管理:文件管理模块负责管理计算机的文件系统,包括文件的创建、读取、写入、删除等。通过对文件进行统一管理,操作系统可以保护文件的安全性、完整性和可用性。
设备管理:设备管理模块负责管理计算机的外部设备,包括I/O设备、网络设备等。通过对设备进行管理,操作系统可以协调多个设备之间的操作,以达到最优的系统性能。
用户接口:用户接口模块提供了用户和操作系统之间的交互方式,例如命令行界面、图形用户界面等。通过友好的用户接口,操作系统可以使得用户更加轻松地使用计算机系统。
除了这些核心组件之外,操作系统还包括其他一些功能,例如安全管理、网络支持、多处理器支持等。总的来说,操作系统是计算机系统中最重要的组成部分之一,为用户和应用程序提供了强大的支持和保障。
篇幅过长 ,就不详细说了,想详细了解可看
计算机操作系统知识点总结(有这一篇就够了!!!)
作为一名程序员,计算机将会一直陪伴我们今后的日子,我深知计算机技术对于现代社会的重要性。在这个五一劳动节之际,我想向所有辛勤工作的人们致以敬意,并分享一些我认为程序员应该掌握的基础知识。
我们今天介绍了计算机的历史以及了解了计算机时如何工作的,但是计算机技术是一个不断演变和发展的领域,身为程序员的我们需要不断学习和创新,才能保持竞争力和应对未来的挑战。
在这个特别的节日里,让我们一起感恩劳动、尊重知识、珍惜时间,为自己和社会创造更多价值!