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

线程满足了两个要求:

  • 实现并行、并发。(同一个服务器能处理多个客户端的数据请求)。
  • 更轻量、高效(网络的发展,上网的人越来越多,服务器要处理的客户端请求越来越多)。
相关推荐
努力也学不会java2 小时前
【RabbitMQ】 RabbitMQ高级特性(二)
java·分布式·后端·中间件·rabbitmq
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
crud方法命名示例
java·开发语言
多则惑少则明3 小时前
java 代码查重(三)常见的距离算法和相似度(相关系数)计算方法
java·算法·常见的距离算法和相似度
头发那是一根不剩了4 小时前
Spring Boot 注解 @ConditionalOnMissingBean是什么
java·spring boot·后端
天若有情6735 小时前
探秘 C++ 计数器类:从基础实现到高级应用
java·开发语言·c++
明天不下雨(牛客同名)5 小时前
介绍一下 MVCC
java·服务器·数据库
春生野草5 小时前
如何用JAVA手写一个Tomcat
java·开发语言·tomcat
smileNicky6 小时前
SpringBoot系列之OpenAI API 创建智能博客评论助手
java·spring boot·后端