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

发布于:2025-05-23 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、计算机组成

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 调度的基本单位。除了同一个进程中的第一个线程会随着进程申请系统资源,剩下的线程都不需要。

        线程满足了两个要求:

  • 实现并行、并发。(同一个服务器能处理多个客户端的数据请求)。
  • 更轻量、高效(网络的发展,上网的人越来越多,服务器要处理的客户端请求越来越多)。

网站公告

今日签到

点亮在社区的每一天
去签到