文章目录
1. 进程、线程、协程
1.1 进程
进程是操作系统进程资源分配的基本单位。
进程控制块(PCB,Process Control Block)描述进程的基本信息和运行状态。创建进程和撤销进程都是对PCB的操作。
1.1.1 进程间的通信方式
进程通信是指进程之间传输信息。
- 管道
- 匿名管道。只能用于具有亲缘关系的父子进程之间或者兄弟进程之间的通信。
- 有名管道。以磁盘文件的方式存在,可以实现本机任意两个进程之间的通信。
- 消息队列。存在拷贝开销的问题
- 共享内存。存在多进程竞争内存的问题,需要依靠某种同步操作,如互斥锁和信号量等。
- 信号量。PV操作维护一个计数器,主要用于解决与同步相关的问题并避免竞争条件。
- 信号
- Socket套接字。主要用于在客户端和服务器之间通过网络进行通信。
1.1.2 进程同步方式
进程同步是控制多个进程按照一定的顺序执行。
- 临界区
- 同步与互斥
- 信号量
- 管程
1.1.3 进程的调度算法
进程调度,是为了实现最大CPU利用率。不同环境下的调度算法目标不同。
-
批处理系统
批处理系统没有太多的用户操作,调度算法应保证吞吐量和周转时间(从提交到终止的时间)。
-
先到先服务(FCFS,First-come-first-served)调度算法
FCFS是非抢占式的调度算法,按照请求的顺序进行调度。
FCFS有利于长作业,不利于短作业。因为短作业必须一直等待前面的长作业执行完毕后才能执行,而长作业的执行又需要很长时间,造成了短作业等待时间过长。
-
短作业优先(SJF,shorted job first)调度算法
SJF也是非抢占式的调度算法,按照估计运行时间最短的顺序进行调度。
长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业的到来,长作业则一直无法得到调度。
-
最短剩余时间优先(SRTN,shortest remaining time next)
SRTN是SJF是抢占式版本,按照剩余时间运行时间的顺序进行调度。当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则,新的进程等待。
-
-
交互式系统
交互式系统有大量的用户交互操作,调度算法的目标是快速地进行响应。
-
时间片轮转(RR,Round robin)调度算法
将所有就绪态进程按照FCFS先到先服务原则排成一个队列,每次调度时,把CPU时间片分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把CPU时间片分配给队首的进程。
时间片轮转的效率和时间片的大小有关。因为进程切换要保存当前进程的信息,并且载入新进程的信息。如果时间片太小,会导致进程切换的很频繁,在进程切换上会花过多时间。而时间片过长,可能实时性无法保证。
-
优先级调度算法
为每个进程分配优先级,按优先级顺序从高到低进行调度。具有相同优先级的进程以FCFS先到先服务的方式进行调度。
优先级的确定可以依据时间要求、内存要求或任何其他资源要求。
同时,为了防止低优先级的进程永远得不到调度,可以随着时间的推移增加等待进程的优先级。
-
多级反馈队列调度算法
一个进
-