进程、线程概念
进程:一个进程就是一个正在执行的程序的实例。
进程转换:
进程3个状态:运行态,阻塞态,就绪态。
1.进程为等待输入而阻塞。
2.调度程序选择另一个进程。
3.调度程序选择这个进程。
4.出现有效输入。
线程:轻量级进程。
作业调度:
按照某种原则,从后备作业队列中选取作业进入内存,并为作业做好运行前的准备工作以及作业完成后的善后处理工作。
主要调度算法:
First Come First Serve 先来先服务:按到达时间先后排序。
Shorted Job First (nonpreemptive & preemptive ) 最短作业优先:按作业的运行时间排序,由短到长。
Round robin 轮转调度:每个进程执行一个时间片后移到队列末尾,把CPU交给下一个进程。
Priority Scheduling 优先级调度:执行当前实时优先级最高的进程。动态优先级是在创建进程时赋予该进程一个初始优先级,然后其优先级随着进程的执行情况的变化而改变。
Multiple Queues 多级队列:
1.进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
2.首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。
3.对于同一个队列中的各个进程,按照时间片轮转法调度。
4.在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。
多级队列算法运作过程示例:
假设系统中有3个反馈队列Q1,Q2,Q3,时间片分别为2,4,8。
现在有3个作业J1,J2,J3分别在时间 0 ,1,3时刻到达。而它们所需要的CPU时间分别是3,2,1个时间片。
1、时刻0 J1到达。于是进入到队列1 , 运行1个时间片 , 时间片还未到,此时J2到达。
2、时刻1 J2到达。 由于时间片仍然由J1掌控,于是等待。 J1在运行了1个时间片后,已经完成了在Q1中的2个时间片的限制,于是J1置于Q2等待被调度。现在处理机分配给J2。
3、时刻2 J1进入Q2等待调度,J2获得CPU开始运行。
4、时刻3 J3到达,由于J2的时间片未到,故J3在Q1等待调度,J1也在Q2等待调度。
5、时刻4 J2处理完成,由于J3,J1都在等待调度,但是J3所在的队列比J1所在的队列的优先级要高,于是J3被调度,J1继续在Q2等待。
6、时刻5 J3经过1个时间片,完成。
7、时刻6 由于Q1已经空闲,于是开始调度Q2中的作业,则J1得到处理器开始运行。 J1再经过一个时间片,完成了任务。于是整个调度过程结束。
周转时间为作业完成时刻减去作业到达的时刻:作业完成时刻-作业到达时刻
平均周转时间就是用周转时间总时间除以作业个数:所有作业的周转时间/作业总数
甘特图:一种时间表示
用户空间建立的线程包和内核建立的线程包区别图
临界区:每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。