learn_note/操作系统/进程、线程.md

76 lines
2.4 KiB
Markdown
Raw Normal View History

2023-01-19 16:07:04 +08:00
## 进程、线程
进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发; 线程是进程的子任务是CPU调度和分派的基本单位用于保证程序的实时性实现进程内部的并发线程是操作系统可识别的最小执行和调度单位。 每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。
## 进程通信
* 管道(pipe)
* 有名管道(named pipe)
* 信号量(semaphore)
* 消息队列(message queue)
* 信号(sinal)
* 共享内存(shared memory)
* 套接字(socket)
## 线程通信
* 锁机制:互斥锁、条件变量、读写锁等
* wait、notify
* volatile所有volatile修饰的变量一旦被某个线程更改必须立即刷新到主内存所有volatile修饰的变量在使用之前必须重新读取主内存的值
## 进程调度
发生调度的情况
1. 运行态 -> 阻塞态
2. 运行态 -> 就绪态
3. 阻塞态 -> 就绪态
4. 运行态 -> 终止态
2和3是抢占式调度1和4是非抢占式调度
## 进程调度算法
* FCFS 先来先服务调度算法
* SJF 最短作业优先调度算法
* HRRN 高相应比优先调度算法
`优先权=(等待时间 + 要求服务时间)/要求服务时间`
每次进行进程调度时,先计算「响应比优先级」,然后把「响应比优先级」最高的进程投入运行
* RR 时间片轮转调度算法
每个进程被分配一个时间段称为时间片Quantum
如果时间片设得太短会导致过多的进程上下文切换,降低了 CPU 效率
如果设得太长又可能引起对短作业进程的响应时间变长
* HPF 最高优先级调度算法
从就绪队列中选择最高优先级的进程进行运行,这称为最高优先级
* 多级反馈队列调度算法
多级反馈队列调度算法是「时间片轮转算法」和「最高优先级算法」的综合和发展
## 进程/线程之间同步方式
互斥量、读写锁、条件变量、自旋锁、屏障、信号量
## 进程状态
创建、就绪、运行、阻塞、就绪挂起、阻塞挂起、终止
## 线程状态
* 创建
* 就绪
* 运行
* 阻塞
* 终止
## 死锁
### 产生条件
1. 互斥条件
2. 请求和保持条件
3. 不剥夺条件
4. 循环等待条件
### 预防方法
1. 锁有序分配
2. 银行家算法