信号量 PV原语

原语 免费编辑 添加义项名
原语 操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程。primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断。

1介绍
2分类
3组成及功能
4PV原语2种形式
折叠编辑本段介绍
操作系统用语范畴。

是由若干条指令组成的,用于完成一定功能的一个过程。

primitive or atomic action 是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性.即原语的执行必须是连续的,在执行过程中不允许被中断

折叠编辑本段分类
计算机网络中也有"原语"一词,它与操作系统的"原语"概念不同。服务原语是指协议中的下层协议通过接口为上层协议提供某种服务而发送的原语操作。

原语分为四类:请求(Req)型原语,用于高层向低层请求某种业务;证实(Cfm)型原语,用于提供业务的层证实某个动作已经完成;指示(Ind)型原语,用于提供业务的层向高层报告一个与特定业务相关的动作;响应(Res)型原语,用于应答,表示来自高层的指示原语已收到。

折叠编辑本段组成及功能
原语通常由若干条指令组成,用来实现某个特定的操作。通过一段不可分割的或不可中断的程序实现其功能。原语是操作系统的核心,它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态(一种机器状态,管态下执行的程序可以执行特权和非特权两类指令,通常把它定义为操作系统的状态)下执行,并且常驻内存,而个别系统有一部分不在管态下运行。原语和广义指令都可以被进程所调用,两者的差别在于原语有不可中断性,它是通过在执行过程中关闭中断实现的,且一般由系统进程调用。许多广义指令的功能都可用目态(一种机器状态,通常把它作为用户程序执行时的状态)下运行的系统进程完成,而不一定要在管态下完成,例如文件的建立、打开、关闭、删除等广义指令,都是借助中断进入管态程序,然后转交给相应的进程,最终由进程实现其功能。引进原语的主要目的是为了实现进程的通信和控制。

折叠编辑本段PV原语2种形式
PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。 信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量 。

semaphore有两种实现方式:

  1. semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;

  2. semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的进程个数。

信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(P、V原语)来访问。初始化可指定一个非负整数,即空闲资源总数。

折叠P原语
P是荷兰语Passeren(通过)的首字母。为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;

折叠V原语
V是荷兰语Verhogen(增加)的首字母。为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。

P原语操作的动作是:

(1)sem减1;

(2)若sem减1后仍大于或等于零,则P原语返回,该进程继续执行;

(3)若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

V原语操作的动作是:

(1)sem加1;

(2)若相加结果大于零,则V原语停止执行,该进程返回调用处,继续执行;

