进程间通信---->信号量

进程间通信(IPC)

Linux中的内存空间分为系统空间和用户空间。
在系统空间中,由于各个线程的地址空间都是共享的,即一个线程能够随意访问kernel中的任意地址,所以无需进程通信机制的保护。
而在用户空间中,每个进程都有自己的地址空间,一个进程为了与其他进程通信,必须进入到有足够权限访问其他进程空间的kernel中,从而与其他进程进行通信。

在Linux中支持System V 进程通信的手段有三种:消息队列(Message queue)、信号量(Semaphore)、共享内存(Shared memory)。

进程通信对象标示符和键:
在kernel中,对每一类I P C 对象,都由一个非负整数来索引。为了识别并唯一标识各个进程通信的对象,需要一个标识符(即IPC标示符)来标识各个通信对象。而为了获取一个独一无二的通信对象,必须使用键(可使用ftok( )函数生成,返回值key)。这里的键是用来定位I P C 对象的标识符的。


信号量—–>实质是计数器

为什么不使用一个全局变量来做计数器?

原因①:各个进程之间是独立的,一个进程中的全局变量,另一个进程根本不会看见,(即使是父子进程)。
原因②:全局变量的加1或减一操作不是原子操作。

信号量的用途:统计临界资源的数目。

-注解:
-临界资源: 不同进程能够看到的一份公共的资源(如:打印机,磁带机等),且一次仅允许一个进程使用的资源称为临界资源。

-临界区:临界区是一段代码,在这段代码中进程将访问临界资源(例如:公用的设备或是存储器),当有进程进入临界区时,其他进程必须等待,有一些同步的机制必须在临界区段的进入点和离开点实现,确保这些共用资源被互斥所获得。

信号量的本质是一种数据操作锁。
信号量在此过程中负责数据操作的互斥、同步等功能。

说明:
当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。
信号量>0 ,资源可以使用请求。
信号量=0,无资源可用,进程会进入睡眠状态直至资源可用。

当进程不再使用一个信号量控制的共享资源时,信号量的值+1(即V操作)。

操作系统保证对信号量的加减操作均为原子操作。这是由于信号量主要的作用是维护资源的互斥或多进程的同步访问。
信号量的创建及初始化上,不能保证操作均为原子性。
这也是信号量的一大缺点:信号量的创建和初始化是分离开的。

注解:
同步与互斥:
同步:在访问公共资源的时候,以某种特定顺序的方式去访问资源
互斥:一个资源每次只能被一个进程所访问。

同步与互斥是保证在高效率运行的同时,可以正确运行。大部分情况下同步是在互斥的基础上进行的。

为什么要有信号量?

为了防止出现多个进程同时访问一个共享资源而引发的一系列问题。

信号量可以提供这样的一个机制:让一个临界区在同一时间只有一个线程在访问它。
也就是信号量是用来调协进程对共享资源的访问的。


信号量的工作原理:

**1.信号量本来是为了保护临界资源而产生的,而这里的信号量本身又是一个临界资源。
所以操作系统就保证了信号量的PV操作是原子的。

注解:
原子操作:意为不可被中断的一个或一系列操作,也可以理解为就是一件事情要么做了,要么没做。而原子操作的实现,一般是依靠硬件来实现的。

2.信号量只能进行两种操作:等待和发送信号。(P(sv)和V(sv)操作)。
保证同步和互斥操作:(sv指代信号量)。
P(sv) —–>如果s

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值