【JavaEE】(1) 计算机如何工作

一、计算机组成

1、现代电脑有哪些部件

  • 主板。(插座,把配件插上去)
  • 散热器。(风扇)
  • CPU。(中央处理器,整个计算机的算术运算、逻辑判断)
  • 内存。(容量小、读写速度快、贵、不是持久化存储)
  • 磁盘。(容量大、读写速度慢、便宜、持久化存储)
  • 电源。
  • GPU。(有些电脑有独立显卡,处理图像、大规模数据计算)

2、通用计算机构成

图灵提出了通用计算机理论。

冯诺依曼带领团队研发出通用计算机雏形,提出冯诺依曼体系结构

现代计算机的显卡、电源、散热器等都是后来逐渐演化出的。

二、CPU

代码都是在 CPU 上运行的,因此 CPU 是程序员最需要关心的部件。

1、性能指标

任务管理器 >> 性能。

1.1、频率

这个是我电脑 CPU 的实时频率,任务多速度就慢点,任务少速度就快点。频率越高,代表 CPU 一秒内运算的次数 越多。10 Hz 表示一秒钟运算10次,1 GHz = 10亿 Hz

1.2、核心数

CPU 上的运算单元越多,频率就越高。但 CPU 限制了只能那么大,想 CPU速度越快,运算单元更多,那么运算单元需要越来越小,但是不可能无限小。所以 CPU 的频率 已经很多年没有大的提升,达到瓶颈 。以前的 CPU 只有一个核心(相当于只有一人干活),为了提高 CPU 运算速度,研发出多核心 CPU ,再后来英特尔提出**"超线程技术"** ,即一个 CPU 核心有两个逻辑核心(一人打两份工)。

2、指令

编程语言分三大类:

  • 机器语言:二进制序列,不同序列代表不同含义。
  • 汇编语言:将固定二进制序列转为固定英文单词。
  • 高级语言:对一组汇编语言进一步封装为更具描述性的语句。

不同高级语言编写的代码最终都会转为二进制指令在 CPU 上执行:

  • C语言:源代码》编译为汇编代码》转为机器代码。
  • Java :源代码》编译为字节码(.class)》特定平台的汇编代码》转为机器代码。

CPU 如何执行指令?CPU 设计时,会设计指令表 ,说明不同二进制序列都有什么含义。CPU 会根据指令表执行指令。下面给出一个虚构的指令表,来演示 CPU 执行指令的流程。

RAM 就是内存 (Random Access Memory,随机访问存储器)。寄存器CPU 里的临时存储器 ,运算数据、中间结果、计算结果都临时存在里面,速度比内存还快得多,也很小。一条指令 8 位,前 4 位是操作码,后 4 位是操作数

比如下图是内存中存储的数据,一个存储单元(一字节)存储一条指令。

(1)执行地址 0 的指令

0010:LOAD_A,把 RAM 中 1110(14) 地址的数据(3)放到寄存器 A:

A寄存器:3

(2)执行地址 1 的指令

0001:LOAD_B,把 RAM 中 1111(15) 地址的数据(14)放到寄存器 B:

A寄存器:3 B寄存器:14

(3)执行地址 2 的指令

1000:ADD,把寄存器01(B)、寄存器00(A)的数据求和,放入寄存器00(A):

A寄存器:17 B寄存器:14

(4)执行地址 3 的指令

0100:STORE_A,将A寄存器的数据写入 RAM 中地址1101(13):

(5)执行地址 4 的指令

0000:程序执行完毕。

以上就是 CPU 执行 3+14 的过程,经过了十几条步骤。

总结

  • CPU 从内存加载指令。
  • 每个指令:取指令解析指令执行指令
  • 计算的数据必须先放到寄存器中临时存储。
  • 最终计算结果必须放回内存。

三、操作系统

前面说的都是计算机的硬件,操作系统是计算机的关键软件

1、常见的操作系统

五大操作系统:

  • Windows
  • Linux(我们以后写的是服务器程序,服务器 90% 都是 Linux 系统)
  • Mac OS(苹果电脑)
  • IOS(苹果手机)
  • Android

C语言写的程序,不同操作系统的代码功能一样,但是代码不一样。

Java 因为有 JVM 处理,完全可以在 Windows 上写程序,再放到 Linux 服务器上运行。

2、操作系统的作用