(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。

PV操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在PV原语执行期间不允许有中断的发生。

具体PV原语对信号量的操作可以分为三种情况:

  1. 把信号量视为一个加锁标志位,实现对一个共享变量的互斥访问。

实现过程:

P(mutex); // mutex的初始值为1 访问该共享数据; V(mutex); 非临界区;

  1. 把信号量视为是某种类型的共享资源的剩余个数,实现对一类共享资源的访问。

实现过程:

P(resource); // resource的初始值为该资源的个数N 使用该资源; V(resource); 非临界区;

  1. 把信号量作为进程间的同步工具

实现过程:

临界区C1; P(S); V(S); 临界区C2;

linux的pv原语相关推荐

  1. linux进程间通信快速入门【三】:信号量(XSI、POSIX以及PV原语)

    文章目录 XSI semget semop.semtimedop semctl 基于共享内存demo修改 XSI信号量的限制 PV原语 PV控制并发进程数 POSIX信号量 使用posix命名信号量 ...

  2. linux互斥锁和PV原语

    刚接触linux互斥锁的时候可能会比较抽象,所以本文想要用PV原语来更加具体的理解linux互斥锁.如若有误,烦请指出,不甚感激! 由于线程共享了进程的资源和地址空间,因此,任何线程对系统资源的操作都 ...

  3. 进程的同步、互斥以及PV原语

    在处理进程间的同步与互斥问题时,我们离不开信号量和PV原语,使用这两个工具的目的在于打造一段不可分割不可中断的程序.应当注意的是,信号量和PV原语是解决进程间同步与互斥问题的一种机制,但并不是唯一的机 ...

  4. java pv原语_PV操作原理概述

    一.PV原语的含义 P操作和V操作是不可终端的程序段,成为原语,PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的.信号量sem是一个整数.Sem大于等于零时代表可供并发进程使用的资 ...

  5. windows多线程(九) PV原语分析同步问题

    一.PV原语介绍 PV原语通过操作信号量来处理进程间的同步与互斥的问题.其核心就是一段不可分割不可中断的程序. 信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新 ...

  6. 进程间通信、死锁、信号量、PV原语

    文章目录 进程间通信(Inter-Process Communication, IPC) 顺序程序与并发程序的特征 进程互斥.临界资源.临界区 同步的细分 进程间通信目的 进程间通信发展 进程间通信分 ...

  7. linux pv 信号量,Linux信号量PV操作

    1://假设两个进程(父子进程)对一个文件进行写操作,但是这个文件同一时间只能有一个进程进行写操作. 2://利用信号量实现pv操作 3:#include 4:#include 5:#include ...

  8. pv原语模拟实现_并发编程信号量的使用方法和其实现原理

    什么是信号量 信号量是并发编程中常见的一种同步机制,在需要控制访问资源的线程数量时就会用到信号量,关于什么是信号量这个问题,我引用一下维基百科对信号量的解释,大家就明白了. 信号量的概念是计算机科学家 ...

  9. linux kernle 同步原语

    转载:同步原语 如何避免由于对共享数据的不安全访问导致的数据崩溃? 内核使用的各种同步技术: 技术 说明 适用范围 每CPU变量 在CPU之间复制数据结构 所有CPU 原子操作 对一个计数器原子地&q ...

最新文章

  1. Storm/JStorm之TopologyBuilder源码阅读
  2. Codeforces Round #741 (Div. 2)
  3. C++堆和栈详解(转)
  4. [HTTP] 重定向的302,301
  5. 数字递减(5秒钟跳转页面)
  6. 记一次new Map()
  7. python中的 __getattr__ __setattr__ __getitem__ __add__
  8. 关于DNF的多媒体包NPK文件的那些事儿(7) - IMGV5
  9. installanywhere打包过程(openproj版)
  10. 嵌入式linux应用开发之常用shell脚本总结
  11. 10的28次方C语言,c语言编程测定28的28次方有多少位
  12. 各种通信接口的简单对比
  13. 【SSH网上商城项目实战26】完成订单支付后的短信发送功能
  14. 判断用户输入的8位信用卡号码是否合法
  15. 【PyTorch】如何取得预训练模型的标签label列表(以 Alexnet 在 ImageNet 上的预训练模型为例)
  16. APICloud 平台常用技术点汇总讲解
  17. 马克思政治经济学里关于价值的理论
  18. FindBugs NN_NAKED_NOTIFY
  19. 如何将文件由PDF转换为JPG图片
  20. 你知道OSPF多区域配置和区域优化吗?(华为OSPF多区域理论,路由重分发,末梢区域和完全末梢区域的优化,NSSA区域的优化)

热门文章

  1. 【高效程序员系列】别碰鼠标——让键盘飞起来
  2. 利用Python进行数据分析笔记-pandas建模(statsmodels篇)
  3. css 交集选择器 并集选择器 后代选择器
  4. 人类一败涂地做图教程_人类一败涂地自定义人物怎么制作 捏人实用技巧教学...
  5. 人生苦短——珍惜眼前人
  6. 《智能对话机器人开发实战20讲》--学习笔记--AIML基础功能拓展-与互联网的集成
  7. Elasticsearch系列01:基础教程
  8. 【破事氵】在Linux环境中让程序在后台运行
  9. [概念]像素,分辨率
  10. C语言fgetc和fputc函数用法讲解