文章目录
-
- 1.冯诺依曼体系(Von Neumann Architecture)
- 2.CPU基本工作流程
-
- 2.1逻辑门
- 2.2门电路
- 3.算术逻辑单元 ALU(Arithmetic & Logic Unit)
-
- 3.1 算术单元(Arithmetic Unit)
- 3.2逻辑单元(Logic Unit)
- 4 寄存器(Register) 和内存(RAM)
- 5.控制单元CU(Control Unit)
-
- 5.1指令(Instruction)
- 6.编程语言
-
- 6.1 程序(Program)
- 6.2编程语言的发展
- 7.操作系统(Operating System)
- 8 什么是进程/任务(Process/Task)
-
- 8.1进程
- 8.2进程控制块抽象(PCB Process Control Block)
- 8.3CPU 分配 —— 进程调度(Process Scheduling)
- 8.4内存分配 —— 内存管理(Memory Manage)
- 8.5进程间通信(Inter Process Communication)
1.冯诺依曼体系(Von Neumann Architecture)
约翰·冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之一。 冯·诺依曼是罗兰大学数学博士,是现代计算机、博弈论、核武器和生化武器等领域内的科学全才之一,被后人称为“现代计算机之父”、“博弈论之父”。
冯·诺依曼先后执教于柏林大学和汉堡大学,1930年前往美国,后入美国籍。 历任普林斯顿大学教授、普林斯顿高等研究院教授,入选美国原子能委员会会员、美国国家科学院院士。 早期以算子理论、共振论、量子理论、集合论等方面的研究闻名,开创了冯·诺依曼代数。 冯·诺依曼第二次世界大战期间曾参与曼哈顿计划,为第一颗原子弹的研制作出了贡献。
冯·诺依曼1944年与奥斯卡·摩根斯特恩合著《博弈论与经济行为》,是博弈论学科的奠基性著作。 晚年,冯·诺依曼转向研究自动机理论,著有对人脑和计算机系统进行精确分析的著作《计算机与人脑》(1958年),为研制电子数字计算机提供了基础性的方案。 其余主要著作有《量子力学的数学基础》(1926)、《经典力学的算子方法》、《连续几何》(1960)等。
1、CPU 中央处理器: 进行算术运算和逻辑判断.
2、存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
3、输入设备: 用户给计算机发号施令的设备.
4、输出设备: 计算机个用户汇报结果的设备
针对存储空间:
硬盘 > 内存 >> CPU
针对数据访问速度:
CPU >> 内存 > 硬盘
2.CPU基本工作流程
2.1逻辑门
逻辑门(Logic Gates)是在集成电路(Integrated Circuit)上的基本组件。简单的逻辑门可由晶体管组成。这些晶体管的组合可以使代表两种信号的高低电平在通过它们之后产生高电平或者低电平的信号。高、低电平可以分别代表逻辑上的“真”与“假”或二进制当中的1和0,从而实现逻辑运算。
2.2门电路
用以实现基本逻辑运算和复合逻辑运算的单元电路称为门电路。常用的门电路在逻辑功能上有与门、或门、非门、与非门、或非门、与或非门、异或门等几种。
3.算术逻辑单元 ALU(Arithmetic & Logic Unit)
ALU 是计算机中进行算数、逻辑运算的核心部件,是计算机的数学大脑。
3.1 算术单元(Arithmetic Unit)
算数单元,负责计算机里的所有数字操作,比如四则运算。
半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。 是实现两个一位二进制数的加法运算电路。
全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。常用二进制四位全加器74LS283。
3.2逻辑单元(Logic Unit)
逻辑单元主要用来进行逻辑操作,最基本的操作就是与、或、非操作,但不只是一位(bit)数的比较。
ALU 符号
ALU 是第一次将人类历史上的数学和逻辑学学科有机地结合起来,可以视为人类智慧发展的现代巅峰。
4 寄存器(Register) 和内存(RAM)
光有 ALU 还是远远不够的,我们无法为 ALU 提供存储的部件。这些存储都是要求必须保持通电状态的,也就是这些存储都是易失的(volatile)。
内存的构建要要复杂一点,但基本原理一致。如此构建的内存被称为 RAM(Random Access Memory),可以支持 O(1) 时间复杂度访问任意位置的数据,这也就是我们数组下标访问操作是 O(1) 的硬件支持。
5.控制单元CU(Control Unit)
我们现在有 ALU、存储了,但这还是不足以让我们的计算机工作起来,我们需要有一个部件来指挥 ALU 进行何种的运算,而这个部件就是控制单元(CU)。
5.1指令(Instruction)
所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。指令本身也是一个数字,用二进制形式保存在内存的某个区域中。
指令表
指令(instruction) | 功能说明 | 4位 opcode | 操作的地址或者寄存器 |
---|---|---|---|
LOAD_A | 从 RAM 的指定地址,将数据加载到 A 寄存器 | 0010 | 4 位 RAM 地址 |
LOAD_B | 从 RAM 的指定地址,将数据加载到 B 寄存器 | 0010 | 4 位 RAM 地址 |
STORE_A | 将数据从 A 寄存器写入RAM 的指定地址 | 0010 | 4 位 RAM 地址 |
ADD | 计算两个指定寄存器的数据的和,并将结果放入第二个寄存器 | 1000 | 2 位的寄存器 ID2 位的寄存器 ID |
指令周期:
电子计算机中的 CPU 可不像我们刚才那样,靠自己来驱动这个周期的运转,而是靠背后一个时钟来进行周期驱动的。
时钟频率的概念:
ALU + CU + 寄存器 + 时钟就组成了我们平时经常看到的一个词汇:中央处理器(Center Process Unit)简称 CPU。
6.编程语言
6.1 程序(Program)
所谓程序,一组指令和这组指令要处理的数据的结合。狭义上来说,程序对我们来说,通常表现为一组文件。
程序 = 指令 + 指令要处理的数据。
6.2编程语言的发展
注意:高级语言的一条语句(Statement)往往对应很多条指令(Instruction)才能完成。
7.操作系统(Operating System)
操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
CPU本质上通过一些基础的门电路构成:电子开关=》基础门电路=》半加器=》全加器=》加法器=》进行加减乘除
操作系统的定位:
操作系统由两个基本功能:
对上给各个软件提供稳定的运行环境,对下管理好各种硬件设备。
1) 防止硬件被时空的应用程序滥用;
2) 向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
8 什么是进程/任务(Process/Task)
8.1进程
是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
操作系统是如何管理进程的?
1、先描述一个进程(明确出一个进程上面的一些相关属性),操作系统主要是通过C/C++实现的,这里的描述其实就是用C语言中的“结构体”、Java的类差不多;进程这个结构体称为“PCB”(process control block)进程快。
2、在组织若干个进程。(使用一些数据结构,把很多描述进程的信息给放到一起去,方便进行增删查改)(上面都是以Linux讨论的)
创建进程:先创建出PCB,然后把PCB加载到双向链表中
销毁进程:找到链表的PCB,并且从链表上删除
查看任务管理器:就是遍历链表
8.2进程控制块抽象(PCB Process Control Block)
进程基础属性
🍖pid(进程id)进程的身份标识
🍖内存指针:指明了这个进程要执行的代码/指令在内存的哪里。以及这个进程中依赖的数据在哪里。当运行一个exe,此时操作系统就会把这个exe加载到内存中,变成进程,进程要执行二进制指令时,要通过编译器生成。
🍖文件描述表:程序运行过程中,(文件是在硬盘上)进程每次打开一个文件,就会在文件描述表上多增加一项(这个文件描述附表可以视为一个数组,里面的每一个元素又是一个结构体,就对应一个文件相关信息)。
🍖一个进程只要启动,不管你代码是否写了打开/操作文件的代码,都会默认的打开三个文件(系统自动打开的)标准输入(System.in),标准输出(System.out),标准错误(System.err)。
8.3CPU 分配 —— 进程调度(Process Scheduling)
操作系统对CPU资源的分配,采用的是时间模式 —— 不同的进程在不同的时间段
实现进程调度的属性:
🍖状态:描述当前这个进程接下应该怎么调度,就绪状态:随时可以去CPU上执行。阻塞状态/睡眠状态:暂时不可以去CPU上执行
🍖优先级:先给谁分配时间,后给谁分配时间;谁分的多,谁分的少
🍖记账信息:统计了每个进程都分别执行了多久,分别都执行了那些指令,分别都排队等了多久,给进程调度提供指导依据。
🍖上下文:表示了上次进程被调度出CPU的时候,当前程序执行状态;进程被调度出CPU之前,要先把CPU的所有的寄存器中的数据都会给保存到内存中(PCB的上下文字段中)相当于存档。下次进程被调度上CPU的时候,就可以从刚才的内存中恢复这些数据到寄存器中,相当于读档。
存档+读档 存档储存的游戏信息就称为"上下文"
🍖:调度:“时间管理大师”、“海王”。
并发和并行:
并行和并发只有在微观上有区分,宏观上我们是区分不了的,微观上这里区分都是操作系统自行调度的结果。我们在写代码的时候通常用并发这个词,代指并行+并发。只是在研究操作系统进程调度上稍做区分,其它场景都用并发代替。
8.4内存分配 —— 内存管理(Memory Manage)
操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰。
内存的分配依赖虚拟地址空间,由于操作系统上同时运行着很多个进程,如果某个进程崩溃了,是不会影响到其它进程的,因为进程有进程的独立性,独立性有依赖于虚拟地址空间。进程之间通过虚拟地址空间,已经各自隔离开了。但是在实际工作中,进程之间又是互相交互的,所以操作系统提供了公共空间。
例如快递,商家会把包裹放在菜鸟驿站,我们再从菜鸟驿站拿去。菜鸟驿站就相当于公共空间,商家和我们就相当于进程。
8.5进程间通信(Inter Process Communication)
进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备”隔离性(Isolation)“。
但现代的应用,要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,如此,进程之间就需要有进行“信息交换“的需求。进程间通信的需求就应运而生。
目前,主流操作系统提供的进程通信机制有如下:
文件操作
网络操作(socket)
其中,网络是一种相对特殊的 IPC 机制,它除了支持同主机两个进程间通信,还支持同一网络内部非同一主机上的进程间进行通信。
操作系统中,提供的公共空间有很多种,并且各有特点,有的存储空间大,有的小,有的慢,有的快。