免费做logo的网站,热点时事新闻,wordpress价格比较模板,巩义市住房和城乡规划建设局网站基础概念
同步
进程互斥#xff1a;若干进程因相互争夺独占型资源而产生的竞争关系#xff0c;具有唯一排它性#xff0c;互斥无法限制访问者对资源的访问顺序#xff0c;即访问是无序的。
进程同步#xff1a;我们把异步环境下的一组并发进程因直接制约而互相发送消息…基础概念
同步
进程互斥若干进程因相互争夺独占型资源而产生的竞争关系具有唯一排它性互斥无法限制访问者对资源的访问顺序即访问是无序的。
进程同步我们把异步环境下的一组并发进程因直接制约而互相发送消息而进行互相合作、互相等待使得各进程按一定的速度执行的过程称为进程间的同步
同步体现的是一种协作性。互斥体现的是排它性
通信
进程通信就是指进程间的信息交换交换信息可以使一个状态也可以是很多的 byte。
死锁
当某进程提出资源申请后使得系统中一些进程处于无休止的阻塞状态在无外力作用下永远不能再继续前进。
进程同步
临界区: 进程中访问临界资源的一段需要互斥执行的代码任何时刻只允许一个进程在这其中执行。
进入区: 检查可否进入临界区的一段代码如可进入设置相应”正在访问临界区“标志
退出区: 清除正在访问临界区标志
剩余区: 代码中的其余部分
进程间通信
为什么进程间要进行通信 数据传输一个进程需要将它的数据发送给另一个进程。资源共享多个进程间共享同样的资源。通知事件一个进程需要向另一个或一组进程发送消息。通知它们发送了某种事件。进程控制有些进程希望完全控制另一个进程的执行如Debug进程此时控制进程希望能够拦截另一个进程的所有操作并能够及时知道它的状态改变。 进程间的通信方式
每个进程各自有不同的用户地址空间任何一个进程的全局变量在另一个进程中都看不到所以进程之间要交换数据必须通过内核在内核中开辟一块缓冲区进程 1 把数据从用户空间拷到内核缓冲区进程 2 再从内核缓冲区把数据读走内核提供的这种机制称为进程间通信
1、直接通信
自动建立链路 一条链路
恰好对应一对通信进程
每对进程之间恰好只有一个链接存在
链接可以是单向的但通常是双向的
2、间接通信
通过操作系统维护的消息队列实现进程间的消息接收和发送
每个消息队列都有唯一的标识只有共享了相同消息队列的进程才能够通信
通信链路的属性
只有共享了相同消息队列的进程才建立连接连接可以是单向或双向消息队列可以与多个进程相关联
通信流程
创建新的消息队列通过消息队列发送和接收消息销毁消息队列
3、低级通信
进程间同步互斥也存在信息的交换因此也属于是一种 IPC。1、通信的数据量太少2、通信对用户不透明
4、高级通信机制
信号(signal)通信机制信号是一种比较复杂的通信方式用于通知接收进程某个事件已经发生。只能发送单个信号而不能传送数据。
管道通信 机制匿名管道管道是一种半双工的通信方式数据只能单向流动需要双向通信时需要建立起两个管道而且只能在具有亲缘关系的进程间父子进程关系通信。 命名管道(FIFO)FIFO 是一种先进先出的队列。它类似于一个管道只允许数据的单向流动。每个FIFO 都有一个名字允许不相关的进程访问同一个 FIFO。
消息传递通信机制消息队列是由消息的链表存放在内核中并由消息队列标识符标识。有足够权限的进程可以向队列中添加消息被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号量通信机制信号量是一个计数器可以用来控制多个进程对共享资源的访问。它常作为一种锁机制防止某进程正在访问共享资源时其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段。
共享内存通信机制共享内存就是映射一段能被其他进程所访问的内存这段共享内存由一个进程创建但多个进程都可以访问。共享内存是最快的 IPC 方式它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制如信号两配合使用来实现进程间的同步和通信。
套接字通信机制套解口也是一种进程间通信机制与其他通信机制不同的是它可用于不同及其间的进程通信。
信号通信机制
1、当用户按某些键时产生信号
2、硬件异常产生信号这些情况通常由硬件检测到
3、进程用kill函数将信号发送给另一个进程
4、用户可用kill命令将信号发送给其它进程。
不足传送信息量小只有一个信号类型。开销太大发送进程需要调用系统调用这时核心会中断接收进程且要管理它的堆栈、调用处理程序、恢复被中断的接收信号进程等。另外信号的数量受到限制并且只能传送有限的信息量例如不能携带参数等所以对于复杂的通信操作不适用。
管道通信机制
1、管道是半双工的数据只能向一个方向流动进程不知道管道的另一端
需要双方通信时需要建立起两个管道
2、只能在具有公共祖先的两个进程之间使用
3、一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾并且每次都是从缓冲区的头部读出数据。如果读进程不读走管道缓冲区中的数据那么写操作将阻塞。
4、管道内部提供了同步机制
命名管道
命名管道 (NamedPipe) 是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用服务器建立命名管道时给它指定一个名字任何进程都可以通过该名字打开管道的另一端根据给定的权限和服务器进程通信。
消息传递通信机制
消息队列实际上就是一个链表而消息就是链表中具有特定格式和优先级的记录对消息队列有写权限的进程可以根据一定规则在消息链表中添加消息对消息队列有读权限的进程则可以从消息队列中获得所需的信息。
在发送数据时会分成一个一个独立的数据单元也就是消息体数据块消息体是用户自定义的数据类型消息的发送方和接收方要约定好消息体的数据类型所以每个消息体都是固定大小的存储块不像管道是无格式的字节流数据。消息队列生命周期随内核如果没有释放消息队列或者没有关闭操作系统消息队列会一直存在而前面提到的匿名管道的生命周期是随进程的创建而建立随进程的结束而销毁。
与命名管道相比消息队列的优势在于
1、消息队列可以独立于发送和接收进程而存在从而消除了在同步命名管道的打开和关闭时可能产生的困难。
2、同时通过发送消息还可以避免命名管道的同步和阻塞问题不需要由进程自己来提供同步方法。
3、接收程序可以通过消息类型有选择地接收数据而不是像命名管道中那样只能默认地接收。
缺点一是通信不及时二是附件也有大小限制
信号量通信机制
信号量相当一个信号灯表示状态在多线程环境下使用的一种设施是可以用来保证两个或多个关键代码段不被并发调用。
为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题我们需要一种方法它可以通过生成并使用令牌来授权在任一时刻只能有一个执行线程访问代码的临界区域。而信号量就可以提供这样的一种访问机制让一个临界区同一时间只有一个线程在访问它也就是说信号量是用来协调进程对共享资源的访问的。 P(sv)如果 sv 的值大于零就给它减 1将信号量S的值减1即SS-1如果S0则该进程继续执行否则该进程置为等待状态排入等待队列。就挂起该进程的执行 V(sv)如果有其他进程因等待 sv 而被挂起就让它恢复运行如果没有进程因等待 sv 而挂起就给它加 1将信号量S的值加1即SS1。如果S0则该进程继续执行否则释放队列中第一个等待信号量的进程。 共享内存通信机制
共享内存是把同一个物理内存区域同时映射到多个进程的内存地址空间的通信机制。共享内存是在两个正在运行的进程之间共享和传递数据的一种最有效的方式不同进程之间共享的内存通常安排为同一段物理内存。
优点采用共享内存通信的一个显而易见的好处是效率高因为进程可以直接读写内存而不需要任何数据的拷贝。
套接字通信机制
Socket 通信不仅仅是一台主机上的两个进程可以进行通信还可以让处在因特网中的两个进程进行通信。例如 管道、消息队列、共享内存、信号量和信号都是在同一台主机上进行进程间通信那要想跨网络与不同主机上的进程之间通信就需要Socket 通信
死锁
死锁当某进程提出资源申请后使得系统中一些进程处于无休止的阻塞状态在无外力作用下永远不能再继续前进。 根本原因资源有限且操作不当。
产生死锁的必要条件
1、互斥条件某段时间内某资源只能由一个进程使用。
2、占有和等待条件进程因请求资源而阻塞时对已分配给它的资源保持不放。
3、不剥夺条件资源在未使用完前不能被剥夺由使用进程释放。
4、循环等待条件发生死锁时有向图必构成一环路。
死锁的处理方法
死锁防止破坏四个条件 死锁避免银行家算法 死锁的检测和恢复死锁检测算法
死锁防止
1、互斥将互斥的共享资源封装成可以同时访问
2、持有并等待进程请求资源时要求他不持有任何其他资源必须一次性申请自己需要所有的资源但资源利用率低
3、非抢占如进程请求不能立即分配的资源就释放自己已经占有的资源
4、循环等待对资源排序要求进程按顺序请求资源 使用资源有序分配法来破环环路等待条件。
死锁检测算法
1、允许系统进入死锁状态
2、维护系统的资源分配图
3、定期调用死锁检测算法来搜索图中是否存在死锁
4、出现死锁时用死锁恢复机制进行恢复
5、死锁检测算法的使用
6、死锁多久可能会发生多少进程需要回滚
7、进程终止终止所有的死锁进程一次终止一个进程直到死锁消除
8、终止顺序进程的优先级进程已经运行的时间和还需运行的时间进程已占用的资源进程完成需要的资源
银行家算法
银行家算法是一个避免死锁产生的算法。以银行借贷分配策略为基础判断并保证系统处于安全状态