24
面试重点:
- 进程的概念
- 状态转移图
- 进程通信
程序,进程和线程概念
程序:为了完成特定任务实现的实体 指令+数据 组成 ,一般以文件的形式存在
进程:【面试重点】
- 进程是对程序的一次执行过程的抽象的结果 ,每个程序,支持同时有多个进程存在
参考 菜谱 和 做菜的过程 - 进程是资源(硬件资源)分配的基本单位
线程:【面试重点】 :进程和线程的区别 - 每个进程都由一个或多个线程组成
- 线程是调度的基本单位(线程是CPU 分配的基本单位)
关于核心硬件的协调管理
CPU:以时间为单位进行分配 -------- 进程调度 (进程管理)
内存:以空间为单位进行分配 -------- 内存管理
进程管理(进程调度)
- 进程:计算机硬件的视角 ----- 一组有关联的数据(一个对象)
class PCB ProcessControlBlock {
// 1.唯一标识 pid
// 2.和程序相关联的一些信息(程序文件路径是哪个)
// 3.运行阶段的一些数据(哪个用户、在哪个路径启动..)
// 4.分配的资源的统计信息
// 5.Guanyu调度相关的
}
- 进程调度
- 进程的状态
- 进程一切准备就绪,只差分配给它CPU了 ------ 就绪
- 进程已经被分配到CPU了(已经开始运行了) ------ 运行
- 进程还由于一些原因,暂时未就绪,暂不能分配CPU
1.刚刚创建,还未准备就绪 – 初始
2.所有指令已经执行结束,PCB对象暂时未被OS回收 – 结束
3.运行过程中出现- -些问题(等待10) – 阻塞
- 进程的状态
状态转移图【面试重点】
运行态 只能通过 就绪态 到达! !
并不是一旦就绪,就一定有CPU分配
只有处于就绪态,才可能被分配CPU
哪些情况可能导致从运行态变化到其他状态?
1. 执行结束
2. 时间片耗尽
3. 被高优先级的进程抢占了【抢占VS非抢占】
4. 等待外部事件(IO)
现场保护、现场恢复
- 现场:CPU中寄存器中的重要数据(其中最核心的就是PC)
- 保护:把对应的数据保存到内存中(PCB 对象中 有对应的位置去保存)
- 恢复:把内存中之前保护的数据恢复到CPU寄存器中
根据哪些算法选择一个进程来分配 CPU 【了解】
把我们自己想象成CPU
把我们要做的事情想象成进程
- 先来先服务
- 短任务优先
- 优先级
有兴趣 可以了解下:各自的优缺点、如何去实现(具体算法)
在OS语境下的并发(concurrent) VS并行(parallel) 【不常问】
用户态(user space) VS内核态(kernel space)
OS执行的时内核态的指令
进程执行的是用户态的指令
内核态和用户态的区别:
开放的权限是有区别的:
内核态的权限是比较大的
用户态的权限是有限的
实例1:
去ATM中取钱:
(用户态)
1.插卡
2.输入密码
(内核态)
3.验证密码正确
4.验证是否有余额+权限取现
5.去钱柜吐出钱
(用户态)
6.吐钱
7.吐卡
8取走卡和钱
实例2:
String line = scanner.nextLine();
1.用户态
2.内核态(因为用户态往往没有权限去操作硬件的)
3.用户态
进程管理小结:
- 管理进程对CPU的访问
- 进程是什么
- 进程vs程序
- 进程是资源分配的基本单位(在进程管理,这里体现的不明显)
目前分配CPU都是以线程为单位,而不再是以进程为单位了 - 进程是一个PCB对象,保存在内存(被OS直接管理的)中
- 进程的状态 状态转移图【重点】
- 进程的调度(选择算法 + 现场保护和恢复)
- 并发vs并行【重要】
- 内核态vs用户态
内存管理
如果使用物理地址的,有以下问题:
- 程序 需要关心具体分配到的物理地址,而物理地址很可能每次是不同的,导致处理的复杂性上升。
- 由于物理地址暴露了,导致, OS失去调整的自主权。
一般提到进程的内存地址管理,都是指的是线性地址
进程间通信(IPC Inter-Process-Communicate) 【重点】
背景1:由于进程是资源分配的基本单位,所以,分配给一个进程的内存空间,相对于其他进程来说,是隔离的
背景2:随着程序要完成的工作愈发的复杂,很多时候,会通过多个进程,一起配合,来完成一项任务。
比如: IDEA 中,点击运行时,会和javac程序(会启动为进程)来进行配合。再和java (jvm 进程)来进行配合。3个进程在配合
背景2提出了,要求不同进程之间有进行数据交换的需求。
但背景 1 又在机制上阻止了这种数据的直接共享。所以,进程间通信的必要性就出现了!!!
ps:由于Java程序很少用多进程模型(多个进程一起配合),而更多的使用多线程模式(多个线程一起配合) 。所以我们了解为主!
进程间通信的常见形式:管道、共享内存、网络
- 无名管道(pipe)
- 有名管道
- 共享内存
共享内存如图 - 网络通信(广义的一种进程间通信:可以实现不同计算机之间的进程间通信)
mysqlworkbench进程和mysqld (mysq|服务器)进程在进行进程间通信, via 网络 - 信号量
- 信号