一 、概念
1. 进程(process)
- 操作系统进行资源调度和分配的一个独立单位
联想:假设CPU是一个工厂,工厂内有多个车间(进程),工厂电力有限,一次只能运行一个车间。 - 进程有独立的地址空间,在保护模式下,一个进程崩溃不会影响其他进程
联想:A车间出故障,不会影响B车间。不同应用程序之间占用不同的进程,当Excel崩溃时,不会影响Google浏览器的使用 - 进程的地址空间:文本区域、数据区域、堆栈。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程中调用的指令和本地变量。
2.线程(thread)
- 线程是进程的一个实体,由线程ID,当前指令指针(PC),寄存器集合和堆栈组成,是CPU资源调度和分配的基本单位,一个进程可以包括多个线程
联想:线程是车间里的工人, 一个车间内可以有多个工人 - 同一进程的资源和内存是共享的,但线程拥有独立的栈空间,独立的执行序列
联想: 车间的空间是工人们共享的,但每个工人是独立进行工作的,
3.上下文切换(thread)
- CPU从一个进程切换到另一个进程,或从一个线程切换到另一个线程
联想:线程是车间里的工人, 一个车间内可以有多个工人
4. 互斥锁(Mutex)
- 某些共享内存只支持一个线程使用,其他线程必须等它结束,才能使用
联想:车间内的厕所只能一个人使用,使用时,加上锁,使用完,打开锁,后到的人等打开锁再进去
5.信号量(Semaphore)
- 某些共享内存只支持固定数目的线程使用
6.进程调度
进程的基本状态
- 就绪
- 执行
-
- 等待/阻塞/挂起
调度种类
- 高级调度:也称作业调度,将外存中处于后备队列中的作业调入内存
- 低级调度:也称线程调度,由分派程序把处理机分派给某个进程
- 中级调度:将暂时不能运行的进程调至外存中,此时状态称为挂起;当内存空闲时,再将他们调回内存,放入就绪队列上,此时状态称为就绪
非抢占式调度与抢占式调度
- 非抢占式:调度程序一旦把资源分配给某个进程后,直到进程结束,才会释放资源
- 抢占式:调度程序将正在进行的程序强行暂停,并将CPU资源分配给其他就绪程序
进程的优先级
- 普通进程:优先级低,更长执行时间的进程。例如文本编译器、批处理文档、图形渲染
- 实时进程:优先级高,需要尽快被执行的进程,不能被普通进程阻挡,如视频播放、各种监测系统
调度策略
- CPU利用率:
- 系统吞吐量:单位时间内CPU完成作业的数量
- 周转时间:从任务开始到任务结束的时间。包括作业等待、在就绪队列中排队、在处理机上运行、输入输出花费的时间的总和。
- 响应时间:从用户提交请求到系统首次产生响应所用的时间
调度算法
- 先来先服务(FCFS):
- 按照任务到达就绪队列的顺序
- 非抢占式、算法简单、对短作业不利,对I/O繁忙性不利
- 短作业(进程)优先调度(SJ§F):
- 短作业优先调度:从后备队列中选择一个或多个估计运行时间最短的作业,调入内存运行
- 短进程优先调度:从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某件事件阻塞时,才释放处理机
- 优先级调度:从后备队列中选择优先级最高的作业,调入内存
- 非剥夺式优先级调度:当某一个进程正在处理机上运行时,即便有更紧迫的进程进入就绪队列,仍让当前运行的进程继续运行,直到主动让出处理机(任务完成或等待事件),才把处理机分配给更为紧迫的进程。
- 剥夺式优先级调度:当一个进程正在处理机进行,若某个更为紧迫的进程进入就绪队列,则立即停止当前进行的进程,将处理机分配给更紧迫的进程
- 基于时间片的轮转调度
参考
【1】:阮一峰 进程与线程的一个简单解释
【2】:腾讯面试题