05_任务管理

目录

​编辑

进程的状态

进程、线程、任务

进程的状态图

同步与互斥

前趋图

进程资源图

互斥与同步

信号量操作

基本概念

P操作和V操作

进程调度

抢占式和非抢占式

调度算法

死锁问题

任务间通信


进程的状态

进程、线程、任务

进程:是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

线程:传统的进程有两个属性,一是可拥有资源的独立单位,二是可独立调度和分配的基本单位。引入线程后,线程是独立调度的最小单位,进程是拥有资源的最小单位,线程可以共享进程的公共数据、全局变量、代码、文件等资源,但不能共享线程独有的资源,如线程的栈指针等标识数据。

任务:在嵌入式操作系统中,任务可以是进程,也可以是线程,需要根据具体的情况来判断,任务的定义是可独立运行的基本单位,因为不好区分是进程还是线程,统一用任务来代替。在本学时,大家可将任务和进程混为一谈。

进程的状态图

如图1-5-2(a)所示的三态图,这是系统自动控制时只有三种状态,而如图1-5-2(b)为五态图,多了两种状态:静止就绪和静止阻塞,需要人为操作才会进入对应的状态,活跃就绪即就绪,活跃阻塞即等待。

需要熟练掌握进程三态之间的转换。当人为干预后,进程将被挂起,进入静止状态,此时,需要人为激活才能恢复到活跃状态,之后的本质还是三态图。

同步与互斥

前趋图

前趋图用来表示哪些任务可以并行执行,哪些任务之间有顺序关系,具体如图

由图可知,A、B、C可以并行执行,但是必须在A、B、C都执行完后,才能执行D,这就确定了两点:任务间的并行和任务间的先后顺序。

进程资源图

进程资源图用来表示进程和资源之间的分配和请求关系,如图1-5-4所示。P代表进程,R代表资源,R方框中有几个圆球就表示有几个这种资源,在图1-5-4中,R1指向P1,表示R1有一个资源已经分配给了P1,P1指向R2,表示P1还需要请求一个R2资源才能执行

阻塞结点:某进程所请求的资源已经全部分配完毕,无法获取所需资源,该进程被阻塞了无法继续,如图1-5-4中的P2。

非阻塞结点:某进程所请求的资源还有剩余,可以分配给该进程继续运行。如图1-5-4中的P1、P3。

当一个进程资源图中所有进程都是阻塞结点时,即陷入死锁状态。

进程资源图的化简方法:先看系统还剩下多少资源没分配,再看有哪些进程是不阻塞的,接着把不阻塞进程的所有边都去掉,形成一个孤立的点,再把系统分配给这个进程的资源回收回来,这样,系统剩余的空闲资源便多了起来,接着再去看看剩下的进程有哪些是不阻塞的,然后把它们逐个变成孤立的点。最后,所有的资源和进程都变成孤立的点。

互斥与同步

互斥和同步并非反义词,互斥表示一个资源在同一时间内只能由一个任务单独使用,需要加锁,使用完后解锁才能被其他任务使用。

同步表示两个任务可以同时执行,只不过有速度上的差异,需要速度上匹配,不存在资源是否单独或共享的问题。

信号量操作

基本概念

临界资源:各个进程间需要互斥方式对其进行共享的资源,即在某一时刻只能被一个进程使用,该进程释放后又可以被其他进程使用。

临界区:每个进程中访问临界资源的那段代码。

信号量:是一种特殊的变量。

互斥信号量,对临界资源采用互斥访问,使用互斥信号量后其他进程无法访问,初值为1。

同步信号量,对共享资源的访问控制,初值是共享资源的个数。

P操作和V操作

P(S)的主要功能是:先执行S=S-1;若S≥0则进程继续执行;若S<0则阻塞该进程,并将它插入该信号量的等待队列Q中。

