进程的同步与通信

[来源于文章,表示十分古老的文章了] (http://oa.gdut.edu.cn/os/multimedia/oscai/chapter8/pages/ch83.htm)

Sleep 与 wakeup 同步机制

sleep

进入sleep过程后,核心首先保存进入睡眠时的处理机运行级,再提高处理机的运行优先级,来屏蔽所有的中断,接着将该进程置为“睡眠”状态,将睡眠地址保存在进程表项中,并将该进程放入睡眠队列中。如果进程的睡眠是不可中断的,做了进程上下文的切换后,进程便可安稳地睡眠。当进程被唤醒并被调度执行时,将恢复处理机的运行级为进入睡眠时的值,此时允许中断处理机。

wakeup 过程

该过程的主要功能,是唤醒在指定事件队列上睡眠的所有进程,并将它们放入可被调度的进程队列中。如果进程尚未被装入内存,应唤醒对换进程; 如果被唤醒进程的优先级高于当前进程的优先级,则应重置调度标志。最后,在恢复处理机的运行级后返回

信号(signal)机制

信号的基本概念

信号机制主要作为在同一用户的诸个进程之间通信的简单工具,现在用来对进程进行控制。

信号本身是一个1 ~ 19中的某个整数,用来代表某一种事先约定好的简单消息。 信号机制是对硬中断的一种模拟。信号机制与中断机制之间的相似之处表现为:信号和中断都同样采用异步通信方式,在检测出有信号或有中断请求时,两者都是暂停正在执行的程序而转去执行相应的处理程序,处理完后都再返回到原来的断点;再有是两者对信号或中断都可加以屏蔽。信号与中断两机制之间的差异是:中断有优先级,而信号机制则没有,即所有的信号都是平等的;再者是信号处理程序是在用户态下运行的,而中断处理程序则是在核心态下运行;还有,中断响应是及时的,而对信号的响应通常都有较长的时间延迟。

信号机制的功能

  1. 发送信号
  2. 设置对信号的处理方式
    2.1 屏蔽信号
    2.2 默认终止
    2.3 设置信号处理函数
  3. 对信号的处理以及注销信号

管道机制

管道的类型

  1. 无名管道 (Unnamed Pipes)
  2. 有名管道 (Named Pipes)

对无名管道的读写

  1. 对 pipe 文件大小的限制
  2. 进程互斥
  3. 进程写管道
  4. 进程读管道

消息机制 (现在应该不用了)

什么是消息

这里写图片描述

消息队列

 当一个进程收到由其它多个进程发来的消息时,可将这些消息排成一个消息队列,每个消息队列有一个称为关键字key的名称,它是由用户指定的。每个消息队列还有一个消息队列描述符,其作用与用户文件描述符一样,以方便用户和系统对消息队列的访问。在一个系统中可能有若干个消息队列, 由所有的消息队列的头标组成一个头标数组

消息队列的建立与操作

消息的发送和接收

共享存储区机制

共享存储区的建立

当进程要利用共享存储区与另一进程进行通信时,须先利用系统调用shmget()建立一块共享存储区,并提供该共享存储区的名字key和共享存储区以字节为单位的长度size等参数。若系统中已经建立了指名的共享存储区,则该系统调用将返回该共享存储区的描述符shmid.若尚未建立,便为进程建立一个指定大小的共享存储区

共享存储区的操纵

如同消息机制一样,可以用hmctl()系统调用对共享存储区的状态信息进行查询,如其长度、所连接的进程数、创建者标识符等;也可设置或修改其属性,如共享存储区的许可权、当前连接的进程计数等;还可用来对共享存储区加锁或解锁,以及修改共享存储区标识符等

共享存储区的连接与断开

 在进程已经建立了共享存储区或已获得了其描述符后,还须利用系统调用shmat()将该共享存储区附接到用户给定的某个进程的虚地址shmaddr 上,并指定该存储区的访问属性即指明该区是只读,还是可读可写。此后,此共享存储区便成为该进程虚地址空间的一部分。进程可采取与对其它虚地址空间一样的存取方法来访问。当进程不再需要该共享存储区时,再利用系统调用shmdt()把该区与进程断开

信号量机制

信号量

在UNIX系统中规定,每个信号量有一个可用来表示某类资源数目的信号量值和一个操作值,该操作值可为正整数、零或负整数三种情况之一。传统的信号量机构是对信号量施加wait及signal操作。而在UNIX系统中则并未采用wait及signal, 而是利用semop()系统调用对指定的信号量施加操作。此外,还可利用semget()来建立信号量及利用semctl()系统调用对信号量进行操纵

信号量集

在一个信号量集中,通常都包含有若干个信号量。对这组信号量的操作方式应当是原子操作方式, 此即,把对这组信号量视为一个整体,要么全做,要么全不做。如果核心不能完成对这组所有信号量的操作,则核心应将已经操作过的信号量恢复到操作前的状态,这样便可实现要么全做、 要么全不做的原子操作方式

信号量集的数据结构

信号量表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值