计算机操作系统进程同步(信号量pv专题)

2024-01-09 03:04

本文主要是介绍计算机操作系统进程同步(信号量pv专题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一 基本概念
    • 1.1 多道程序中的制约关系
    • 1.2 临界资源(Critical Resouce)
    • 1.3 三区:进入区、临界区、退出区
  • 二 同步机制应遵循的原则
  • 三 信号量机制类型
    • 3.1 整型信号量
    • 3.2 记录型信号量
    • 3.3 AND型信号量
    • 3.4 信号量集
  • 四 信号量的应用
    • 4.1 信号量实现进程互斥
    • 4.2 信号量实现前趋关系 (同步关系)
    • 4.3 信号量控制使用资源进程数量(资源管控)

一 基本概念

1.1 多道程序中的制约关系

  • 间接制约关系(进程互斥):源于资源共享。如,共享打印机
  • 直接制约关系(进程同步):源于进程间的合作。如,输入进程和计算进程

下列活动分别属于哪种制约关系?
(I)使用共享单车;(2)打篮球;
(3)流水线生产的各道工序;(4)商品生产和社会消费
1、2为间接制约关系3、4为直接制约关系

1.2 临界资源(Critical Resouce)

  • 在一段时间内只允许一个进程访问的资源,即仅当一个进程访问完并释放该资源后,才允许另一个进程访问的资源。如打印机、 磁带机、共享变量等,都属于临界资源,诸进程间应采取互斥方式,实现对这种资源的共享。

1.3 三区:进入区、临界区、退出区

  • 进入区:在临界区前用于检查临界区是否被访问的标志的代码
  • 退出区:将临界区正被访问的标志恢复为未被访问的标志
  • 临界区:进程中访问临界资源的那段代码
    在这里插入图片描述
  • 若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。
  • 每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看是否正被访问,如果此刻该资源未被访问,便可进入临界区对该临界资源进行访问,并设置它正被访问的标志;如果此刻它正被访问,则本进程不能进入临界区。

二 同步机制应遵循的原则

  1. 空闲让进:当无进程处于临界区时,允许一个请求进入临界区的进程立即进入自己的临界区,以便有效地利用临界资源。
  2. 忙则等待:已有进程进入临界区时,其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
  3. 有限等待:对要求访问临界资源的进程,应保证在有限的时间内能进入自己的临界区,以免陷入“死锁”状态
  4. 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”

三 信号量机制类型

  • 信号量(Semaphores)机制是一种卓有成效的进程同步工具
  • (信号量)是一种只能进行P操作和V操作的特殊变量
  • 对于两个并发进程,设互斥信号量为mutex,若mutex=0,则(表示有一个进程进入临界区)
  • 操作系统中,对信号量S的P原语操作定义中,使进程进入相应等待队列等待的条件是(S<0)

3.1 整型信号量

  • 最初由Dijkstra把整型信号量定义为一个用于表示资源数目的整型量S,它与一般整型量不同,除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问,这两个操作一般称为P、V操作。
  • wait(s)和signal(s)是两个原子操作,在执行时是不可中断的。即,当一个进程在修改某信号量时,没有其他进程可以同时对该信号量进行修改
    wait(S){while(S<=0);S=S--;
    }
    signal(S){S=S++;
    }
    

  • 整型信号量的应用
    int s =1;
    Printer(){wait(s);print the document on the paper;signal(s);
    }
    

3.2 记录型信号量

  • 在信号量机制中,除了用于代表资源数目的整型变量value外,还应增加一个进程链表指针list,用于链接上述的所有等待进程。
  • 整型信号量机制中的wait操作,只要是信号量S≤O,就会不断地测试。因此,该机制并未遵循“让权等待”的准则,而是使进程处于“忙等”的状态。
  • **记录型信号量机制则是一种不存在“忙等”现象的进程同步机制.**采取“让权等待”的策略后,又会出现多个进程等待访问同一临界资源的情况。
    在这里插入图片描述
typedef struct
{int value ;struct process_control _block
}semaphore ;
  • S->value的绝对值表示在该信号量链表中已阻塞进程的数目
  • 如果S->value的初值为1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号了,用于进程互斥

3.3 AND型信号量

  • 思想:将进程在整个运行过程中需要的所有资源,采取原子操作方式:要么全部分配给进程,要么一个也不分配
  • 解决:一个进程需要获得两个以上的资源需求
  • 为此,在wait操作中增加了一个“AND”条件,故称为AND同步,或称为同时wait操作,即Swait(simultaneouswait)
    在这里插入图片描述
    在这里插入图片描述

3.4 信号量集

  • 在记录型信号量机制中,wait(S)或signal(S)操作仅能对信号量施以加1或减1操作,每次只能对某类临界资源进行一个单位的申请或释放。当一次需要N个单位时,便要进行N次wait(S)操作,这显然是低效的,甚至会增加死锁的概率。
  • 对AND信号量机制加以改进,对进程所申请的所有资源以及每类资源不同的资源需求量,在一次P、V原语操作中完成申请或释放
    1. 进程对信号量Si的测试值不再是1,而是该资源的分配下限值ti,即要求Si≥ti,否则不予分配。
    2. 一旦允许分配,进程对该资源的需求值为di,即表示资源进行Si=Si-di操作,而不是简单的Si=Si-1操作
      在这里插入图片描述
      在这里插入图片描述

  • 特殊情况
    • wait(S,d,d):信号量集中只有一个信号量S,但允许它每次申请d个资源,当现有资源小于d时,不予分配
    • wait(S,1,1):等同于一般的记录型信号量(S>1)或互斥信号量(S=1)
    • wait(S,1,0):当S≥1时,允许多个进程进入某特定区;当S变为0后,阻止所有进程进入临界区。其功能类似于可控开关。

四 信号量的应用

4.1 信号量实现进程互斥

  • 为临界资源设置一个互斥信号量mutex,其初值为1
  • 各进程访问该资源的临界区置于wait(mutex)和signal(mutex)之间即可
    • wait(mutex)进入区
    • signal (mutex)退出区
  • mutex的取值为(-1,0,1):
    1. mutex=1:两个进程都未进入临界区;
    2. mutex=0:有一个进程进入临界区运行,另一个如需运行,必须等待,挂入阻塞队列;
    3. mutex=-1:有一个进程正在临界区运行,另一个进程因等待而阻塞在信号量队列中,需要被当前已在临界区运行的进程在退出时唤醒

在这里插入图片描述

  • 缺少signal(mutex)将会使临界资源永远不被释放,从而使因等待该资源而阻塞的进程不能被唤醒
  • wait(mutex)和signal(mutex)必须成对出现。缺少wait(mutex)将会导致系统混乱,不能保证对临界资源的互斥访问

栗子

  • 某交通路口设置了一个自动计数系统,该系统由“观察者”进程和“报告者”进程组成。观察者进程能识别卡车,并对通过的卡车计数;报告者进程定时将观察者的计数值打印输出,每次打印后把计数值清“0”。两个进程的并发执行可完成对每小时中卡车流量的统计。

第1步:搞清楚谁是临界资源计数值count
第2步:搞清楚哪些是临界区访问count的语句,包括累加、打印和清零

在这里插入图片描述

4.2 信号量实现前趋关系 (同步关系)

  • 设有两个并发执行的进程P1和P2。P1中有语句S1;P2中有语句S2
  • 使进程P1和P2共享一个公用信号量S,并赋予其初值为0,将signal(S)操作放在语句A后面,而在B语句前面插入wait(S)操作,即在进程P1中,用A→ signal(S)的顺序执行;在进程P2中,用wait(S)→B的顺序执行。由于S被初始化为0,若P2先执行必定阻塞,只有在进程P1执行完A和signal(S)操作后使S增为1时,P2进程方能成功执行语句B
    在这里插入图片描述
    在这里插入图片描述

4.3 信号量控制使用资源进程数量(资源管控)

  • 系统中有5台打印机可以使用,请使用进程同步机制使得最多可以有5个进程可以同时使用打印机,多于5个进程使用时,要对新申请进程进行阻塞。
    struct semaphore S;
    S.value=5 ;
    Printer{wait(S);print the document on the paper;signal(S);
    }
    

这篇关于计算机操作系统进程同步(信号量pv专题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/585733

相关文章

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

《计算机英语》Unit 1 Computer Overview 计算机概述

期末试卷组成 1、选择20道 2、判断20道 3、词汇翻译(单词+词组,参照课后习题) 4、翻译2道(一道原题,参照作业) SectionA About Computer 关于计算机 algorithm          n.  算法  operate          v.  操作  digital           adj. 数字的  integrated circuit

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

计算机组成原理——RECORD

第一章 概论 1.固件  将部分操作系统固化——即把软件永恒存于只读存储器中。 2.多级层次结构的计算机系统 3.冯*诺依曼计算机的特点 4.现代计算机的组成:CPU、I/O设备、主存储器(MM) 5.细化的计算机组成框图 6.指令操作的三个阶段:取指、分析、执行 第二章 计算机的发展 1.第一台由电子管组成的电子数字积分和计算机(ENIAC) 第三章 系统总线

计算机Java项目|基于SpringBoot的网上摄影工作室

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码  项目编号:L-BS-QBBSSPRINGBOOT

【计算机组成原理】部分题目汇总

计算机组成原理 部分题目汇总 一. 简答题 RISC和CICS 简要说明,比较异同 RISC(精简指令集)注重简单快速的指令执行,使用少量通用寄存器,固定长度指令,优化硬件性能,依赖软件(如编译器)来提升效率。 CISC(复杂指令集)包含多样复杂的指令,能一条指令完成多步操作,采用变长指令,减少指令数但可能增加执行时间,倾向于硬件直接支持复杂功能减轻软件负担。 两者均追求高性能,但RISC

HarmonyOS NEXT:华为开启全新操作系统时代

在全球科技浪潮的汹涌澎湃中,华为再次以创新者的姿态,引领了一场关于操作系统的革命。HarmonyOS NEXT,这一由华为倾力打造的分布式操作系统,不仅是对现有技术的一次大胆突破,更是对未来智能生活的一次深邃展望。 HarmonyOS NEXT并非简单的迭代升级,而是在华为多年技术积淀的基础上,对操作系统的一次彻底重构。它采用微内核架构,摒弃了传统的宏内核模式,实现了模块化和组件化的设计理念

安徽理工大学2计算机考研情况,招收计算机专业的学院和联培都不少!

安徽理工大学(Anhui University of Science and Technology),位于淮南市,是安徽省和应急管理部共建高校,安徽省高等教育振兴计划“地方特色高水平大学”建设高校,安徽省高峰学科建设计划特别支持高校,国家“中西部高校基础能力建设工程”支持高校,入选教育部“卓越工程师教育培养计划”实施高校、中国人民解放军后备军官培养选拔基地、全国首批深化创新创业教育改革示范高校、首

关于修改计算机的处理器数和最大内存数的问题

问题描述: 刚开始本来是想让计算机的运行速度运行的快点,于是在网上搜索如何让计算机的运行速度更快,找到了一种关于修改计算机内存数和计算机的处理核数可以让计算机运行的更快。 遇到问题: 当我通过命令msconfig →引导→高级选项→勾选了处理器数和最大内存数,然后重启,结构整个计算机都卡的要死,于是记录下来。网上的答案有时候真的是很不负责任,也有可能是自己技术不到位。 结果:取消处理器和内