操作系统:进程同步与通信

进程同步与通信

互斥
多个进程不能同时使用同一个资源,当某个进程使用某种资源时,其他进程必须等待

同步
多个进程中发生的事件存在时序关系

进程通信
多个进程之间要传递信息

进程间的相互作用

无关进程:在逻辑上无任何联系的进程
相关进程:指多个并发进程在逻辑上有某种联系

进程的交互

互斥:指多个进程不能同时使用同一个资源
死锁:指多个进程互不相让,都得不到足够的资源
饥饿:指一个进程一直得不到资源

临界资源与临界区

临界资源:某段时间内仅允许一个进程使用的资源。
临界区:每个进程中访问临界资源的那段代码。

几个进程共享同一临界资源,它们必须以互斥的方式使用临界资源。

进入区
临界区
退出区
剩余区

临界区进入准则

空闲让进
忙则等待
有限等待
让权等待

互斥实现的硬件方法

硬件方法
禁止中断:禁止一个进程在进入临界区后被中断
缺点

  1. 多处理机环境中,无法保证临界区被互斥访问。
  2. 将禁止中断的权利交给用户可能会导致系统终止。

专用机器指令
boolean lock(标志)

TS(Test and Set)指令

boolean lock;
boolean TS(boolean lock)
{
	boolean temp;
	temp=lock;
	lock=true;
	return temp;
}

Swap指令

boolean lock;
void Swap(boolean a,  b)
{
	boolean temp;
	temp=a;
	a=b;
	b=temp;
}

采用硬件处理器指令能很好地把修改和检查操作结合在一起。
优点

  1. 适用范围广。适用于任何数目的进程。单处理机和多处理机环境都能用。
  2. 简单。硬件方法的标志设置简单,容易验证其正确性。
  3. 支持多个临界区。

缺点

  1. 由于进入临界区的进程是从等待进程中随机选择的,可能造成某个进程“饿死” 。
  2. 专用指令与硬件系统相关,很难成为一种通用的解决方案。

互斥实现的软件方法

int turn(标志)

单标志法
缺点:强制性轮流进入临界区,不能保证“空闲让进”。

boolean flag[2](标志)

双标志、先检查后修改算法
缺点:可能同时进入临界区,不能保证“忙则等待”。

双标志、先修改后检查算法
缺点:保证了不同时进入临界区,但又可能都进不去。不能保证“空闲让进”。

int turn
boolean flag[n](标志)
先修改、后检查、后修改者等待

信号量和PV操作

记录型信号量的定义

struct  semaphore{
   int  value;
   struct  PCB  *queue;
} 
void  wait(semaphore  s)
{   
	s.value = s.value - 1;
    if  (s.value < 0)
       block(s.queue);  
       /* 将进程阻塞,并将其投入等待队列s.queue */
}
void  signal(semaphore  s)
{   
	s.value = s.value + 1;
    if  (s.value <= 0)
       wackup(s.queue);      
       /* 唤醒阻塞进程,将其从等待队列s.queue 取出,投入就绪队列*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值