进程同步与通信

进程同步与通信

 操作系统教程:http://c.biancheng.net/cpp/html/2592.html

进程的同步与互斥是指进程在推进时的相互制约关系。

#进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。为进程之间的直接制约关系。如生产者-消费者问题,哲学家进餐问题。

#进程互斥:它主要源于资源共享,是进程之间的间接制约关系。在多道系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥就是保证每次只有一个进程使用临界资源。如访问控制台、打印机。

为禁止两个进程同时进入临界区,同步机制应遵循以下准则:

空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。

忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。

有限等待:对请求访问的进程,应保证能在有限时间内进入临界区。

让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待

进程同步和互斥在不同的系统中有不同的实现。

Windows中的进程同步方法有信号量、事件,互斥方法有临界区、互斥锁。

Linux中的进程同步方法有?? 互斥方法有??

信号量是一种功能较强的机制,可用来解决互斥与同步的问题,它只能被两个标准的原语wait(S)和signal(S)来访问,也可以记为“P操作”和“V操作”。

Wait原语的实现

  1. void wait (semaphore S) { //相当于申请资源
  2. S.value--;
  3. if(S.value<0) {
  4. add this process to S.L;
  5. block(S.L);
  6. }
  7. }

Signal 原语实现

  1. void signal (semaphore S) {  //相当于释放资源
  2. S.value++;
  3. if(S.value<=0){
  4. remove a process P from S.L;
  5. wakeup(P);
  6. }
  7. }

//生产者-消费者的信号量实现(包含同步和互斥)

semaphore mutex=1; //临界区互斥信号量

semaphore empty=n;  //空闲缓冲区

semaphore full=0;  //缓冲区初始化为空

producer () { //生产者进程

while(1){

produce an item in nextp;  //生产数据

P(empty);  //获取空缓冲区单元

P(mutex);  //进入临界区.

add nextp to buffer;  //将数据放入缓冲区

V(mutex);  //离开临界区,释放互斥信号量

V(full);  //满缓冲区数加1

}

}

consumer () {  //消费者进程

while(1){

P(full);  //获取满缓冲区单元

P(mutex);  // 进入临界区

remove an item from buffer;  //从缓冲区中取出数据

V (mutex);  //离开临界区,释放互斥信号量

V (empty) ;  //空缓冲区数加1

consume the item;  //消费数据

}

}

进程通信:

进程通信是指进程之间的信息交换。PV操作是低级通信方式(进程同步互斥也是一种进程通信方式),髙级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三个类:

共享存储:

在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如 P操作、V操作),对共享空间的写/读进行控制。共享存储又分为两种:低级方式的共享是基于数据结构的共享;高级方式则是基于存储区的共享。

对应Windows中文件映射、剪贴板、共享内存、

对应Linux中的???

消息传递:

在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程通过系统提供的发送消息和接收消息两个原语进行数据交换。

1) 直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。Windows下实现方式有?? Linux下实现方式有??, 。

2) 间接通信方式:发送进程把消息发送到某个中间实体中,接收进程从中间实体中取得消息。这种中间实体一般称为信箱,这种通信方式又称为信箱通信方式。该通信方式广泛应用于计算机网络中,相应的通信系统称为电子邮件系统。Windows下实现方式有邮件槽,Linux下实现方式有??

管道通信:

管道通信是消息传递的一种特殊方式。所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入(写)管道;而接收管道输出的接收进程(即读进程),则从管道中接收(读)数据。为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在, Windows 和Linux下均有相应实现。

Socket:不在多说。

Windows下的进程同步互斥机制有:

http://blog.csdn.net/jannet262/article/details/576445

http://blog.csdn.net/chainsmoker2010/article/details/6038678

临界区、互斥区、事件、信号量

临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别

1、临界区:线程间的互斥机制,速度快,占用资源少;

2、互斥量:进程级的互斥机制,相对临界区代价更大。

3、信号量:进程同步机制,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 .信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。例如:对数据库最多n个并发访问。信号灯对象可以说是一种资源计数器。

4、事件:进程同步机制,相对于信号量的资源共享功能,事件主要用于进程间的协作。事件对象可以由两种方式创建,一种为自动重置,在其他线程使用WaitForSingleObject等待到事件对象变为有信号后该事件对象自动又变为无信号状态,一种为人工重置在其他线程使用WaitForSingleObject等待到事件对象变为有信号后该事件对象状态不变。例如有多个线程都在等待一个线程运行结束,我们就可以使用人工重置事件,在被等待的线程结束时设置该事件为有信号状态,这样其他的多个线程对该事件的等待都会成功

Windows下进程通信(IPC)的几种方式:

http://blog.csdn.net/weiwangchao_/article/details/7104940

http://blog.csdn.net/sszgg2006/article/details/8508882

 

进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储), SOCKET.

# 匿名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

# 命名管道 (named pipe) : 命名名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

#文件映射((Memory-Mapped Files)):共享存储区的一种。文件映射能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容

#邮件槽(Mailslots):属于消息传递。邮件槽提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消 息一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向通信。

