- 先到先服务(FCFS)调度算法
从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度
- 短作业优先(SJF)的调度算法
从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度
- 时间片轮转调度算法
时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间
- 多级反馈队列调度算法
前面介绍的几种进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的一种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法
- 优先级调度
为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以先到先服务(FCFS)调度方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级
死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。比如有一个线程A,已经持有了锁A,但是试图获取锁B,线程B持有锁B,而试图获取锁A,这种情况下就会产生死锁。
👨💻面试官追问:说一下死锁产生的原因有哪些?
-
对系统资源的竞争。各进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资源(CPU)的竞争是不会引起死锁的。
-
进程推进顺序非法。请求和释放资源的顺序不当,也同样会导致死锁。例如,并发执行的进程P1、P2分别申请并占有了资源R1、R2,之后进程p1又紧接着申请资源R2,而进程p2又申请资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁。
-
信号量的使用不当也会造成死锁。如生产者-消费者问题中,如果实现互斥的P操作在实现同步的P操作之前,就有可能导致死锁。(可以把互斥信号量、同步信号量也看做是一种抽象的系统资源)。
总之,对不可剥夺资源的不合理分配,可能导致死锁。
👨💻面试官追问:说说死锁产生的几个必要条件?
- 互斥条件
资源必须处于非共享模式,即一次只有一个进程可以使用。如果另一进程申请该资源,那么必须等待直到该资源被释放为止。
- 请求与保持条件
一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺条件
线程已获得的资源在未使用完之前不能被其他线程强行剥夺&#x