1、线程
用户级线程
内核级线程
多线程模型:一对一(并发度高但开销大)、一对多(开销小、效率高,但一个线程阻塞可能导致整个进程阻塞)、多对多(即克服了并发度不高的缺点,开销也小)
2、调度
调度的三个层次:
高级调度(作业调度):内存和外存之间的调度,一个作业只调入一次,调出一次,调入由OS决定,调出一定是作业运行结束
中级调度(内存调度):将暂时不能运行的进程调出内存,中级调度决定挂起队列中的哪个进程重新调入内存,中级调度是面向进程的
低级调度(进程调度):决定就绪队列中的哪个进程进入运行态,分配处理及给他
进程调度和进程切换的区别:
狭义的进程调度:从就绪队列中选择一个进程,若这个进程是另外一个进程,则为进程切换
广义的进程调度:包括选择一个进程和进程切换两个步骤
什么可以进行进程调度:
(1)进程主动放弃
①进程正常终止②主动阻塞③运行过程中发生异常而终止
(2)进程被动放弃
①时间片到②有更高优先级的进程到来③有更紧急的事情需要处理
什么时候不能进行进程调度:
①处理中断过程中
②进程在OS内核程序的临界区中
③原语
3、调度算法
①先来先服务(FCFS)不会饥饿
②短作业优先(SJF)可能会产生饥饿现象,不利于长作业,不一定真正做到短作业优先
③高响应比优先(HRRN)非抢占式,不会饥饿
以上三种算法交互性差,适用于早期的批处理系统
④时间片轮转调度算法(RR)抢占式,不会饥饿,适用于分时系统
⑤优先级调度算法:可能饥饿,适用于实时系统
⑥多级反馈队列调度算法:抢占式,可能导致饥饿
后三种算法适用于交互式系统