76 lines
2.4 KiB
Markdown
76 lines
2.4 KiB
Markdown
|
## 进程、线程
|
|||
|
|
|||
|
进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发; 线程是进程的子任务,是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. 银行家算法
|