【操作系统原理】信号量及PV操作详解

简介: 【操作系统原理】信号量及PV操作详解

信号量

  • 一个特殊变量
  • 用于进程间传递信息的一个整数值

定义如下:

struct semaphore
{
  int count;
  quenue Type quenue;
}
  • 信号量说明:semaphore s;
  • 对信号量可以实施的操作:初始化、P和V(P、V分别是荷兰语的test(proberen)和increment(verhogen))

P、V操作定义

P(s)

{
  s.count --; //信号量值减一
  if(s.count<0)
  {
    该进程状态置为阻塞态;
    将该进程插入相应的等待队列s.quenue末尾;
    重新调度
  }
}

down,semwait:也代表P操作

V(s)

{
  s.ount++;
  if(s.count<=0)
  {
  唤醒相应等待队列s.queue中等待的一个进程;
  改变其状态为就绪态,并将其插入就绪队列;
  }
}

up,semsignal:也代表V操作

相关说明

  • P,V操作为原语操作
  • 在信号量上定义了三个操作
    初始化(非负数)、P操作、V操作
  • 最初提出的是二元信号量(解决互斥)
    之后,推广到一般信号量(多值)或技术信号量(解决同步)

用PV操作解决进程间互斥问题

  • 分析并发进程的关键活动,划定临界区
  • 设置信号量mutux,初值为1
  • 在临界区前实施P(mutux)
  • 在临界区之后实施V(mutux)

相关解释:

  • 临界区 : 我们把并发进程中与共享变量有关的程序段称为临界区
  • 信号量 : 信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
  • 进程的互斥:是指当有若干个进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用该资源,其他要使用它的进程必须等待,直到该资源的占用着释放了该资源。
  • 进程的同步:是指在并发进程之间存在这一种制约关系,一个进程依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,直到消息到达才被唤醒。
  • pv操作又称wait,signal原语。
    主要是操作进程中对进程控制的信息量的加减控制。

注意:在霍尔管程中,wait操作signal操作用于被设计为两个可以中断的过程,而非原语。
在管程中,引入一种数据结构—条件变量(仅在管程中可以被访问)。
条件变量的两种操作:

  • wait()操作[阻塞调用进程]
  • signal()操作[释放/唤醒在条件变量上阻塞的进程]
  • wait用法:
    wait(num),num是目标参数,wait的作用是使其(信息量)减一。
    如果信息量>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
    signal用法:
    signal(num),num是目标参数,signal的作用是使其(信息量)加一。
    如果信息量>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
目录
相关文章
|
3月前
|
存储 安全 Shell
深入浅出操作系统:从原理到实践
【9月更文挑战第21天】在数字时代的浪潮中,操作系统扮演着至关重要的角色。本文将深入探究操作系统的奥秘,从其基本概念和核心原理出发,逐步引导读者理解操作系统的工作机制。我们将通过生动的例子和实用的代码片段,揭示操作系统如何管理计算机硬件资源、提供用户接口以及确保系统安全与性能优化。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往操作系统深层世界的大门。准备好跟随我们的脚步,一起探索这个让计算机变得生动起来的神奇软件吧!
86 8
|
3月前
|
Unix Linux Windows
操作系统的演变与基本原理
本文旨在深入探讨操作系统的历史演变过程及其背后的设计原理。通过对不同时期典型操作系统的分析,本文揭示了它们如何响应技术挑战和社会需求的变化。此外,文章还将阐述操作系统的核心功能和关键技术,如进程管理、内存管理和文件系统,并探讨这些技术如何影响计算机系统的性能和可靠性。通过综合历史案例和技术分析,本文希望为读者提供一个全面而深入的理解,为什么操作系统是现代计算不可或缺的基石。
66 1
|
4月前
|
存储 算法 安全
【第二章】软件设计师 之 操作系统基本原理
这篇文章是软件设计师备考资料的第二章,讲解了操作系统的基本原理,包括操作系统概述、进程状态转换、同步与互斥问题、PV操作、死锁问题与银行家算法、存储管理、文件系统和设备管理等关键知识点。
【第二章】软件设计师 之 操作系统基本原理
|
3月前
|
存储 安全 Linux
探索操作系统:从原理到实践
【9月更文挑战第14天】本文深入探讨了操作系统的核心概念,通过分析其设计原则和功能,揭示了操作系统如何管理计算机硬件资源、提供用户接口并确保系统安全。文章不仅阐述了操作系统的基本原理,还通过实际代码示例展示了如何在操作系统上进行编程,旨在帮助读者更好地理解并应用操作系统知识。
45 1
|
3月前
|
算法 调度 UED
操作系统中的进程管理:原理与实践
在数字世界的心脏跳动着无数进程,它们如同细胞一般构成了操作系统的生命体。本文将深入探讨进程管理的奥秘,从进程的诞生到成长,再到最终的消亡,揭示操作系统如何协调这些看似杂乱无章却又井然有序的活动。通过浅显易懂的语言和直观的比喻,我们将一起探索进程调度的策略、同步机制的重要性以及死锁问题的解决之道。准备好跟随我们的脚步,一起走进操作系统的微观世界,解锁进程管理的秘密吧!
79 6
|
4月前
|
存储 缓存 Linux
深度探索Linux操作系统 —— Linux图形原理探讨3
深度探索Linux操作系统 —— Linux图形原理探讨
71 9
|
4月前
|
存储 Linux 图形学
深度探索Linux操作系统 —— Linux图形原理探讨1
深度探索Linux操作系统 —— Linux图形原理探讨
84 7
|
4月前
|
存储 算法 网络协议
了解操作系统的基本原理和常见操作,提高计算机使用效率
了解操作系统的基本原理和常见操作,提高计算机使用效率
60 4
|
4月前
|
Linux API 图形学
深度探索Linux操作系统 —— Linux图形原理探讨2
深度探索Linux操作系统 —— Linux图形原理探讨
66 3
|
4月前
|
存储 缓存 程序员
深入浅出操作系统:从原理到实践
【8月更文挑战第26天】本文将深入探讨操作系统的基本原理和实际应用,通过浅显易懂的方式,帮助读者理解操作系统的核心概念。我们将从操作系统的定义开始,逐步深入到进程管理、内存管理、文件系统等关键模块,并结合实际代码示例,展示如何在实际操作中应用这些理论知识。无论你是初学者还是有一定基础的学习者,这篇文章都将为你提供有价值的信息和启示。让我们一起探索操作系统的世界吧!
70 1