嵌入式操作系统——进程管理

记笔记记笔记


先明确几个概念:

进程同步( task synchronization):操作系统中的多个进程需要彼此之 间通信和共享数据,这个过程中合理 的调度, 称 为 进 程 同 步 。

进程互斥(task mutex):当多个进程需要使用相 同的资源,而此类资源在任一时刻却 只能供一个进程使用,获得资源的进 程可以继续执行,没有获得资源的进 程必须等待。如共用一台打印机。

二进制信号量:为共享资源提供互斥访问机制,每次只将资源分配给单个进程;当 某个进程占用特定资源的时候,系统不允许其他进程访问该资源。二进制信号量 的具体实现取决于操作系统内核;在特定操作系统内核中,二进制信号量也称为 互斥量。

计数信号量:与二进制信号量不同,计数信号量将资源并发访问的进程或线程数目限制为固定 数量。计数信号量始终记录某个特定的计数器,其取值范围是从0到某个固定值之 间;这就限制了系统支持资源并发访问的最大数目。
计数信号量与二进制信号量是类似的。两者不同在于,二进制信号量只能用于互 斥访问;而计数信号量可以用于互斥访问,也可以实现限定数目的访问。

进程管理
进程同步
进程通信
互斥机制
信号量
二进制信号量
计数信号量

再明确两个概念:
临界资源(Critical Resource): 如打印机、 磁带机等共享资源称为“临界资源”。
临界区(critical section):为了访问 共享资源(比如共享存储器、共享变量 等),需要执行相应的程序指令,存放这 段程序指令的代码存储区域称为临界区。 即把在每个进程中访问临界资源那段代码 称为临界区。

为了实现共享资源的同步访问,临界区访 问应该是互斥的。也就是说,在调用临界 区代码的时候,需要使用互斥机制。

实现进程之间互斥的方法:
在原语里设置一个公共变量代表临界资源的状态。 lock/unlock

资源可用
资源正在使用
0
1
x

使用临界资源必须做如下三步:

 - 检查锁的设置
 - 进入临界区,访问临界区  
 - 释放临界资源,开锁

进程同步遵循的原则:

- 空闲让进:当无进程进入临界区时,应立即进入。 
- 忙则等待:当已有进程进入临界区时,表明资源在使用,应等待。 
- 有限等待:对要求访问临界资源的进程,应保证有限时间内能进入。 
- 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”。

用于进程同步的操作:

P操作:
①将信号量S的值减1,即S=S-1;
②如果 S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。

1)S:=S – 1//请求一个资源 
2)If S>=0, go on; if S<0, blocked //申请不成功(资源用完), 调用阻塞原语“让权等待

V操作:
①将信号量S的值加1,即S=S+1; 
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
1)S:=S + 1 //释放一个资源 
2)If S>0, go on; 
   if S<=0,  the first blocked process in waiting queue blocked->ready, go on
	//表示在信号链表,仍有等待该资源 的进程,调用唤醒原语
  • 从物理意义上理解,P 操作相当于申请资源; V操作相当于释放资源。
  • 信号量的值表示相应资源的使用情况。信号量S>=0时,S表示可用资 源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1; 当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源 的进程数。请求者必须等待其他进程释放该类资源,才能继续运行。 而执行一个V操作意味着释放一个资源,因此S的值加1;若S<0,表 示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程, 使之运行下去。
  • 用信号量可以方便地解决n个进程互斥地 使用临界区的问题。信号量的取值范围是 +1~(1-n)。信号量的值为负时,说明一 个进程正在临界区执行,其它的正排在信号量等待队列中等待,等待的进程数等于信号量值的绝对值 。
    例:若P、V操作的信号量初值为1,当前 值为-3,则表示3个等待进程。

典型的互斥机制:生产者-消费者问题(也称为受限缓冲区问题)
生产者-消费者问题是常见的数据共享问题,其中,两个进程并发访问具有固定 容量的共享缓冲区,因此也称为受限缓冲区问题(Bounded Buffer Problem)。 生成数据的线程/进程称为生产者线程/进程(producer thread/process);使 用生产者线程/进程生成的数据的线程/进程称为消费者线程/进程(consumer thread/process)。

  • 有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费;
  • 生产者进程和消费者进程是多个并行的进程;
  • 如果这两个进程没有同步,可能引发下面的问题:
    ➢ 缓冲区溢出(buffer overrun)
    ➢ 缓冲区空闲(buffer under-run)

