计算机的基本工作
了解计算机的核心工作机制,有利于理解我们平时编程的一些行为,打破大众对计算机的神秘感
CPU基本工作流程
缓存 Cache
缓存是一个小而快的临时存储数据,用来一部分将来会可能会再次使用到的数据,从而减少访问较慢的资源的次数(如内存,硬盘),对缓存分配的空间比内存要小,访问速度更快,一般有L1,L2,L3层级缓存。空间越大,速度越慢,故一般L1的访问速度是最快的

寄存器
寄存器同样是cpu内部的存储数据的硬件设施,空间比缓存更小,速度比缓存更快速,进行临时的计算和保存
一般是几十个寄存器,每个寄存器8个字节左右(64位cpu),总的空间上百个字节(1kb不到)
CPU内部有很多寄存器,用于保存当前程序运行的状态
- 除了保存数据的一些寄存器外,还有一些特殊的寄存器,能记录当前指令执行到哪一条、记录当前程序的函数调用关系…
指令
cpu工作的指令,一般八位的指令,前4位是操作码,后四是操作数
Q:那指令都存储在哪里?
A:指令最初会存储在内存中,但如果每次执行都从内存中访问,速度就很慢了,所以第一次执行时会被加载指令缓存中,避免每次执行都从内存访问,从而大幅提升效率
更深入的执行流程:
例如有一组数据列出了地址与数据,演示一个指令执行的周期
总结
- CPU中的寄存器是决定CPU执行哪条指令的关键
- 指令是由 动作+操作 组成
- CPU眼里只有指令,没有其他概念
操作系统
✨操作系统最主要的功能就是管理~~
- 管理好各种硬件设备
- 给软件提供稳定的运行环境
常见的操作系统有
- Android——安卓本质上也是Linux,Android在Linux基础上做了许多改进,使它更适合移动端
- Windows
- Linux
API——Application Programming Interface
API是应用程序访问操作系统服务的接口,是软件与硬件协同运作的桥梁,程序通过它进行访问文件、内存、设备,而不是直接操控硬件,起到了“中介机制”
- 软件如果想控制硬件设备,需要向操作系统申请调用API
- 所以操作系统封装了一套统一的接口API,由它来控制硬件,软件只能请求服务,不能直接操作硬件
💥进程
计算机上运行起来的程序就叫做进程(process),也叫任务(task)
进程的运行需要消耗一定的硬件资源,((20250721190527-d0ai27y “一个可执行文件中可能有多个进程”))——操作系统中,进程是资源分配的基本单位
-
与执行文件的区别?

.exe这些就是执行文件,.dll这些是动态链接库,在.exe被执行的时候会使用到。可执行文件是编译生成的,在硬盘上的静态内容,当双击exe可执行文件的时候,操作系统就会把exe加载到内存RAM中,此时变成了动态内容
🧮管理进程
操作系统管理进程大致分为两部分
-
描述
通过一个结构体变量,描述进程的各种属性,这个结构体变量称为PCB(进程控制块)Process Control Block
-
组织
使用一定的数据结构,将N个PCB串在一起,一般使用链表的方式
PCB
它是进程管理的核心,记录和管理着进程的所有关键信息
PCB的核心属性
-
PID
相当于一个进程的身份证,独一无二,确保同一时刻,操作系统不会出现重复的PID。
有的进程可能是一组,运行了一个exe,出现了一组进程——一个可执行文件中可能有多个进程
-
内存指针
众所周知,进程的运行需要内存,而在一个进程的内存空间里,有的部分是”指令”,有的是“数据”。
内存指针则是告诉操作系统,哪部分是指令,哪部分是数据
-
文件描述符 File Description
文件描述符是操作系统用来标识打开的文件的一个编号,确定文件内容在硬盘的哪个位置
1)文件描述符FD vs 文件
- 文件是在硬盘中存储的,让各种进程来读写操作、打开或关闭
- FD是存储在内存的内核表,是操作系统创建的,相当于打开文件的一个钥匙🔑,提供了一个访问通道
- 所有的文件操作(读/写/打开/关闭)实际上都是通过这个🔑完成的
一个进程想要读写文件,需要先打开需要先打开,打开的时候就会在PCB中构建一个文件相关的结构体,放到PCB的文件描述符中
文件描述符表,可以当成一个数组,里面包含了许多结构体,每个结构体都包含了每个文件的具体信息
-
进程状态
一般可以分为两大状态
-
就绪状态——随叫随到
-
堵塞状态——该进程无法参与CPU的调度上
以前也遇到过堵塞状态:Scanner 不输入则无法进行下一步 一直等待

-
-
进程的优先级
进程(程序)的优先级,决定哪个进程要优先安排cpu的资源
-
进程的上下文
对于计算机来说,“上下文”具体指的是寄存器的值
一个进程调度到cpu上执行,他可能会离开,过一段时间又回到cpu上,继续之前的位置往下执行。类似于存档
- 进程在cpu执行的时候,寄存器的值不断的在改变,当进程离开cpu的时候,会把这一时刻寄存器的值记录拷贝出来保存到内存PCB结构体(存档)
- 进程后序回到cpu,也是把之前PCB保存的这些寄存器的值,重新写入cpu寄存器内,恢复上下文(读档)
-
进程的记账信息
统计机制,统计每个进程都运行了多长时间
- 优先级机制下,就可能使某个进程吃到的cpu资源非常少
- 通过统计机制可以更加合理灵活的分配cpu的资源
操作系统对PCB的各种信息进行评估,对进程进行各种调度,面对多任务的场景,CPU执行的方式有并行与并发两种方式
并行:两个CPU核心运行不同进程的指令
并发:一个CPU核心,通过”分时复用“的方式实现”同时执行“
每个进程有自己独立的空间(进程的隔离性),多个进程同时执行互不影响
🧭线程
也叫轻量级进程,创建销毁线程的开销远比进程的开销要小许多。进程包含了线程,一个进程可能包含一个/多个线程,更准确的说,进程的调度=>线程调度
随着计算机发展,业务规模扩大,服务器在同一时间需要给更多的客户提供服务,此时服务器运行很多的进程
服务器也需要频繁创建/销毁——这是消耗资源的,故在处理并发的处理许多客户端的请求,此时可以用”多线程“的解决方案,在Java中,鼓励多线程而不鼓励多进程的方案
-
多线程是并发编程的核心解决方案
-
线程是操作系统调度执行的基本单位——每一个线程都是一个”执行流“,都能被放到CPU上执行
-
线程是共用进程里的资源的
进一步的,同一个进程内的多个线程会共用PCB的内存指针、文件描述符,但是各自有各自的状态,上下文,记账信息,优先级
但是多线程也会出现问题,我们可以画图来更进一步理解多线程
线程的相关操作,操作系统提供了对应的API,但这有些问题
- 原生的API是C语言写的
- 不同的操作系统的API不一样
Java作为跨平台的语言,Java标准库对操作系统的API进行了封装,实现了自己的类/方法——Thread
💯进程与线程的关系
- 进程包含线程,一个进程可能包含多个线程
- 他们的隔离性不同,多进程执行互不影响,一个进程异常不影响其他的进程;同一个进程的线程挂了,可能会把着其他的线程一起带走
- 进程之间通常不会有资源冲突的情况,而同一个进程之间的线程很容易出现资源冲突,因为多个线程共享一个进程的资源
- 进程是操作系统调度分配的基本单位,线程是操作系统调度执行的基本单位

被折叠的 条评论
为什么被折叠?