V(S)的主要功能是:先执行S=S+1;若S>0则进程继续执行;若S≤0则从该信号量等待队列中移出第一个进程,使其变为就绪状态并插入就绪队列,然后再返回原进程继续执行。

例:生产者和消费者的问题。

三个信号量:互斥信号量S0(仓库独立使用权),同步信号量S1(仓库空闲个数),同步信号量S2(仓库商品个数)。

进程调度

抢占式和非抢占式

在一般的嵌入式操作系统中,分为抢占式和非抢占式两种内核管理策略。

抢占式内核中:当有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的任务。

非抢占式内核中:高优先级的进程不能中止正在内核中运行的低优先级的任务而抢占CPU运行。任务一旦处于核心态,则除非任务自愿放弃CPU,否则该任务将一直运行下去,直至完成或退出内核。

从抢占式内核和非抢占式内核的概念来看,非抢占式内核要求每个任务要有自我放弃CPU的所有权,非抢占式内核的任务级响应时间取决于最长的任务执行时间,在抢占式内核中,最高优先级任务何时执行是可知的。抢占式内核中,应用程序不能直接使用不可重入函数,否则有可能因为抢占的原因而导致函数调用中间状态的不同,而导致结果的错误。

调度算法

先来先服务(First Come First Served,FCFS):先到达的进程优先分配CPU,用于宏观调度。

时间片轮转:分配给每个进程CPU时间片,轮流使用CPU,每个进程时间片大小相同,很公平,用于微观调度。

优先级调度:每个进程都拥有一个优先级,优先级大的先分配CPU。

多级反馈调度:时间片轮转和优先级调度结合而成,设置多个就绪队列(1,2,3,…,n),每个队列分别赋予不同的优先级,分配不同的时间片长度;新进程先进入队列1的末尾,按FCFS原则,执行队列1的时间片;若未能执行完进程,则转入队列2的末尾,如此重复。

死锁问题

当一个进程在等待永远不可能发生的事件时,就会产生死锁,若系统中有多个进程处于死锁状态,就会造成系统死锁。

死锁产生的四个必要条件:资源互斥、每个进程占有资源并等待其他资源、系统不能剥夺进程资源、进程资源图是一个环路。

操作系统对于死锁问题的解决措施是打破四大条件,有下列方法:

死锁预防:采用某种策略限制并发进程对于资源的请求,破坏死锁产生的四个条件之一,使系统任何时刻都不满足死锁的条件。

死锁避免:一般采用银行家算法来避免,银行家算法就是提前计算出一条不会死锁的资源分配方法才分配资源,否则不分配资源。相当于借贷,考虑对方还得起才借钱,提前考虑好以后,就可以避免死锁。

死锁检测:允许死锁产生,但系统定时运行一个检测死锁的程序,若检测到系统中发生死锁,则设法加以解除。

死锁解除:即死锁发生后的解除方法,如强制剥夺资源,撤销进程等。

死锁资源计算:系统内有n个进程,每个进程都需要R个资源,那么其发生死锁的最大资源数为n*(R-1)。其不发生死锁的最小资源数为n*(R-1)+1。

任务间通信

任务间通信指的是任务之间为了协调工作,需要相互交换数据和控制信息。任务之间的通信可以分为两种类型。

(1)低级通信:只能传递状态和整数值等控制信息,如信号量机制。

(2)高级通信:能够传送任意数量的数据,主要包括共享内存、消息传递和管道三类。

1)共享内存:指的是各个任务共享它们地址空间当中的某些部分,在此区域,可以任意读写和使用任意的数据结构,把它看成一个通用的缓冲区。一组任务向共享内存中写入数据,另一组任务从中读出数据,通过这种方式来实现它们之间的信息交换。

2)消息传递:指的是任务与任务之间通过发送接收消息来交换信息,消息是内存中一段长度可变的缓冲区,其长度和内容均由用户定义。

3)管道:以文件系统为基础,是连接两个任务之间的一个打开的共享文件,专用于任务之间的数据通信。

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值