目录
1 冯诺依曼体系结构
数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
2 CPU的核心和频率
在现代的大部分CPU一个核心包括两个逻辑处理器,而一个逻辑处理器则可以运行一个程序。对于程序员来说,可以把代码中的任务拆成多个,使用不同的核心分别执行,也可以叫做“并发编辑”。
CPU的运算速度可以用频率来表示,基准速率可以浅显的理解为一秒内最低的运算次数。
3 CPU指令执行的流程
在双击.exe运行程序之后,系统把该程序加载到内存中,CPU中的一个特殊寄存器(程序计数器)会保存之后决定从哪个内存位置开始执行指令,一般都会从0位置开始经历三个步骤:读指令、解析指令、执行指令。
(1)读指令:程序计算器会从0位置开始读取,每次读取之后++。
(2)解析指令:程序计数器从内存中调取的指令格式为,前四位bite位叫操作码(opcode)负责决定操作,后四个bite位则为操作的地址或者寄存器。
CPU中的运算比较复杂,但运算频率很好的弥补这个缺点。
4 操作系统的内核
(1)管理硬件:管理计算机接入的设备。
(2)提供稳定的运行环境:给每个软件提供稳定的运行环境,不相互干扰。除此之外操作系统会给应用程序提供API来完成不同的功能。在Java代码中如println是Java标准库中提供的函数,JVM中,为了实现println功能就会调用系统提供的API,调用系统API之后程序就会进入内核执行,此时系统就会操作对应的硬件设备。
5 进程的概念
进程的概念顾名思义就是正在运行的程序,运行时exe就会被加载到内存中,并且cpu执行里面的指令,而可执行文件没有运行的时候则储存在硬盘上。
6 进程的管理(PCB,链表)
6.1 进程管理的本质
进程管理是操作系统的核心功能,本质是通过结构化数据描述+高效数据结构实现对程序运行的精准控制。
6.2 PCB概念与内存控制
每个进程在操作系统内核中对应一个进程控制块(Process Control Block,PCB),在 Linux 中具体实现为 task_struct 结构体,PCB 是进程的全息数字档案。
PCB在获取内存时,通过系统内核的 slab分配器预分配内存池
6.3 进程属性描述
进程属性通过 结构体/类 来描述进程属性,在Linux中用进程控制块(PCB)来描述进程属性
6.4 组织进程
通过全局数组/链表存储所有进程的PCB,通过链表来连接,并进行增删改查。我们可以通过红黑树或哈希表来实现遍历功能。
6.5 PCB属性及作用
PCB包括PID、内存指针、文件描述符表等重要属性。PID可以让系统找到对应进程,在同一时间每个程序的PID都不相同且唯一。内存指针主要描述进程依赖的指令和数据都存储在内存的哪个区域,文件描述符表则能看到打开了文件。
7 进程的调度
7.1 进程状态
进程在生命周期中会经历以下三种状态:
• 运行状态:进程正在 CPU 上执行指令
• 就绪状态:进程已准备好运行,但尚未分配到 CPU
• 阻塞状态:进程因等待外部事件(如I/O操作)而暂停运行,无法被调度到CPU
7.2 进程优先级
• 用户设定优先级:允许用户为关键任务分配高优先级
• 系统动态调整:
(1) 防止饥饿机制:若进程等待超过30分钟,系统自动提升优先级 (避免长期无法运行)
(2) 防CPU独占:频繁占用CPU的进程会被暂时降级
饥饿进程:长期因优先级低无法获得CPU资源的进程,动态优先级可缓解此问题
7.3 进程上下文
• 定义:进程切换时需要保存的中间状态信息,包括CPU寄存器值、进程计数器、堆栈指针等。
• 作用:保证进程被重新调度时能从断电处继续执行
• 上下文切换代价:频繁切换会降低效率
7.4 进程的记账信息
记录CPU占用时间,用分析进程行为 (如I/O密集型或计算密集型)。通过历史数据调整优先级。
7.5 并发执行
• 定义:单核CPU通过快速切换运行多个进程,宏观上“看似同时执行”,但是微观上串行。
在某个时刻,CPU运行程序1和程序2并不同时,但是由于CPU运算过快人眼观察不到切换的速度,所以这个现象叫做并发执行。
7.6 并行执行
• 定义:多核CPU中不同核心同时运行多个进程
• 与并发的区别:并发是单核的"伪并行",并行是多核的"真并行"。
CPU中有多个相不干扰的核心,每个核心之间在微观上可以执行不同的进程