进程的描述与控制
进程的基本概念
PCB(Process Control Block)
进程控制块,描述进程的基本情况和活动过程,进而控制和管理进程
-
作用:
-
独立运行基本单位的标志
-
实现间断性运行方式
-
提供进程管理所需要的信息
-
提供进程调度所需要的信息
-
实现与其他进程的同步与通信
-
-
内容:
-
进程标识符
-
处理机状态
-
进程调度信息
-
进程控制信息
-
-
组织方式:
-
线性方式
-
链接方式
-
索引方式
-
-
进程实体:程序段,相关的数据段和PCB
-
进程定义
-
进程是程序的一次执行
-
进程是一个程序及其数据在处理机上顺序执行时所发生的活动
-
进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
-
-
特征:动态性,并发性,独立性,异步性
进程状态转换图
进程控制
内核的定义和功能
处理机状态分为系统态和用户态,区别主要在于权限的大小
-
内核的功能
-
支撑功能
-
中断处理
-
时钟管理
-
原语操作
-
-
资源管理功能
-
进程管理
-
存储器管理
-
设备管理
-
-
创建进程和进程的各种状态
-
Unix:父进程子进程,Windows:句柄,控制权
-
引起创建进程的事件:
-
用户登录
-
作业调度
-
提供服务
-
应用请求
-
-
过程:
-
创建空白PCB
-
为新进程分配所需的资源
-
初始化PCB
-
将新进程插入就绪队列(许可)
-
-
进程的终止
-
引起进程终止(Termination of Process)的事件:
-
正常结束
-
异常结束:异常事件发生
-
外界干预
-
-
过程:
-
-
进程的阻塞和唤醒
-
引起事件:
-
向系统请求共享资源失败
-
等待某种操作完成,如I/O操作
-
新数据尚未到达
-
等待新任务的到达
-
-
阻塞原语block,唤醒原语wakeup
-
-
进程的挂起与激活
-
挂起原语suspend,激活原语active
-
进程同步
-
同步机制应遵循的原则:空闲让进,忙则等待,有限等待,让权等待
-
关中断
-
Test-and-Set指令:测试并上锁
-
Swap指令
信号量机制
-
整型信号量
wait(S){ while(S<=0); S--; } signal(S){ S++; }
-
记录型信号量:增加了进程链表指针list并使用原语block,wakeup,就不会一直忙等
-
And型信号量:一个进程需要多种(种类上)临界资源,这种情况要么全给,要么一个都不给(并挂到第一个缺乏资源的等待队列上)
-
信号量集:检查条件,允许时,一次分配多个(数量上)资源,否则不分配
-
管程:进程同步工具
-
条件变量:使得被阻塞的进程及时放弃管程使用权
x.wait()
和x.signal()
-
经典进程同步问题
-
生产者-消费者问题:输入与计算,计算与输出
-
使用mutex实现进程对缓存池临界资源的互斥使用
-
wait,signal:信号量empty,full来协调生产者和消费者,empty和full初始值分别为n, 0
-
对mutex和empty,full的执行顺序要预防死锁(期末考会考),即占着茅坑要有屎拉
-
-
哲学家进餐问题:五个哲学家围着圆桌坐,得到左右筷子进餐,筷子是临界资源
-
不会有相邻的两个哲学家同时进餐,但会发生死锁问题
-
解决办法:
-
-
读者写者问题:有reader,writer要等待,reader之间可同时进行,writer不能和其他writer或reader同步进行,对readercount变量要进行互斥使用
-
变形:规定最大reader数量,利用信号量L,初值RN(最多读者数量),执行wait(L,1,1)
-
进程通信
进程通信的类型
-
共享存储器系统
-
共享数据结构
-
共享存储区
-
-
管道通信系统:连接读、写进程的共享文件
-
互斥,同步,确定对方是否存在
-
-
消息传递系统:直接通信(利用操作系统通信原语)和间接通信(邮箱为中间实体)
-
客户机-服务器系统
-
套接字:一个通信标识类型的数据结构
-
远程过程调用和远程方法调用
-
消息传递通信的实现方式
-
直接通信原语:
-
对称寻址方式:
-
send(receiver, message)
-
receive(sender, message)
-
-
非对称寻址方式:
-
send(P, message)
-
receive(id, message)
-
-
消息的格式:定长/变长
-
进程的同步方式:发送进程和接收进程各自是否阻塞
-
通信链路:单向通信链路,双向通信链路
-
-
直接通信实例:
-
消息缓冲区和PCB中有关通信的数据项
-
-
发送原语send:
发送进程申请缓冲区i,复制消息a到缓冲区i,获得接受进程PCB标识符j,将缓冲区插入接受进程的消息队列j.mq
-
接受原语receive
-
信箱通信(间接)
-
信箱通信原语
-
Send(mailbox, message)
-
Receive(mailbox, message)
-
-
类型:私用邮箱,公用邮箱,共享邮箱
-
线程
-
定义:调度和分配的基本单位,能独立运行的基本单位,但不是资源分配的基本单位(是进程)
-
同一个进程的多个线程共享进程的资源
-
线程控制块TCB
线程的实现方式
-
内核支持线程KST (Kernel Supported Thread)
-
优缺点:
-
-
用户级线程ULT (User Level Threads)
-
内核感知不到用户级线程的存在
-
优缺点:
-
-
组合方式:用户线程连接内核支持线程
-
具体实现方法
-
内核支持线程的实现
-
创建进程时,分配任务数据区PTDA (Per Task Data Area),包含若干个TCB空间
-
创建线程时,将信息填入TCB,并分配必要资源
-
-
用户级线程的实现
-
中间系统
-
运行时系统(Runtime System):用于管理和控制线程的函数(过程)的集合
-
内核控制线程:
-
轻型进程LWP (Light Weight Process):可通过系统调用获得内核提供的服务,组成的缓存池为“线程池”
-
LWP会连接到内核级线程上
-
-
-
-
-
线程的创建和终止
-
初始化线程利用线程创建函数创建新进程
-
虽已被终止但尚未释放资源的线程可以被需要它的线程所调用
-
处理机调度与死锁
处理机调度
-
调度层次
-
高级调度:作业调度,长程调度,调度对象为作业,主要用于多道批处理系统
-
低级调度:进程调度,短程调度,调度对象为进程(或内核级线程),是最基本的一种调度
-
中级调度:内存调度,提高内存利用率和系统吞吐量
-
处理机调度算法目标
-
共同目标
-
资源利用率
-
$$CPU的利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间}$$
-
-
公平性:合理的CPU分配时间,避免进程饥饿现象
-
平衡性:进程类型不同,如计算型作业,I/O型作业
-
策略强制执行
-
-
批处理系统:
-
平均周转时间短
-
周转时间:作业被提交给系统开始,到作业完成为止的时间间隔
-
-
系统吞吐量高
-
吞吐量:单位时间内系统所完成的作业数,与作业平均长度有关
-
-
处理机利用率高:计算型作业,IO型作业
-
-
分时系统
-
响应时间快
-
响应时间:从用户通过键盘提交一个请求开始,到屏幕上显示出处理结果为止的一段时间
-
-
均衡性:响应时间快慢与请求服务的复杂性相适应
-
-
实时系统
-
截止时间的保证
-
截止时间:某任务必须开始执行的最迟时间或必须完成的最迟时间
-
-
可预测性:如播放视频应该是连续性的
-
作业与作业调度
-
作业 Job:包含程序,数据,作业说明书,是批处理系统调度的基本单位
-
作业步 Job Step: 编译作业步,链接装配作业步,运行作业步
-
作业控制块 Job Control Block JCB:作业在系统中存在的标志
-
作业运行的阶段和状态
-
收容阶段:作业后备队列
-
运行阶段:分配必要资源,建立进程,从第一次进入就绪状态开始到运行结束前
-
完成阶段:结束,回收JCB和资源
-
-
接纳调度Admission Scheduling:
-
接纳多少个作业
-
接纳哪些作业:先来先服务,短作业优先,作业优先级,相应比高者优先
-
作业调度算法
-
先来先服务first-come first-served FCFS
-
短作业优先short job first SJF:作业的长短由要求的运行时间来衡量
-
缺点
-
必须预知作业运行时间
-
对长作业不利
-
SJF算法不能实现人机交互
-
完全未考虑作业的紧迫程度
-
-
-
优先级调度算法 proritiy-scheduling algorithm PSA:
-
优先级:作业等待时间FCFS,作业长短SJF,外部赋予作业优先级PSA
-
-
高响应比优先调度算法 Highest Response Ratio Next HRRN:
-
动态优先级
-
进程调度(低级调度)
-
任务
-
保存处理机的现场信息
-
按某种算法选取进程
-
把处理机分配给进程
-
-
调度机制
-
排队器:将来自其他状态的进程插入就绪队列
-
分派器:取出进程,进行从分派器到新进程的上下文切换,将处理器分配给新进程
-
上下文切换器:保存旧进程上下文,切换至分派器程序的上下文,再从分派器切换至新进程上下文
-
-
调度方式
-
非抢占方式Nonpreemptive Mode:
-
运行完毕或异常终止
-
IO请求
-
执行原语操作如Block
-
-
抢占方式 Preemptive Mode: 优先权原则,短进程优先原则,时间片原则
-
进程调度算法
-
轮转调度算法,时间片轮转round robin RR
-
CPU分配给队首进程
-
若运行完毕立即分配给新的队首进程
-
时间片大小确定:略大于一次典型的交互所需要的时间
-
-
优先级调度算法
-
算法类型
-
非抢占式:等待当前进程停止
-
抢占式:立即分配
-
-
优先级类型
-
静态优先级
-
进程类型:系统进程一般先于用户进程
-
进程对资源需求:要求少的优先级高
-
用户要求:紧迫程度及所付费用多少
-
-
动态优先级
-
就绪队列中的进程随等待时间增长,其优先级提高
-
当前进程优先级随运行时间增长而降低,防止一个长作业长期地垄断处理机
-
-
-
-
多队列调度算法
-
多个就绪队列,不同队列采用不同调度算法
-
多处理机系统,为每个处理机设置一个单独的就绪队列
-
-
多级反馈队列调度算法 multileved feedback queue
-
不必事先知道各种进程所需的执行时间
-
调度机制
-
设置多个就绪队列,优先级愈高的队列,时间片愈小
-
每个队列FCFS,最后一个队列除外,用时间片RR调度
-
每个进程在各队列执行一个时间片,若未完成则降至下一队列末尾
-
-
按队列优先级调度
-
若有新进程插入至高优先级队列,当前进程立即放回至原本队列的末尾,处理机分配给新进程
-
-
-
性能
-
终端型用户
-
短批处理作业用户
-
长批处理作业用户
-
-
-
基于公平原则的调度算法
-
保证调度算法:基于进程
-
公平分享调度算法:基于用户(各个用户可能会有不同数量的进程)
-
实时调度
-
HRT Hard real-time,SRT Soft real-time,硬实时,软实时
-
实现实时调度的基本条件
-
知道以下信息:
-
就绪时间
-
开始截止时间和完成截止时间
-
处理时间
-
资源要求
-
优先级
-
-
系统处理能力强
-
采用抢占式调度机制:对于小的实时系统,若能预知任务的开始截止时间,则可用非抢占式的
-
具有快速切换机制
-
对中断的快速响应能力
-
快速的任务分派能力:每个运行功能单位尽量小
-
-
实时调度算法
-
非抢占式
-
非抢占式轮转调度算法
-
非抢占式优先权调度算法
-
-
抢占式
-
基于时钟中断的抢占式优先级调度算法
-
立即抢占的优先级调度算法 Immediate Preemption
-
-
最早截止时间优先算法 EDF Earliest Deadline First
-
截止结束时间越早的优先级越高
-
非抢占式用于非周期实时任务
-
抢占式用于周期实时任务
-
-
最低松弛度优先算法 LLF Least Laxity First
-
松弛度越低越优先执行(在要切换时比较)
-
$$松弛度=完成截止时间 - 本身运行时间 - 当前时间$$
-
一直到必须切换时才切换(B一直运行直到A的松弛度降至0,必须切换时才切换)
-
当前进程执行完后立马切换
-
优先级倒置现象 priority inversion problem
-
原因:优先级$$P_1>P_2>P_$$,$$P_1 和 P_3$$互斥使用临界资源,导致$$P_$$插队
-
解决办法
-
P3进入临界区时,处理机不允许被抢占
-
动态优先级继承,P3进入临界区,继承P1的优先级,P2也无法抢占处理机
-
死锁
资源
-
可重用性资源:可供用户重复使用多次的资源
-
性质
-
不允许多进程共享
-
请求、使用/阻塞、释放(用完需要归还)
-
数量相对固定
-
-
系统调用
-
request/release 设备
-
open/close 文件
-
wait/signal 信号量 PV操作
-
-
-
可消耗性资源:临时性资源,在进程运行期间,由进程动态地创建和消耗的
-
性质
-
单元数目可以不断变化
-
进程运行期间可以创造
-
可以请求消耗若干个,且不再将它们返回给资源类(不需归还)
-
-
通常由生产者创建,消费者消耗,如进程间通信的消息
-
-
可抢占性资源:如CPU和主存 (不引起死锁)
-
不可抢占性资源:如刻录机,磁带机,打印机
死锁的引起
-
竞争不可抢占性资源引起死锁
-
读文件
-
资源分配图:
-
圆圈代表进程,方框是资源
-
进程指向资源代表请求该资源,资源指向进程代表资源已被分配给该进程
-
如下图形成闭环,即死锁
-
-
-
竞争可消耗性资源引起死锁
-
消息:等待一个永远不能生成的消息引起死锁
-
-
进程推进顺序不当引起死锁
-
D是不安全区,继续运行会发生死锁
-
可重用性资源也会因推进顺序不当引起死锁
-
如消费者生产者中的互斥访问量mutex是信号量,PV操作,是可重用性资源
-
-
死锁的定义,必要条件和处理方法
-
死锁定义 Deadlock:
如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的
-
必要条件
-
互斥条件:对资源排它性使用,不共享
-
请求和保持条件:已经保持一个资源,但又提出了新的资源请求,若被阻塞又不释放已有资源
-
不可抢占条件:已获得的资源在使用完前不能被抢占直至自己释放
-
循环等待条件:存在进程-资源循环链 $$\{P_0,P_1,P_2,...,P_n\}$$,P0等P1,P1等P2,Pn等P0
-
-
处理死锁的方法
-
事先预防策略
-
预防死锁:破坏后三个必要条件
-
避免死锁:在资源的动态分配过程中作限制
-
-
事后策略
-
检测死锁:检测死锁的发生
-
解除死锁:将进程从死锁中解脱出来,如撤销部分进程,回收并分配它们的资源
-
-
预防死锁
-
破坏“请求和保持”条件
-
第一种协议:类似于and信号量,要么全分要么不给
-
资源浪费严重:有些资源如打印机可能最后才使用,但过早地被分配
-
进程容易发生饥饿现象:等好久才满足条件
-
-
第二种协议:允许进程获得运行初期所需资源后便开始运行,随后逐步释放已分配且不需要的资源
-
-
破坏“不可抢占”条件
-
提出新的资源请求不可满足时,要释放已有资源
-
释放不可抢占资源如打印机可能会造成前一段工作失效
-
频繁释放和请求,延长周转时间,增加系统开销,降低系统吞吐量
-
-
-
破坏“循环等待”条件
-
方法
-
对资源线性排序
-
每个进程必须按序号递增的顺序请求资源
-
若已有高序号资源时请求低序号资源,则释放全部,重新申请
-
-
给资源定序号的一个方法是根据资源在进程中被使用的先后顺序
-
好处:总有一个进程占据了较高序号的资源,此后申请的资源都是空闲的,可以推进
-
缺点
-
序号要相对稳定
-
实际作业使用资源的顺序和系统规定的顺序有偏差
-
-
避免死锁
-
安全状态
-
系统能按某种进程推进顺序为每个进程分配所需资源,则处于安全状态,该顺序为安全序列,否则是不安全状态
-