操作系统之进程

本文详细介绍了操作系统的进程概念,包括进程的三个组成部分、进程的三种状态及其转换、死锁的产生原因与解决策略、前趋图、信号量、P/V操作、管程等核心知识点,旨在深入理解进程在操作系统中的行为和管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    文章脉络图如下:

    

进程

    进程是指可以与其他程序并发执行的段程序的一次执行过程,是系统进行资源分配和调度的基本单位,即进程是运行中的程序,是程序的一次运行活动,具有动态性和并发性。

    从静态角度看,进程实体由程序块、进程控制块(PCB)和数据块三部分组成。

    程序块:进程需要完成的任务

    数据块:包括程序执行时所需的数据和工作区。

   进程控制块:包括进程的描述信息、控制信息、资源管理信息和CPU现场保护信息,反映的是进程的动态性,如下:

进程标识

状态

优先级

控制信息

队列

访问权限

现场

状态

   就绪状态:进程分配到除CPU外的必需资源的状态,进程被创建后即处于就绪状态,处于就绪状态的进程可以有多个。

   执行状态:占有处理机正在CPU上执行的状态,在但CPU系统中,同一时刻只有一个进程处于执行状态。

   阻塞状态:进程因等待某个事件而放弃CPU进入等待状态,可以同时有多个。

进程的三态图


    就绪状态与运行状态的区别在于是否占有cpu资源,一般剥夺进程的cpu资源有两种情况:

  • 优先级高的先执行
  • 时间片执行方式(几个线程轮流执行)

进程的五态图

    

    活跃就绪和静止就绪的区别在于,保存于内存还是外存,活跃就绪位于内存;静止就绪为与外存。

死锁

    如果一个进程在等在不可能发生的事,进程就会进入死锁状态,多个进程死锁,系统进入死锁状态。

产生原因

    互斥条件:即一个资源每次只能被一个进程使用。

    保持和等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对己获得的资源保持不放。

    不剥夺条件:有些系统资源是不可剥夺的,当某个进程已获得这种资源后,系统不能强行收回,只能等进程使用完时自己释放。

    环路等待条件:多个进程形成环形链,何个都占用对方要申请的下一个资源。

解决死锁

    死锁预防:要求用户申请资源时一起申请所需的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够中请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。

    死锁避免:避免是指进程在每次中请资源时判断这些操作是否安全,典型算法是“银行家算法”。但这种算法会增加系统的开销。

    死锁检测:前两者是书前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。

    死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将资源强行分配给别的进程。

    银行家算法:这名字起得相当贴切,意思是系统先提前找好一种算法,这种算法可以保证分配各进程这些资源可以让进程执行完毕。即判断资源数;再先运行可运行的进程;运行完上个进程后,释放其资源;在运行下一个可以运行的进程;依次类推,最后所有资源都会被释放出来。

前趋图

    前趋图是一个有向无循环图,记为DAG,用于描述进程之间执行的前后关系。图中的每个结点可用于描述一个程序段或进程,乃至一条语句;结点间的有向边则用于表佘两个结点之间存在的偏序或前趋关系。如果Pi必须在Pj之前完成,可写成Pi→Pj,称Pi是Pj的直接前趋,而称Pj是Pi的直接后继。在前趋图中,把没有前趋的结点称为初始结点,把没有后继的结点称为终止结点。

    例如

            

    的前驱关系为

            

    例如S=A+B*3/C+D*9的前驱图,先分析先后顺序,这是前趋图的用途:

  • S1Z1=B*3
  • S2Z2=D*9
  • S3Z3=Z1/C
  • S4Z4=A+Z3
  • S5Z5=Z4+Z2

    可以得到前趋图为

           

P/V/信号量

    互斥和同步

    互斥,资源只能被一个进程使用,其他不能使用

    同步:多个并发进程,因为制约而通信,相互合作、等待,使各个进程按一定的执行顺序和速度执行。

    信号量

    信号量可以有效实现进程的同步和互斥,在操纵系统中信号量是一个整数,当信号量大于等于零时代表可供并发进程使用的资源数;小于零时代表正在等待使用资源的进程数;建立一个信号量,必须说明其意义和初值。

   对信号量,只能采取P操作和V操作,P操作和V操作都是不可再分的原子操作,即PV操作过程不会中断。

   P/V操作

   PV操作指的是对信号量的操作,P表示请求、通过的意思,V表示释放的意思在荷兰文中,通过叫passeren,释放叫vrijgeven)。

   和往常一样,说操作之前需要说明为什么要有P/V/信号量存在的意义,说说我的理解:上面已经提到P/V/信号量是为进程之间的处理关系而生,进程最重要的是什么?资源和CPU,如何保证多个进程合理地使用资源,避免产生死锁,这是P/V/信号量的存在意义。好了,继续说P/V/信号量如何实现调节进程之间的关系。

   现在假设有3个进程要使用同一种资源(假设有2个),为了准确分配这些资源,咱建立一个缓冲区专门存放这2个资源:

            

    很明显,这2个资源不够3个进程使用。假设优先级进程A>进程B>进程C,开始执行,两个S资源被AB占用,C如何知道缓冲区已经没资源了?当有了资源C又是如何知道有资源了?这就是信号量存在的意义,我们假设信号量sem初始值为2A占用一个后变为sem-1=1B占用一个后sem-1=0,现在已经为0个资源了;C再想取走一个sem-1=-1,此时sem表示的不再是资源数,而是等待该资源的进程数;当A进程执行完毕,释放占用的S资源,这时进程C可以执行,此时sem+1=0

   在上述资源分配的过程中,我们把占用操作用P表示,把释放操作用V表示。

管程

    一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据”。管程相当于围墙,它把共享变量和对它进行操作的若干个过程围了起来,所有进程要访问临界资源时,都必须经过管程才能进入,而管程每次只允许一个进程进入管程,从而实现了进程的互斥。

    我的理解是划分一个区域,把有关过程、变量和数据结构放到一起,进程在需要的其资源时调用管程,同一时刻只有一个进程进入到管程,其它使用的都需要等待,以实现互斥,比信号量更容易保证并发进程执行的正确性。

    知识就像盲人摸象,每次得到大象的一点特征,次数多了就能拼出个完整的大象。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值