进程
所谓进程,简单来说是计算机中的各种任务。
进程是程序的一次执行,是操作系统进行资源分配和调度的基本单位。
进程结构PCB
进程结构:
控制块PCB:进程唯一标识
程序段:同一个应用程序的多个进程
数据段:
为了便于系统描述和管理进程的运行,在 OS 的核心为每个进程专门定义了一个数据结构——进程控制块 PCB(Process Control Block)。PCB 作为进程实体的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。。
当系统创建一个新进程时,就为它建立了一个 PCB 。进程结束时又回收其 PCB ,进程于是也随之消亡。系统是通过 PCB 感知进程的存在的。事实上,PCB 已成为进程存在于系统中的唯一标志,在进程的整个生命周期中,操作系统总是根据 PCB 实施对进程的控制和管理。
保护CPU 现场信息
系统就可以将 CPU 现场信息保存在被中断进程的 PCB 中,供该进程再次被调度执行时恢复 CPU 现场时使用
线程
线程是一系列活动按事先设定好的顺序依次执行的过程,是一系列指令的集合。线程是操作系统中运算调度的最小单位
线程的资源由进程管理,即资源的所有权属于进程,线程需要去跟进程申请。
线程相对于进程,大大降低了创建、撤销和切换可执行实体的成本和难度。
资源分配的最小单位是进程,调度的最小单位是线程
进程状态和控制
3种基本状态:就绪、执行、阻塞。就绪队列只有一个,阻塞队列可能会有多个。
进程挂起:是把进程从内存拿到外存,挂起和激活是操作(行为)而不是进程的状态。
执行状态是不可以挂起的,
阻塞状态挂起就是进程从 活动阻塞-静止阻塞
就绪状态挂起就是进程从 活动就绪-静止就绪
综合一下。
处理机调度层次
高级调度(作业调度):把磁盘上的程序加载到内存变成进程。只调入一次,调出一次。
中级调度(内存调度):将进程调到外存[交换区],条件合适再调入内存。如挂起和激活
低级调度(进程调度):从就绪队列选取进程分配给处理机
处理机调度一般指进程调度,是最基本的调度,发生的频率非常高
进度调度策略
进度调度:就是按照一定的策略,动态地把处理机分配给处于就绪队列的进程,使之执行。
1、先来先服务算法[FCFS]
先来先服务调度算法:就是对于优先到达就绪队列的进程采取优先服务的策略,直到该进程运行结束或发生某事件导致阻塞才放弃处理机。
2、短作业(进程)优先算法[SJF]
短作业(进程)优先调度算法:从后备队列或就绪队列选择估计运行时间较短的作业或进程,将他们调入内存运行,直到该进程运行结束或发生某事件导致阻塞才放弃处理机重新进行调度。
3、高响应比优先调度算法[HRRN]
对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。简言之,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。
4、高优先权优先调度算法[PSA]
当系统中有紧急作业或进程,且不满足先进队列或运行时间短时,这些作业或进程将很难得到资源。那么对于这些作业或进程,又该怎么办呢?
优先权调度算法,所谓优先权调度算法,顾名思义就是谁的优先权高,谁就得到资源得以运行
又非抢占式优先权算法和抢占式优先权算法
抢占式调度:立即暂停当前进程(原优先权最高的进程),分配处理机给新到的优先权最高的进程。
抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
非抢占式调度:系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成或阻塞。适用于批处理系统
5、基于时间片的轮转调度算法[RR]
保证就绪队列中的所有进程在给定的时间内均能获得处理机时间片。换言之,系统能在给定的时间内响应所有用户的请求。
6、多级反馈队列调度算法[MFQ]
(1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。
(2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n 队列便采取按时间片轮转的方式运行。
(3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程