操作系统负责管理硬件设备给应用软件提供稳定的运行环境(让应用软件不能影响其它的应用运行,大不了让它自己程序崩溃)。

在硬件开发时,会开发对应的驱动程序 ,它在操作系统内部运行,用于让操作系统理解硬件并管理硬件设备。如果操作系统内部运行 的程序崩溃 ,就会**"蓝屏"**。

操作系统会用一个个类描述 硬件、软件应用(主流操作系统都是 C语言 写的,用结构体 表示类),并通过一定的数据结构 将类组织 起来,便于增删改查,管理硬件应用软件

3、进程

操作系统管理的资源有很多:CPU资源、内存资源、磁盘资源、网络资源。

进程就是运行的程序(启动一个程序,会创建一个或多个进程),每个进程需要操作系统分配硬件资源,因此,进程是操作系统中资源分配的基本单位 。上面所说的类描述,描述的就是进程的关键属性 ,包装成PCB (process controll block)进程控制块。而组织的数据结构,最典型的是链表。

  • 创建进程:创建 PCB,插入链表。
  • 销毁进程:从链表上删除 PCB,并释放。
  • 查看任务管理器的进程列表:遍历链表,打印每个 PCB 属性。

4、PCB 中的关键属性

4.1、PID

进程的 id,同一机器同一时刻唯一。

4.2、内存指针(内存资源)

说明分配 给进程的内存的分区,哪里存放指令,哪里存放数据。

外挂就是通过修改进程的内存中的指令实现的。

4.3、文件描述符表(磁盘资源)

磁盘资源在操作系统上是以文件的形式管理的,一个进程可以打开多个文件每个文件都有文件描述符 ,相当于文件的 id,多个文件描述符 就被管理在顺序表中,构成文件描述符表

进程通过进程调度分配 CPU 资源。我的电脑上大概有两百多个进程,但只有 12 个逻辑处理器。如何同时运行这么多进程?

操作系统执行中,并行、并发两种模式同时存在。

  • 并行:两个核心运行两个进程。
  • 并发:一个核心"分时复用",同时运行多个进程。因为进程间切换速度太快,所以该"串行"由人眼感觉到的是"同时"运行的。

以下讲的就是进程调度,需要的 PCB 属性

4.4、状态(CPU 资源)

进程的状态最主要的是:

  • 就绪态:随时可以被调度到 cpu 的进程、正在运行的进行。(主流操作系统,没有运行和就绪之分,统称就绪态)
  • 阻塞态:暂时不方便被调度到 cpu 的进程。

4.5、优先级(CPU 资源)

优先级高的多分配 cpu 资源,优先级低的少分配。

4.6、上下文(CPU 资源)

进程运行到一半 ,计算的中间结果 (cpu 寄存器中的数据)需要保存到 内存中的 PCB 中的上下文属性 中,进程恢复 运行时,再把中间结果加载回 cpu 寄存器。

4.7、记账信息(CPU 资源)

记录进程过去在 cpu 上一共执行了多久/多少条指令,以便找出太久没在 cpu 上运行的进程。

5、进程间通信

Java 中不鼓励多进程编程,实在要用,也只用一种进程间通信机制:网络

网络不仅支持同主机的两个进程间通信,还支持同一个网络内的不同主机上的进程通信。

6、线程

线程是轻量级进程 。进程的创建和销毁都有开销(需要申请和释放系统资源)。而同一个进程内的所有线程都是共享一个进程的资源 ,因此,进程是操作系统资源分配的基本单位线程是操作系统 cpu 调度的基本单位。除了同一个进程中的第一个线程会随着进程申请系统资源,剩下的线程都不需要。

线程满足了两个要求:

  • 实现并行、并发。(同一个服务器能处理多个客户端的数据请求)。
  • 更轻量、高效(网络的发展,上网的人越来越多,服务器要处理的客户端请求越来越多)。
相关推荐
言慢行善1 天前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星1 天前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟1 天前
操作系统之虚拟内存
java·服务器·网络
Tong Z1 天前
常见的限流算法和实现原理
java·开发语言
凭君语未可1 天前
Java 中的实现类是什么
java·开发语言
He少年1 天前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
克里斯蒂亚诺更新1 天前
myeclipse的pojie
java·ide·myeclipse
迷藏4941 天前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏4941 天前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链
qq_433502181 天前
Codex cli 飞书文档创建进阶实用命令 + Skill 创建&使用 小白完整教程
java·前端·飞书