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