操作系统【一】进程同步和信号量

2024-05-02 20:58

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

基本概念

进程异步性特征:各并发执行的进程以各自独立的,不可预知的速度向前推进。

进程同步又称作直接制约关系,他是指为完成某种任务而建立的两个或者多个进程,这些进程因为需要在某些位置上协调他们的工作顺序而产生的制约关系。(源于进程需要相互合作)

但是因为进程本身的异步性,因此需要操作系统进行处理。

两种资源共享方式:互斥共享、同时共享
临界资源:一个时间段内只允许一个进程使用的资源
进程互斥:当某一个进程访问某临界资源时,另一个想要访问临界资源的进程必须等待。

do
{进入区临界区退出区剩余区
}while(true)
  • 进入区:判断能够进入临界区,如果可以进入,则设置正在访问临界资源的标志,阻止其他进程进入临界区
  • 临界区/段:访问临界资源的代码
  • 退出区:解除正在访问临界资源的标志
  • 剩余区:其他处理

实现进程互斥应该遵循的原则:

  • 空闲让进:临界区空闲时可以允许一个进程进入临界区
  • 忙则等待:如果已经有进程进入临界区则其他试图进入临界区的进程必须等待
  • 优先等待:对于请求访问的进程,应该保证能在有限时间内进入临界区(保证不会饥饿)
  • 让权等待:如果进程不能进入临界区,应该立即释放处理机,防止进程忙等待

实现进程互斥的软件实现

单标志法

每个进程进入临界区的权限只能被另一个进程赋予
在这里插入图片描述违背空闲让进、让权等待

双标志先检查法

在这里插入图片描述flag数组的访问因为进程的异步性有可能导致违反忙则等待原则

双标志后检查法

在这里插入图片描述可能违背空闲让进、有限等待原则

Peterson算法

在这里插入图片描述
违背让权等待的原则,可能需要“忙等”。但是比前面几种方法好。

进程互斥的硬件实现

中断屏蔽方法

利用“开/关中断指令”实现。即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况。

优点:简单、高效
缺点:不适用多处理机;只适用操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态)

TestAndSet指令(TS)

也叫做TestAndSetLock(TSL)

在这里插入图片描述上锁和检查操作变成了原子操作
优点:实现简单;适用多机处理环境
缺点:不满足让权等待原则

Swap指令

也叫做Exchange指令,或者简称XCHG指令
在这里插入图片描述优点:实现简单,适合多机系统
缺点:不满足让权等待

信号量机制

信号量其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量4
原语:一种特殊的程序段,其执行只能一气呵成,不可被中断。(用来解决检查和上锁无法一气呵成的问题)

信号量S
Wait(S) P操作
Signal(S) V操作

整型信号量

对信号量的操作只能有三种,初始化、P、V

在这里插入图片描述不满足让权等待原则,会发生忙等

记录型信号量

在这里插入图片描述
S.value<0时表示该类资源已经分配远比,因此该进程自我阻塞。

当进行V操作发现S.value<=0时,表示在将这个资源还给系统之前有进程在阻塞等待资源,因此唤醒一个进程。

满足进程互斥的所有原则

信号量机制实现进程互斥

在这里插入图片描述

信号量机制实现进程同步

为了保证进程执行的顺序:

  • 设置同步信号量S,初始化为0
  • 在需要首先进行的操作后执行V(S)操作
  • 在条件满足情况下执行的操作前执行P(S)操作
    如果有多个约束关系就设置多个信号量
信号量机制实现前驱关系

对于每条边设置一个信号量,然后同进程同步(这也是一种进程同步)

在这里插入图片描述

生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并适用。

生产者、消费者共享一个初始为空、大小为n的缓冲区

对临界资源的访问必须互斥访问,缓冲区也是一种临界资源(否则多个进程同时向缓冲区写入数据可能造成数据的覆盖)

PV操作题目分析:

  • 关系分析,找出题目中描述的各个进程,分析他们之间的同步、互斥关系
  • 确定P、V操作的大体顺序:因为生产者每次要消耗一个空闲缓冲区,并且生产一个产品。消费者每次要消耗一个产品,并释放一个空闲缓冲区。
  • 设置信号量

在这里插入图片描述对于临界资源的访问一定要满足访问条件以后再进行访问,否则有可能导致死锁。即先满足进程同步条件再进行互斥操作

