进程的概念
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的独立单位。
它由程序块、进程控制块(PCB)和数据块三部分组成。
PCB:是进程存在的唯一标志。内容包括进程标识符、状态、位置信息、控制信息、队列指针(链接同一状态的进程)、优先级、现场保护区等。
进程VS程序
进程是程序的一次执行过程,没有程序就没有进程
程序是静态的概念;
而进程是一个动态的概念,它由创建而产生,完成任务后因撤销而消亡;
进程是系统进行资源分配和调度的独立单位,而程序不是
进程VS线程
线程是进程的进一步划分,线程可以被独立调度,但不拥有独立的资源。
多个线程可以共享:内存地址空间、代码、数据、文件等
进程的两个基本属性:可拥有资源的独立单位;可独立调度和分配资源的独立单位
进程的状态
三态模型:
当进程除了CPU资源都已准备就绪时,进程处于就绪状态,等待CPU的调度
当就绪状态的进程获得了CPU的事件片,这个进程将会被执行直至CPU的事件片用完,继续回到就绪状态下。
若有非CPU的资源尚未准备就绪时,进程进入阻塞状态,直至非CPU资源全部准备就绪,进入就绪状态等待CPU的调度。
考虑挂起:
内存空间不足时,会将一部分运行资源从内存暂时放到磁盘,这个行为叫做挂起。
静止就绪不能被直接调度,需要激活成活动就绪才能被调用执行。
PV操作
进程的同步与互斥
互斥(简介制约):进程与进程之间相互抵制,如千军万马过独木桥
同步(直接制约):需要让两个进程都完成后才能进入下一阶段,但是进程起始时间不一样或者速度有差异,在一定情况下停下等待
临界资源:同一时刻只能给一个进程使用,eg:打印机,缓冲区
临界区:每个进程中访问临界资源的代码
PV操作
信号量S:一种特殊的变量,可以指示资源的多少,是一种全局变量。
P操作:S-1(申请并占用资源(加锁)),判断S<0(判断资源是否充足),如果S<0(资源不足)则该进程进入阻塞队列;如果S>=0接着执行后续代码。
V操作:S+1(释放已使用的资源),判断S<=0(判断是否有资源),如果S<=0(有阻塞的进程)则需要通知后续进程有资源释放,无论是否S<=0都要执行后续代码
PV操作与互斥模型
P(S) S = 1-1 =0
使用打印机 S =0 如果有进程2使用打印机 V(S),S变为-1,进程2进入阻塞队列
V(S) S +=1 通知进程2可以使用打印机
后续代码
互斥信号量S的初值为1
PV操作与同步模型
生产者:
生产一个产品; P(S1)操作:检查缓冲区空间是否充足
P(S0)
送产品到缓冲区 V(S2)操作:增加产品资源
V(S0)
消费者:
P(S0)
从缓冲区取产品; P(S2)操作:检查产品是否充足
V(S0)
消费产品 V(S1)操作:释放缓冲区空间资源
S1初值为1,S2初值为0
S0初值为1,标识缓冲区的使用状态,引入互斥模型,防止缓冲区被多个进程同时使用
前趋图
完成A、B、C后:V(Sa)、V(Sb)、V(Sd)
在进程D之前需要判断A、B、C是否完成:P(Sa)、P(Sb)、P(Sc)
完成后:V(Sd)
在进程E之前需要判断D是否完成:P(Sd)
Sa,Sb,Sc,Sd起始值均为0
用字符串标识: —> = {(A,D),(B,D),(C,D),(D,E)}
死锁
进程管理时操作系统的核心,但如果设计不当,就会出现死锁问题。
一个进程在等待一件不可能发生的事或者在等待一个永远拿不到的资源,如果一个或多个进程死锁,就会造成系统封死锁
死锁的四大条件:
环路等待:互相等待对方的资源
互斥:两个进程都在等待对方将要释放的资源(麻将2个人2张牌都在等对方手上的牌)
保持和等待:进程会一直等待所需要的资源
不剥夺:不会从别的进程中抢夺资源
预防:打破四大条件
死锁的避免:有序资源分配;银行家算法
死锁资源数计算
eg:系统有3个进程:A、B、C,这三个进程都需要5个资源。则系统至少有多少个资源就不可能发生死锁。
资源数<5 :一定死锁
资源数 =5 :可能可以不死锁
平均分配资源是最坏情况:资源最多的最坏情况:12个资源,ABC各4个
13个资源就不可能死锁了。
图片均来自于网络