为了正确地存取缓冲区,要求各生产者与消费者进程互斥地使用缓冲区。为此,要设两个同步信号量分别标识生产者进程和消费者进程 能否正确前进的标志

  • 用empty表示空缓冲个数,初值为n;
  • 用full表示装满产品的缓冲个数,初值为0。
  • 再设置一个互斥使用临界区的信号量mutex,初值为1。

两者的同步算法如下:

var mutex, empty,full:semaphore;
mutex=1;	//实现互斥访问的信号量
empty:=n; full:=0; //空缓冲区和装满产品的缓冲区的个数
buffer:array[0..n-1] of product; //环形列队缓冲区
in, out, goods:integer
in:=0; out:=0; //指向空缓冲区和装满产品的缓冲区

begin
	cobegin	//并发进程producer和comsumer
		producer;
		consumer;
	coend
end

生产及消费者进程:
在这里插入图片描述
注意事项:

  • 无论是生产者还是消费者,P操作的顺序是重要的。应 该将互斥使用的信号量的P操作放在紧挨临界区的位。
  • 如果把生产者进程中的两个P操作交换次序,当缓冲区 满时,生产者欲向缓冲区放产品时,将在P(empty)上等 待,但它已得到了使用缓冲区的权力。若此后,消费者 欲取产品时,由于申请使用缓冲区不成功,它将在 P(mutex)上等待。从而导致生产者等待消费者取走产品 ,而消费者却在等待生产者释放缓冲区,这种相互等待 是无休止的,从而造成系统死锁。

一个进程必须按下述三个顺序事件使用资源:

  • 请求资源:若请求不能立即满足,则申请者等待。
  • 使用资源:获得资源后,可使用它。
  • 释放资源:使用完毕,将资源归还系统。

死锁:是指多个进程因竞争资源而造成的一种僵局,若无外 力作用,这些进程都将永远不能向前推进。

死锁产生原因:

  • 竞争资源。系统提供的资源不能满足每个进程的需要
  • 多道程序运行时,进程推进顺序不合法。进程在运行过程中, 请求和释放资源的顺序不当,也同样会导致产生进程死锁。

死锁发生的必要条件(科夫曼条件,Coffman conditions):

  • 互斥:该条件表明,一个资源只能被一个进程占用。这就意味着进程对共享资 源的访问是互斥的。访问嵌入式设备中的显示硬件就是其典型实例。
  • 占用并等待:该条件表明,进程占用共享资源,从而锁定共享资源的访问控制, 然后等待其他进程占用的其他共享资源。
  • 资源不可抢占:该条件表明,对于进程当前占用的共享资源,操作系统不能强 行从该进程获取资源;只有该进程自动释放资源后,该共享资源才是可用的。
  • 循环等待:该条件表明,第一个进程正在等待第二个进程占用的资源,同时第 二个进程也正在等待第一个进程占用的资源。一般来说,可能存在一组等待进 程P0、P1、…Pn;其中P0正在等待P1占用的资源,P1正在等待P0占用的资 源,…,Pn正在等待P0占用的资源,P0正在等待Pn占用的资源,等等。这就形 成了循环等待。

死锁的处理:(操作系统可以采取下面策略用于应对死锁)

  • 忽略死锁:该策略总是假定系统设计中不存在死锁。UNIX就是遵循上述原则的 操作系统实例。
    • 鸵鸟算法
  • 检测与修复:该策略建议对死锁条件进行检测,并恢复到正常运行状态。
    • 倒车(back up cars)技术
  • 避免死锁:如果操作系统能够合理地调配资源,那么可以避免死锁的产生。类 似于十字路口的交通灯机制,用于避免发生交通阻塞。
  • 防止死锁:如果解除产生死锁的四个条件中的一个,就能有效防止死锁产生。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值