平时设计的时候要尽可能缩小互斥访问PV操作覆盖的区域,即尽可能减少临界区中的操作,不仅是为了避免死锁,同时还是为了提高进程的并行性。

多生产者-多消费者问题

多类生产者和多类消费者

在这里插入图片描述

当缓冲区资源只为1的时候我们有可能可以不专门设置访问缓冲区的互斥信号量。不过出于良好的习惯我们还是在访问缓冲区的时候专门加上互斥信号量。需要注意的是对互斥信号量的P操作一定要在进程同步的P操作之后,否则会引起死锁。

我们在分析的时候理解为事件的行为(对资源的占用等等),而不是进程之间的行为。

吸烟者问题

在这里插入图片描述在这里插入图片描述

读者-写者问题

在这里插入图片描述在这里插入图片描述

潜在的问题:只要有都进程还在读,写进程就要一直阻塞等待,可能“饿死”。因此,这种算法中读进程是优先的。

在这里插入图片描述

哲学家进餐问题

在这里插入图片描述
每个哲学家进程需要同时持有两个临界资源才能开始吃饭,所以需要避免资源分配不当导致死锁。

  • 最多只允许四个哲学家进餐
  • 对于奇数号的哲学家必须先拿左边的筷子,偶数号的哲学家必须先拿右边的筷子
  • 只允许一个哲学家拿筷子
    在这里插入图片描述

这篇关于操作系统【一】进程同步和信号量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

1、简述linux操作系统启动流程

1、简述linux操作系统启动流程 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。开机时将ROM中的指令映射到RAM的低地址空间,CPU读取到这些指令,硬件的健康状况进行检查,按照BIOS中设置的启

操作系统是怎么为不同的程序分配所需的内存空间的

操作系统为不同的程序分配内存空间的过程涉及多个关键步骤,确保每个程序都有其所需的内存资源,同时避免程序之间的冲突。以下是操作系统如何为程序分配内存空间的详细过程: 1. 内存管理的基础概念 虚拟内存:现代操作系统使用虚拟内存机制来为程序提供隔离的内存空间。每个程序运行在其独立的虚拟地址空间中,这使得程序间的内存互不干扰。物理内存:实际的 RAM(随机存取存储器),由操作系统和硬件共同管理。虚拟

操作系统安全保护

操作系统安全概述 概念:满足安全策略要求,具有响应安全机制及安全功符合特定安全标准,在一定约束条件下 能抵御常见网络安全威胁,保障自身安全运行及资源安全 安全等级:根据安全功能和安全保障要求分为 用户自主保护级  系统审计保护级 安全标记保护级 结构化保护级 访问验证保护级 操作系统作用: 负责计算系统的资源管理、支撑和控制各种应用程序运行,为用户提供计算机系统管理接口 是构成网络信息

Linux操作系统命令集(一)

最近开了操作系统的课,弄着虚拟机的linux系统命令学学 文件和目录操作命令: ls:列出目录内容 示例:ls -l 以长格式列出目录内容cd:切换目录 示例:cd /home/user 切换到 /home/user 目录mkdir:创建目录 示例:mkdir new_directory 创建名为 new_directory 的目录rmdir:删除空目录touch:创建空文件或更新文件的时间戳

Linux多线程——POSIX信号量与环形队列版本之生产消费模型

文章目录 POSIX信号量POSIX的操作初始化销毁等待信号量(申请资源)发布信号量(放下资源) 环形队列之生产消费模型 POSIX信号量 POSIX信号量和System V信号量是不同的标准 但是实现的功能是一样的,都是为了解决同步的问题 我们说信号量指的就是资源的数量 在生产者与消费者模型里面,生产者与消费者所认为的资源是不同的 生产者认为空间是资源,因为每次都要

操作系统分页式存储管理

每次输入地址后,计算出页号,若页号越界,则给出错误提示。否则依次调用FIFO和LRU算法,这里值得注意的是,由于我们的FIFO算法先于LRU算法被调用,那么当在处理FIFO算法时,我们暂且不将位视图相应位置做变化,留到处理LRU算法再做处理。 对于FIFO、LRU算法的缺页,我们分两种情况考虑,第一种是模拟栈内还有空间,那么直接将其入栈。第二种是模拟栈内无空间,要发生置换。发生置换时把模拟栈最底