作业:一个作业通常包括程序、数据和操作说明书3部分。
一个作业可划分为若干个进程来完成,而每一个进程有其实体——程序和数据集合。
程序:
传统的程序本身是一组指令的集合,是一个静态的概念 。
进程:为了描述系统中程序执行时动态变化的过程引入了进程。进程其实是一个具有独立功能的程序关于某个数据集合的一次运行活动,因此
每一个进程由数据、程序和进程控制块(PCB)组成。进程是资源分配和独立运行的基本单位。
状态转换:
进程间的状态转换:
1、三态图:
2、五态图:
创建进程有两个阶段:创建必要管理信息阶段;让进程进入就绪状态。
终止进程也有两个阶段:等待操作系统善后处理;释放主存。
3、具有挂起状态的进程及其转换
活跃就绪:进程在主存处于可被调度的状态
静止就绪:进程被换到辅存。
活跃阻塞:进程在主存等待事件发生
静止阻塞:阻塞进程被换到辅存。
作业状态及其转换:
提交:作业通过输入设备送入计算机系统的过程。
后备:将作业输入到计算机系统的后备存储器中。
执行:作业被调度程序选中;并为其分配了资源;建立了相应的进程
完成:作业正常结束或异常终止。
操作系统三级调度:
在讲进程调度算法之前咱们要先了解在操作系统中,作业提交到完成要经历哪三级调度,如图:
调度算法:
经过高级和中级调度,这些进程进入了内存的就绪队列,那么哪个就绪进程可以占用CPU呢?这就用到了进程调度(相当于操作系统三级调度中的低级调度)!进程调度一般分为非剥夺式和剥夺式。那么让咱们来看看具体的进程调度算法。
进程调度算法:
1、先来先服务(FCFS):这个算法用于宏观的调度,它的本质是哪一个进程先进入就绪状态,哪一个进程就可以先得到CPU。
2、时间片轮转:这个算法主要用于微观调度,提高资源利用率。它分为:固定时间片和可变时间片。
3、优先级调度:进程创建的时候给每一个进程分配一个优先数,系统调用的时候根据优先数的大小选择哪一个进程占用CPU。一般是优先数大的先占用。它分为:静态优先级(进程创建的时候的优先数一直不变)和动态优先级(进程创建时候赋予的优先级可以在后边的运行过程中改变)。
4、多级反馈调度:它是时间片轮转算法和优先级算法的综合和发展。它先在系统中设置多个就绪队列,每个队列的优先级不太懂,不同的优先级对应不同的时间片长度;然后进程进入内存后,按照FCFS调度让第一个进程先执行,如果在规定的时间内没有完成则投入到第二个进程的末尾,这样到最后则用时间片轮转来调度进程;总是先执行优先级高的队列,然后再执行优先级低的。
作业调度算法:
大家都知道进程有一个进程存在的唯一标识:进程控制块(PCB),同理作业也有一个标识作业存在的唯一标识:作业控制块(JCB)。在输入井中有很多后备作业,为了方便作业调度 ,通常将JCB排成队列。
作业调度就是根据JCB的信息,通过审查系统资源需求和按照一定算法,把这些后备作业队列调入内存,创建进程并非配必要资源。
由这些特点我们可以明显的知道:作业调度属于操作系统三级调度中的高级调度。
作业调度算法常用的有:
1、先来先服务。按照作业到达的先后进程调度。
2、短作业优先:按照作业运行时间的长短进行调度。
3、响应比高者优先:
响应比=1+等待时间/估计运行时间
响应比=运行时间/估计运行时间
4、优先级调度:用户指定作业优先级,然后优先级高的优先启动。
5、均衡调度算法:这个咱们可以理解为定时轮转算法,也就是作业调度程序轮流地执行不同类别的作业,力求均衡地使用系统各种资源。
小总:
小编本着进程调度和作业调度容易弄混的想法,做了一个从整体(操作系统)到微观(进程和作业的状态转换以及调度算法)的总结。其实是为了理顺自己的思路而写的!如果有不周到的地方大家就凑活看吧!毕竟每个人的思路都是不一样的!(*^__^*) 嘻嘻……!