清远做网站seo,快速建站工具,网站建设龙兵科技,福田瑞沃自卸车多进程并发运行#xff0c;导致多个进程间有资源共享#xff0c;比如CPU、内存#xff0c;因此存在不确定性和不可重现#xff0c;可能导致多次运行结果不一致。因此操作系统需要利用同步机制在并发执行的同时#xff0c;保证一些操作是原子操作。
互斥是指一个进程占用了…多进程并发运行导致多个进程间有资源共享比如CPU、内存因此存在不确定性和不可重现可能导致多次运行结果不一致。因此操作系统需要利用同步机制在并发执行的同时保证一些操作是原子操作。
互斥是指一个进程占用了某个资源其他进程都不能使用该资源死锁是指多个进程各占有了一部分资源形成了循环等待饥饿是指其他进程轮流占用资源一个进程一直得不到资源。
临界区
为解决进程间同步导致的这些问题提出了一些方案。临界区是指进程中访问临界资源的一段需要互斥执行的代码。进入临界区之前需要判断能否进入进入时需要改变标志阻止其他进程进入进入的进程执行完成后退出时修改标志。
临界区访问规则
空闲则入没有进程进入时可以进城忙则等待有进程在临界区时其他进程均不可进入有限等待等待进入临界区的进程不能无限制等待让权等待不能进入的进程应释放CPU进入阻塞状态。
临界区实现方式
禁用中断进入临界区后不响应中端软件方式共享变量协调借用操作系统提供高级的抽象方法。
显然第三种方式是可取的其他两种都有明显的缺陷。下面对第三种方式进行介绍。
方法一禁用中断 缺点
禁用中断后进程无法被停止。整个系统都会为此停下来可能导致其他进程处于饥饿状态临界区可能很长无法确定响应中断所需的时间可能存在硬件影响
方法二软件中断 缺点
需要两个进程间的共享数据项需要忙等待浪费CPU时间
方法三原子操作指令
更高级的抽象方法实际是借助硬件的同步原语来实现的。
硬件提供了一些同步原语包括中断禁用、原子操作指令等从硬件上保证多个操作的原子性。操作系统提供更高级的编程抽象来简化进程同。实现方式有锁、信号量。锁
锁是一个抽象的数据结构由一个二进制变量锁定/解锁和两个操作原语锁的请求和锁的释放组成。二进制变量用于标志锁的状态锁的请求使锁在被释放前一直等待并且使进程得到锁这两者是原子的释放锁时唤醒其他等待锁的进程。 内部基于CPU体系结构提供的一些特殊的原子操作指令这些指令把若干个指令合并为一次原子操作保证不会出现部分执行的状态。这些原子操作指令包括测试和置位指令Test-and-Set即TS指令返回内存地址中的值并将其置为1、交换指令交换内存中的两个值。 基于TS指令可以实现如下图所示的自旋锁自旋锁的缺点是线程等待时消耗CPU时间。 针对自旋锁的问题出现了无忙等待锁当锁已经被占用时将自身线程放入等待队列并调用调度程序。当其他线程释放锁时会将所有等待中的线程重新唤醒。