【JavaEE】-- 计算机是如何工作的
文章目录
- 1. 冯诺依曼体系(VonNeumann Architecture)
- 2. CPU 基本工作流程
- 2.1 寄存器(Register)和 内存(RAM)
- 2.2 控制单元 CU(ControlUnit)
- 2.3 指令(Instruction)
- 3. 操作系统(OperatingSystem)
- 3.1 操作系统的定位
- 3.2 什么是进程/任务(Process/Task)
- 3.3 进程控制块抽象(PCB Process Control Block)
- 3.4 内存分配-内存管理(Memory Manage)
- 3.5 进程间通信(InterProcessCommunication)
话不多说,我们就不扯什么计算机发展史了,感兴趣的可以自行百度。我们直接进入正题了。
1. 冯诺依曼体系(VonNeumann Architecture)
• CPU(中央处理器):由运算器和控制器组成,CPU是电脑最核心的部分。
- 运算器:执行指令完成计算工作。
- 控制器:协调指令执行顺序。
在这里插入图片描述
• 存储器:分为外存和内存,用于存储数据(使用二进制方式存储)
• 输入设备:用户给计算机发号施令的设备(键盘、鼠标、扫描仪…)
• 输出设备:计算机个用户汇报结果的设备(显示器、音响、打印机).
针对存储空间:硬盘>内存>CPU
针对数据访问速度:CPU>内存>硬盘
拜见两位计算机祖师爷–冯诺依曼 && 图灵
2. CPU 基本工作流程
当今两大CPU巨头:英特尔公司和AMD公司。
现代CPU的主要指标:
这是我的电脑CPU,以我的电脑为例。
我们主要看下面这些部分:
- 基准速度(也叫基频):2.40GHz(G相当于10^9 10亿)表示此时这个CPU每秒进行24亿次计算。
- 速度(加速频率):2.42GHz 。
- 内核(核心数):CPU 中实际的物理处理单元。每个内核都可以独立地执行指令和处理数据。
- 逻辑处理器:辑处理器是操作系统和应用程序所看到的处理单元。在现代 CPU 中,通过超线程(Hyper - Threading)技术可以将一个物理核心模拟成两个逻辑处理器。
逻辑处理器数量 = 内核数量 × 每个内核通过超线程模拟出的逻辑处理器数量。
我的笔记本电脑中的核心数有14个,但是显示我的逻辑处理器不是28个,而是20个。这代表着并不是所有的内核都开启了超线程技术或者超线程技术没有完全将每个内核模拟成两个逻辑处理器。
频率和核心数都是影响CPU性能的重要指标。
2.1 寄存器(Register)和 内存(RAM)
寄存器属于存储器的一部分,只不过是封装到了CPU里面。CPU中使用比较频繁的值,或者运算过程中生成的中间值,都会存放在寄存器中。
硬盘 | 内存 | 寄存器 | |
---|---|---|---|
容量 | 最大 | 最小 | |
速度 | 最慢 | 最快 | |
造价 | 最低 | 最高 |
CPU 中寄存器的数量因架构、性能需求和应用场景等因素而异,从十几个到几十个不等。
2.2 控制单元 CU(ControlUnit)
控制单元负责指令的调度,哪些应该让CPU执行。负责指挥和协调计算机各个部件之间的工作,确保计算机能够有条不紊地执行指令。
2.3 指令(Instruction)
计算机的主要任务就是执行命令。
电脑中我们安装好的App,其实就是编译好的一堆指令。
指令本身也是一个数字,用二进制的形式保存在内存的某个区域中。
3. 操作系统(OperatingSystem)
操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
3.1 操作系统的定位
操作系统有两个基本功能:
1.防止硬件被时空的应用程序滥用。
2.向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
操作系统如何管理进行中的程序?
- 对下(硬件)管理各种计算机设备。
- 对上(软件)为软件提供一个稳定的运行环境。
3.2 什么是进程/任务(Process/Task)
进程是操作系统对⼀个正在运⾏的程序的⼀种抽象,换⾔之,可以把进程看做程序的⼀次运⾏过程;同时,在操作系统内部,进程⼜是操作系统进行资源分配的基本单位。
*每一个运行的程序在操作系统里都对应着一个进程。*程序安装完之后,在系统中都是静态文件存放在磁盘中,双击之后,从磁盘加载到内存,系统就会创建一个这个程序对应的进程,这时程序就运行起来了。
进程可以分为:前台进程(用户执行的进程);后台进程(系统创建的进程)。操作系统本身也是一个程序,它也创建了很多进程。
3.3 进程控制块抽象(PCB Process Control Block)
计算机同时可以跑很多个进程(几百个),这时就需要对进程进行管理。
描述
我们使用C语言中的结构体;Java中的类定义进程的核心属性。
-
PID
PID相当于数据表中的逐渐,也相当于人的身份证号,在操作系统中全局唯一。 -
内存指针
当程序运行时,操作系统从磁盘中加载程序文件到内存中,在程序运行之前就要在内存分配一片有效的空间。在内存中的数据宇指令最终被CPU执行和读取。 -
文件描述符表
当程序运行起来之后需要访问一些文件资源,这时操作系统就负责给程序分配这些资源,程序需要的每个文件就被称为文件描述符,多个文件母爱书复合在一起,就组成了文件描述符表,类似于一个集合。
默认每个程序运行时都会分配三个文件描述符:
- 标准输入:System.in
- 标准输出:System.out
- 标准错误:System.error
进程调度:
- 进程状态
- 运行状态:当前在CPU上,正在执行指令。
- 就绪状态:排队中,随叫随到,随时可以上CPU运行。
一般将运行状态和就绪状态理解为一个状态。
- 阻塞状态:当前不适合到CPU上执行。
当前电脑上有百十个进程,但是只有20个逻辑处理器,也就意味着可以通过是处理20个指令。
一个逻辑处理器,并不是一次把一个进程执行完再去执行另一个进程,而是一个进程执行一会就让它休息一会,再去执行另一个进程,这样不停的轮换着执行,由于CPU的频率很高,轮换的速度也很快,人察觉不到而已。
并发与并行
- 进程优先级
哪个进程有更多机会到CPU上运行,优先级就越高,机会就越大。 - 进程的上下文
进程调度的过程中,进程一会失去了CPU,一会又回到CPU上继续执行,回到CPU之后要沿着上次的状态继续执行,而不是从头开始。
失去CPU时,进程的中间值(当前执行的指令是什么,下一条指令是什么,中间产生的一些变量):从寄存器 —> 内存中。
回到CPU中时,从内存中 —> 寄存器。
保存上下文–读档, 回复上下文–存档。
7. 进程的记账信息
统计功能:统计每个进程在CPU上运行了多久,哪些进程多长时间没有上CPU运行了。
进程的组织方式:
通过一个双向链表组织PCB
- 创建一个进程—把PCB加入到链表中。
- 销毁一个进程—把PCB从链表中删除。
- 查看所有的进程—遍历双向链表。
3.4 内存分配-内存管理(Memory Manage)
操作系统为了防止野指针,使用了虚拟内存来规避这个现象,通过内存管理单元(MMU)的方式来实现。