#剪贴板:属于共享内存。剪贴板是一个非常松散的交换媒介,可以支持任何数据格式,每一格式由一无符号整数标识,对标准(预定义)剪贴板格式,该值是Win32 API定义的常量;对非标准格式可以使用Register Clipboard Format函数注册为新的剪贴板格式。利用剪贴板进行交换的数据只需在数据格式上一致或都可以转化为某种格式就行。但剪贴板只能在基于Windows的程序中使用,不能在网络上使用。

#Socket,DDE等其他方式;

Linux下的进程通信与同步(待完成)。

时间: 2024-10-20 07:25:31

进程同步与通信的相关文章

进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别【转】

本文转载自:http://www.cnblogs.com/youngforever/p/3250270.html 这两天看进程的同步与通信,看了几本书上的介绍,也从网上搜了很多资料,越看越迷惑,被这几个问题搞得很纠结. 进程同步与互斥的区别? 进程的同步方式有哪些? 进程的通信方式有哪些? 进程同步与通信的区别是什么? 线程的同步/通信与进程的同步/通信有区别吗? 在好多教材上(包括国内与国外的)也没有明确这些概念,现在对每个问题还没有准确的答案,下面将自己的理解记下来,以后再补充. 参考资料:

成为IT精英,我奋斗了7年

这些日子 我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助. 一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS.数据库,应用程序,做过通信软件.硬件驱动.协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦. 我上的是一个三流的高校,就连同一个城市的人多数都不知道.因为学校不好也就没有

【操作系统】进程管理(二)

一.前言 之前已经介绍了操作系统的各个模块,现在来具体深入学习操作系统中的进程管理. 二.进程的基本概念 在未配置OS的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完成后,才允许另外一个程序执行:在多道程序环境下,则允许多个程序并发执行.也正是程序的并发执行,才导致引入进程. 2.1 程序的顺序执行 通常可以把一个应用程序分成若干个程序段,在各程序段之间,必须按照某种先后次序顺序执行,仅当前一操作(程序段)执行完后,才能执行后继操作.如典型的输入->计算->打印任务就是顺序执行. 程

【操作系统】之进程管理

定义 进程的典型定义:进程是程序的一次动态执行 进程在传统OS中的定义: 进程是进程实体的运行过程,是系统进行资源分配和调度的独立单位. 一般情况下,我们所说的进程实体(也叫进程映像)简称进程,进程实体包括程序段,数据段和进程控制块(PCB). PCB 创建进程的实质就是创建PCB,撤销进程实质也是撤销PCB. PCB作用:作为独立运行的基本标志, 实现间断性运行方式, 提供进程管理需要的信息,提供进程调度需要的信息, 与其他进程通信 PCB包含的信息 1.进程标识符:外部标识符,内部标识符 2

linux 进程

什么是进程? 一个进程是一个程序的一次执行的过程.它和程序不同,程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合:而进程是一个动态的概念,也是操作系统分配资源的最小单位. 我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体.虽然在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也不一样,但是通常PCB应包含如下一些信息: 1.进程标识符(name): 每个进程都必须有一个唯一的标识符,可以是

Day39~40-进程线程

1 进程管理 在传统操作系统中, 程序不能独立运行, 进程才是作为资源分配和独立运行的基本单位 1.1 进程的基本概念 如果不设置操作系统, 那程序的执行方式是顺序执行 在多道程序环境下, 则允许多个程序并发执行 程序的顺序执行的特征 1) 顺序性 2) 封闭性, 程序在封闭的环境下执行, 程序运行时独占全机资源 3) 可再现性, 只要初始环境和初始条件相同, 程序重复执行的结果是相同的 前趋图  顺序执行可以用前趋图来表示 程序并发执行 程序兵法执行的前趋图 程序并发执行的特征 程序的兵法执行

一个三流学校程序员的奋斗

文章是转载的,我不是一个毅力很强的人,总得一些激励人的文章来激励自己 我也在一个三流的学校,在找有关考研的文章的时候看到这篇文章 觉得不错,不敢独享,拿出来共勉-- 看完后我又一次明白,勤能补拙,一个人的成功,往往在于坚持 没有挫折,不经历艰难的日子,就没有美好的明天-- 忘了是谁说的:当你感觉到艰难的时候,正是你在走上坡路的时候 文章比较长,且写的比较早,专业术语也很多,但是我看了好几遍 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

linux实训

目  录 Unit 1 操作系统安装.... 3 1.1 多操作系统安装... 3 1.1.1 VMware简介... 3 1.1.2 VMWare基本使用... 4 1.2 安装Red Hat Linux 9.0. 15 1.3 思考题... 15 [实习报告]... 16 Unit 2  Linux命令接口使用.... 17 2.1 访问Linux系统... 17 2.1.1 创建用户组... 17 2.1.2 删除用户组... 17 2.1.3 创建用户... 18 2.1.4 删除用户.

成为IT精英,我奋斗7年(震撼!正能量 转)

该博文转自:http://liangwang985.blog.163.com/blog/static/119549233201191394259491/ 这些日子 我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没 有方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助. 一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS.数据库,应用程序,做过通信软件.硬件驱动.