从电子开关到智能系统:揭秘计算机背后的工作原理
文章目录一、现代计算机的基石冯诺依曼体系一各组件的功能与特点二数据流、指令流与控制流二、逻辑门1. 非门NOT GATE2. 与门AND GATE3. 或门OR GATE4. 异或门XOR GATE三、算术逻辑单元ALU算术单元实现数字运算1. 半加器Half Adder2. 全加器Full Adder逻辑单元实现逻辑操作五、控制单元CU与指令执行1. 程序计数器PC2. 指令寄存器IR指令的组成与类型1. 操作码opcode2. 操作数operand3. 常见指令类型CPU的基本工作流程指令周期1. 取码阶段Fetch Phase2. 解码阶段Decode Phase3. 执行阶段Execute Phase六、编程语言的发展一程序二早期编程机器语言三汇编语言四高级语言七、操作系统一常见的操作系统二操作系统的定位与分层视图三操作系统的基本功能四进程/任务Process/Task1. 进程的定义2. 进程控制块PCBProcess Control Block五CPU分配——进程调度Process Scheduling一、现代计算机的基石冯诺依曼体系现代的计算机 大多遵守冯诺依曼体系结构。这个体系主要包括输入设备、存储器、输出设备、运算器和控制器这五个部分其中运算器和控制器共同组成了中央处理器CPU。冯·诺依曼John von Neumann他在现代计算机、博弈论、核武器和生化武器等领域都做出了卓越贡献被后人称为 “现代计算机之父” “博弈论之父”。一各组件的功能与特点CPU中央处理器作为计算机的“大脑”CPU主要负责进行算术运算和逻辑判断。CPU两个重要指标CPU的频率分为基频和睿频频率越高计算速度越快CPU的核心数CPU核心数越多效率越高存储器存储器分为外存和内存用于存储数据并且计算机中的数据都是以二进制方式存储的。内存的访问速度较快但断电后数据会丢失外存硬盘、U盘的存储容量较大数据可以长期保存但访问速度相对较慢。在存储空间方面硬盘的容量通常远大于内存而CPU内部的缓存容量则更小三者的关系可以表示为硬盘 内存 CPU在数据访问速度方面CPU内部缓存的速度最快其次是内存硬盘的速度最慢即CPU 内存 硬盘。输入设备常见的有键盘、鼠标、扫描仪、麦克风。输出设备常见的输出设备有显示器、打印机、音箱。二数据流、指令流与控制流在冯诺依曼体系中计算机的工作过程伴随着数据流、指令流和控制流的流动。数据流计算机中数据的传输和处理过程例如我们在编辑文档时输入的文字数据会经过内存传递到CPU进行处理处理后的结果再传递回内存最后通过显示器输出。指令流计算机中指令的执行序列计算机通过逐条执行指令来完成相应的任务。每条指令都包含操作码和操作数。操作码计算机要执行的操作例如加法、减法、移动数据操作数指示操作的对象包括数据的地址、寄存器编号。控制流对指令流和数据流的控制和协调由控制器来完成。控制器根据指令的要求控制计算机各个组件之间的协调工作确保指令能够按照正确的顺序执行数据能够准确地传输和处理。二、逻辑门门电路是一种基本的逻辑电路能够实现1位bit的基本逻辑运算常见的门电路包括非门NOT GATE、与门AND GATE、或门OR GATE和异或门XOR GATE等。1. 非门NOT GATE非门的功能是对输入信号进行取反操作即输入为TRUE时输出为FALSE输入为FALSE时输出为TRUE。它的结构相对简单通过一个电子开关和接地线等组件就可以实现。非门的真值表输入输出10012. 与门AND GATE与门需要两个输入信号只有当两个输入信号都为TRUE时输出才为TRUE否则输出为FALSE。与门的真值表输入1输入2输出1111000100003. 或门OR GATE或门只要其中一个输入信号为TRUE输出就为TRUE只有当两个输入信号都为FALSE时输出才为FALSE。或门的真值表如下输入1输入2输出1111010110004. 异或门XOR GATE异或门的逻辑是当两个输入信号不同时输出为TRUE当两个输入信号相同时输出为FALSE。它可以通过与门、非门和或门等基本门电路组合而成。异或门的真值表输入1输入2输出110101011000在实际应用中异或门常用于数据加密、校验等场景。例如在数据传输过程中我们可以通过异或运算对数据进行加密接收方再通过相同的异或运算对数据进行解密从而保证数据的安全性。门电路是计算机中逻辑运算的基础通过将这些基本的门电路进行不同的组合可以构建出更复杂的逻辑组件如加法器、乘法器、寄存器等为计算机的运算和存储功能提供支持。三、算术逻辑单元ALU算术逻辑单元是计算机中进行算术运算和逻辑运算的核心部件相当于计算机的“数学大脑”。算术单元实现数字运算算术单元负责计算机里的所有数字操作如四则运算等。1. 半加器Half Adder半加器用于进行两个1位数的相加它有两个输入A和B和两个输出进位和和。其工作原理是通过异或门实现“和”的计算通过与门实现“进位”的计算。半加器的真值表AB进位和0000010110011110例如当A1B1时异或门的输出和为0与门的输出进位为12. 全加器Full Adder半加器只能处理两个1位数的相加无法处理来自低位的进位。而全加器可以进行三个1位数的相加这三个数分别是两个加数A和B以及来自低位的进位C。全加器有三个输入A、B、C和两个输出进位和。全加器可以通过两个半加器和一个或门来构建用一个半加器对A和B进行相加得到一个中间和和一个中间进位用另一个半加器将中间和与来自低位的进位C进行相加得到最终的和用或门将两个中间进位进行或运算得到最终的进位。全加器的真值表ABC进位和00000001011000101110110101011011111逻辑单元实现逻辑操作逻辑单元主要用来进行逻辑操作最基本的操作包括与、或、非操作同时也可以进行多位数字的比较等复杂逻辑运算。以8位数非0判断器为例8位非0判断器的功能是判断一个8位二进制数是否为0如果不为0则输出TRUE如果为0则输出FALSE。构建方法先将A7和A6通过或门连接其输出再与A5通过或门连接以此类推直到最后与A0通过或门连接最终的或门输出就是判断结果。逻辑单元在计算机中有着广泛的应用在程序的条件判断if-else语句、循环控制for循环、while循环等方面都需要逻辑单元进行逻辑运算以确定程序的执行流程。五、控制单元CU与指令执行控制单元主要功能是根据程序中的指令产生相应的控制信号协调和控制计算机的各个部件按照正确的顺序执行操作以完成指令所规定的任务。为了能够有序地执行程序中的指令控制单元需要借助程序计数器PCProgram Counter和指令寄存器IRInstruction Register这两个重要的寄存器。1. 程序计数器PC程序计数器用于保存下一条要执行的指令在内存中的地址。在计算机启动时程序计数器会被初始化为程序入口地址即程序中第一条指令的地址。当一条指令被取出来并开始执行后程序计数器会自动递增指向当前指令的下一条指令的地址从而保证程序能够按照指令的顺序依次执行。2. 指令寄存器IR指令寄存器用于保存当前正在执行的指令。当控制单元根据程序计数器的值从内存中取出一条指令后会将这条指令存入指令寄存器中然后对指令进行解码和分析确定指令的操作码和操作数进而产生相应的控制信号指挥各个部件执行指令所规定的操作。在指令执行过程中指令寄存器中的指令保持不变直到下一条指令被取出并存入指令寄存器中。指令的组成与类型指令是指导CPU进行工作的命令它是计算机能够理解和执行的最小操作单位。一条完整的指令通常由操作码opcode和操作数operand两部分组成。1. 操作码opcode操作码用于表示指令要执行的操作类型例如加法、减法、乘法、除法、数据移动、逻辑运算、跳转等。不同的操作码对应不同的操作CPU通过识别操作码来确定要执行的操作。操作码的位数决定了指令系统中可以包含的指令种类数量例如4位操作码可以表示2⁴16种不同的操作。2. 操作数operand操作数是指令要操作的数据或数据的地址它指示了指令执行过程中所需要的具体数据来源或结果的存放位置。操作数构成立即数直接包含在指令中的数据寄存器编号表示操作数存放在某个寄存器中内存地址表示操作数存放在内存的某个地址单元中。根据操作数的数量指令可以分为零操作数指令、一操作数指令、二操作数指令和三操作数指令等。3. 常见指令类型LOAD指令用于将数据从内存加载到寄存器中。例如LOAD_A 1110其中LOAD_A是操作码表示将数据加载到A寄存器中1110是操作数表示内存地址这里1110是4位二进制数对应十进制的14这条指令的功能是将内存地址14中的数据加载到A寄存器中。STORE指令用于将寄存器中的数据写入内存中。例如STORE_A 1101其中STORE_A是操作码表示将A寄存器中的数据写入内存中1101是操作数表示内存地址对应十进制的13这条指令的功能是将A寄存器中的数据写入内存地址13中。ADD指令用于进行加法运算。例如ADD 01 00指令其中ADD是操作码表示进行加法运算01和00是操作数分别表示两个寄存器的编号假设01表示B寄存器00表示A寄存器这条指令的功能是将A寄存器和B寄存器中的数据相加并将结果存入B寄存器中。JMP指令用于实现程序的跳转。例如JMP 0010指令其中JMP是操作码表示程序跳转0010是操作数表示跳转目标地址对应十进制的2这条指令的功能是将程序计数器的值修改为2使程序下一条执行内存地址2中的指令。指令本身也是一个数字它以二进制形式保存在内存的某个区域中。当计算机执行程序时控制单元会按照程序计数器的指示从内存中依次取出指令存入指令寄存器然后对指令进行解码和执行。CPU的基本工作流程指令周期CPU的基本工作流程是按照指令周期来进行的一个指令周期通常包括取码阶段Fetch Phase、解码阶段Decode Phase和执行阶段Execute Phase三个阶段。为了更清晰地展示CPU的工作流程我们以一个具体的例子来进行说明。假设内存中的指令和数据如下表所示地址从0到15数据以8位二进制形式表示地址数据000101110100011111210000100301001101400000000500000000600000000700000000800000000900000000100000000011000000001200000000130000000014000000111500001110同时定义以下几条指令指令功能说明4位opcode操作的地址或者寄存器LOAD_A从RAM的指定地址将数据加载到A寄存器00104位RAM地址LOAD_B从RAM的指定地址将数据加载到B寄存器00014位RAM地址STORE_A将数据从A寄存器写入RAM的指定地址01004位RAM地址ADD计算两个指定寄存器的数据的和并将结果放入第二个寄存器10002位的寄存器ID2位的寄存器ID初始状态下寄存器A和寄存器B的值都为0程序计数器PC的值为0指令寄存器IR为空。1. 取码阶段Fetch Phase在取码阶段控制单元CU根据程序计数器PC的值从内存中取出对应的指令并将其存入指令寄存器IR中同时将程序计数器的值递增为取下一条指令做好准备。在我们的例子中初始时PC的值为0控制单元根据PC的值0从内存地址0中取出数据00101110并将其存入指令寄存器IR中。此时IR中的值为00101110PC的值递增为1。2. 解码阶段Decode Phase在解码阶段控制单元对**指令寄存器IR**中的指令进行解码分析指令的操作码和操作数确定指令要执行的操作以及操作数的来源或去向。对于IR中的指令00101110我们将其拆分为4位操作码和4位操作数因为LOAD_A指令的操作码是4位操作数是4位RAM地址。操作码为0010通过查询指令表可知0010对应的指令是LOAD_A功能是从RAM的指定地址将数据加载到A寄存器操作数为1110将其转换为十进制是14即RAM的地址为14。3. 执行阶段Execute Phase在执行阶段控制单元根据解码阶段得到的信息产生相应的控制信号指挥各个部件执行指令所规定的操作。在这个例子中指令是LOAD_A 14控制单元会向内存发出控制信号要求从内存地址14中读取数据。内存地址14中的数据是00000011将其传输到A寄存器中此时A寄存器的值变为00000011对应十进制的3。至此第一条指令LOAD_A 14的执行周期完成。接下来CPU会按照同样的流程执行下一条指令此时PC的值为1控制单元从内存地址1中取出指令00011111存入IR中然后进行解码和执行。通过这个例子我们可以看到CPU的基本工作流程是一个不断循环的过程取码→解码→执行→取码→解码→执行……直到程序执行完毕遇到停机指令或出现异常情况。需要注意的是在电子计算机中CPU的指令周期是由一个时钟来驱动的。CPU主频时钟的振荡每秒次数可以近似地看作CPU每秒执行的指令数。时钟频率越高CPU的运算速度通常越快但这并不是绝对的因为CPU的运算速度还受到指令的复杂度、流水线技术的应用、缓存的大小等因素的影响。六、编程语言的发展CPU只能识别和执行二进制形式的指令。但对于人类来说直接使用二进制指令进行编程是非常困难和繁琐的因此编程语言应运而生。编程语言的发展经历了从机器语言到汇编语言再到高级语言的过程。一程序所谓程序就是一组指令以及这组指令要处理的数据。狭义上来说程序通常表现为一组文件这些文件中保存着程序的指令和数据。例如我们在计算机上安装的各种软件如办公软件、游戏程序、浏览器等都是由程序组成的。以Java开发环境JDK为例JDK是由多个程序组成的其中bin文件夹下的exe文件如java.exe、javac.exe等可以粗略地认为是按照规定格式保存的指令文件这些文件中包含了Java程序运行和编译所需的各种指令。二早期编程机器语言在计算机发展的早期还没有编程语言程序员需要直接使用二进制指令来编写程序。机器语言是计算机能够直接识别和执行的语言它由一系列0和1组成的指令构成。这种编程方式非常繁琐、容易出错而且可读性极差一旦程序出现错误排查和修改都非常困难。同时由于不同计算机的指令系统不同为一种计算机编写的机器语言程序无法在另一种计算机上运行程序的可移植性非常差。Altair 8800是最早的一批微型电脑之一用户需要控制开关一个一个bit地将程序录入到电脑中这就是早期机器语言编程的真实写照。三汇编语言为了克服机器语言编程的困难汇编语言应运而生。汇编语言是一种面向机器的编程语言它用助记符LOAD_A、ADD、STORE_A来代替机器语言中的二进制指令用符号地址来代替内存地址或寄存器编号。汇编语言与机器语言是一一对应的每一条汇编语言指令都对应一条机器语言指令。程序员使用汇编语言编写程序后需要使用汇编器assembler将汇编语言程序翻译成机器语言程序计算机才能执行。相比机器语言汇编语言具有以下优点可读性好助记符和符号地址更符合人类的思维习惯更容易理解和记忆程序的可读性大大提高。易于调试和修改由于程序的可读性提高当程序出现错误时排查和修改都更加方便。但汇编语言也存在一些缺点面向机器汇编语言依赖于具体的计算机指令系统不同计算机的汇编语言语法和指令不同程序的可移植性差。需要了解硬件细节程序员需要熟悉计算机的硬件结构如寄存器的数量和用途、内存的地址空间等编程门槛较高。四高级语言随着计算机技术的发展和应用需求的不断增加汇编语言已经无法满足大规模、复杂程序的开发需求。为了进一步提高编程效率屏蔽硬件细节让程序员能够专注于业务逻辑的实现高级语言应运而生。高级语言是一种面向问题或面向对象的编程语言它独立于具体的计算机硬件具有更接近人类自然语言的语法和结构更容易学习和使用。常见的高级语言有C、C、Java、Python、C#等。以C语言为例程序员使用C语言编写程序后需要经过编译compile和链接link两个过程将其转换为机器语言程序。首先编译器compiler将C语言源程序翻译成汇编语言程序然后汇编器将汇编语言程序翻译成目标代码机器语言程序最后链接器linker将目标代码与其他相关的目标代码如库函数的目标代码链接在一起生成可执行程序。高级语言具有以下优点屏蔽硬件细节程序员不需要了解具体的计算机硬件结构只需关注业务逻辑的实现降低了编程门槛。可移植性好高级语言程序通常可以在不同的计算机平台上运行只需进行少量的修改或重新编译具体取决于编程语言和编译器的支持。编程效率高高级语言具有丰富的语法结构和库函数能够快速实现复杂的功能大大提高了编程效率。高级语言的缺陷高级语言程序翻译成的机器语言程序通常比汇编语言程序或机器语言程序的执行效率低代码体积大。但随着编译器技术的不断发展高级语言程序的执行效率已经越来越接近汇编语言程序。Java语言相对于C语言更高级一些它采用了虚拟机JVM的技术Java程序首先被编译成字节码bytecode然后由JVM将字节码翻译成机器语言程序并执行。这种方式使得Java程序具有更好的可移植性可以在任何安装了JVM的计算机平台上运行而不需要重新编译。七、操作系统随着计算机硬件的不断发展和软件的日益复杂计算机系统中需要管理的资源越来越多如CPU、内存、外存、输入输出设备等。为了有效地管理这些资源提高计算机的利用率和易用性操作系统Operating SystemOS应运而生。操作系统是一组管理计算机资源的软件的统称它是计算机硬件和应用程序之间的桥梁为应用程序提供了一个良好的运行环境。一常见的操作系统目前常见的操作系统有很多种根据应用场景的不同可以分为桌面操作系统、服务器操作系统、移动操作系统等。桌面操作系统主要用于个人计算机PC为用户提供图形化的操作界面方便用户进行办公、娱乐、学习等活动。常见的桌面操作系统有Windows系列、macOS系列、Linux系列。服务器操作系统主要用于服务器为Web服务器、数据库服务器、邮件服务器等服务器应用程序提供稳定、高效的运行环境。常见的服务器操作系统有Windows Server系列、Linux系列CentOS、Red Hat Enterprise Linux、Unix系列Solaris、AIX等。移动操作系统主要用于智能手机、平板电脑等移动设备为移动应用程序提供运行环境支持触摸操作、移动网络等功能。常见的移动操作系统有Android系列、iOS系列、鸿蒙操作系统。二操作系统的定位与分层视图从计算机系统的分层结构来看操作系统位于应用程序和计算机硬件之间它向下管理计算机硬件资源向上为应用程序提供服务。计算机系统的分层视图如下应用程序层包括各种用户使用的软件如Word、Excel、PowerPoint等办公软件、游戏程序、浏览器、聊天软件等。应用程序通过操作系统提供的接口来调用计算机硬件资源实现各种功能。操作系统层负责管理计算机的硬件资源为应用程序提供统一的、抽象的接口协调应用程序之间的资源分配和调度确保计算机系统的稳定、高效运行。硬件层计算机的各种硬件设备包括处理理器CPU、主存内存、输入输出设备、外存等。操作系统的主要作用是将复杂的硬件操作抽象为简单的接口提供给应用程序使用使得应用程序开发者不需要了解具体的硬件细节就能够开发出能够在不同硬件平台上运行的应用程序。同时操作系统还负责管理和分配硬件资源避免多个应用程序之间因争夺资源而产生冲突提高资源的利用率。三操作系统的基本功能操作系统具有多种功能其中最基本、最重要的功能包括以下两个方面防止硬件被失控的应用程序滥用在计算机系统中多个应用程序可能会同时运行如果没有操作系统的管理这些应用程序可能会随意访问和修改计算机的硬件资源导致系统崩溃或数据丢失。操作系统通过引入进程、内存保护等机制对应用程序的行为进行限制和监控防止应用程序滥用硬件资源。向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备不同的计算机硬件设备如不同品牌、不同型号的显卡、声卡、打印机等其硬件结构和工作原理可能存在很大的差异如果应用程序需要直接控制这些硬件设备就需要了解各种硬件设备的细节这会给应用程序开发带来很大的困难。四进程/任务Process/Task每个应用程序运行于操作系统之上时操作系统会提供一种抽象好像系统上只有这个程序在运行所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的进程可以说是计算机科学中最重要和最成功的概念之一。1. 进程的定义进程是操作系统对一个正在运行的程序的一种抽象换言之可以把进程看做程序的一次运行过程同时在操作系统内部进程又是操作系统进行资源分配的基本单位。一个程序可以对应多个进程例如我们可以同时打开多个浏览器窗口每个浏览器窗口都是一个独立的进程它们都运行着同一个浏览器程序。每个进程都有自己独立的内存空间、寄存器状态、程序计数器等进程之间的资源是相互独立的一个进程的运行不会影响其他进程的运行除非通过进程间通信机制进行交互。2. 进程控制块PCBProcess Control Block计算机内部要管理任何现实事物都需要将其抽象成一组有关联的、互为一体的数据。在操作系统中进程也被抽象为进程控制块PCB。PCB是一个数据结构用于存储进程的相关信息操作系统通过PCB来管理和控制进程。五CPU分配——进程调度Process Scheduling在单CPU单核的计算机系统中同一时间只能有一个进程在CPU上运行。为了提高CPU的利用率让多个进程能够并发执行操作系统采用进程调度机制对CPU资源进行合理的分配。操作系统对CPU资源的分配采用的是分时复用即不同的进程在不同的时间段内使用CPU资源。操作系统会为每个进程分配一个时间片Time Slice当一个进程的时间片用完后操作系统会暂停该进程的运行将其从运行态变为就绪态然后从就绪队列中选择另一个进程为其分配CPU资源使其开始运行。这个过程称为进程切换Process Switching。在一个CPU核心上按照分时复用执行多个进程称为“并发执行”。在人的视角看起来是同时执行微观上是一个CPU在串行执行切换速度极快。在多个CPU核心上同时执行多个进程称为“并发执行”此时就是真正的同时执行。现代CPU在运行进程时并行和并发是同时存在的。程序猿在写代码时无法区分这些进程是并行执行还是并发执行所以会把并行和并发统称为并发进程调度算法是决定如何从就绪队列中选择进程并为其分配CPU资源的策略。常见的进程调度算法有先来先服务FCFSFirst-Come, First-Served调度算法按照进程到达就绪队列的先后顺序进行调度先到达的进程先获得CPU资源。这种算法的优点是实现简单公平性好缺点是可能会导致“短进程等待长进程”的情况降低系统的整体效率。短作业优先SJFShort-Job-First调度算法选择就绪队列中估计运行时间最短的进程先获得CPU资源。这种算法的优点是可以提高系统的吞吐量单位时间内完成的进程数量缺点是可能会导致“长进程饥饿”的情况即长进程长时间无法获得CPU资源。优先级调度算法为每个进程分配一个优先级选择就绪队列中优先级最高的进程先获得CPU资源。优先级可以分为静态优先级在进程创建时确定整个进程运行期间保持不变和动态优先级在进程运行过程中根据进程的实际情况动态调整。这种算法的优点是可以根据进程的重要性进行调度缺点是可能会导致“低优先级进程饥饿”的情况。时间片轮转RRRound-Robin调度算法将CPU的时间划分为若干个时间片每个进程轮流获得一个时间片的CPU使用权当时间片用完后无论进程是否执行完毕都将其暂停重新放入就绪队列等待下一次调度。这种算法的优点是可以保证进程的响应时间实现进程的并发执行缺点是时间片的大小会影响系统的性能如果时间片太小会导致进程切换频繁增加系统开销如果时间片太大会导致进程的响应时间变长。在实际的操作系统中通常会采用多种调度算法相结合的方式以满足不同的应用需求。例如在Linux操作系统中采用的是CFSCompletely Fair Scheduler调度算法它是一种基于权重的公平调度算法能够根据进程的优先级和运行时间动态调整进程的调度权重确保每个进程都能获得相对公平的CPU资源。

相关新闻