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

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进阶】UNIX体系结构分解——操作系统,内核,shell

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

【操作系统】信号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

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

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

Linux操作系统段式存储管理、 段页式存储管理

1、段式存储管理 1.1分段 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址。内存分配规则:以段为单位进行分配,每个段在内存中占连续空间,但各段之间可以不相邻。 分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。 1.2段表 每一个程序设置一个段表,放在内存,属于进程的现场信息

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2  互斥 2.1 何为互斥?         互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢到资源,它可以访问这个变量,没有争抢到资源的线程不能够访问这个变量。那这种只有一个线程能够访问到这个变量的现象称之为线程间互斥。 2.2互斥锁API 1.

【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos

目录 一. 冯诺依曼体系结构 (Von Neumann Architecture) 注意事项 存储器的意义:缓冲 数据流动示例 二. 操作系统 (Operating System) 操作系统的概念 操作系统的定位与目的 操作系统的管理 系统调用和库函数 操作系统的管理: sum 三. 系统调用实现示例:Pintos 项目 Step 1:进入 examples 目录 St

【操作系统】第五章 文件系统

文件系统 5.1 概述5.2 文件5.2.1 文件及文件系统的概念5.2.2 文件的属性5.2.3 文件的操作5.2.4 文件的类型文件分类 5.3 文件的访问文件的逻辑结构顺序文件顺序文件的优缺点 索引文件索引顺序文件直接文件和哈希文件 5.4 文件保护5.5 文件目录文件控制块(FCB)文件控制块的内容 文件目录索引结点磁盘索引结点内存索引结点 单级目录结构二级目录结构多级目录结构

Linux|操作系统运维|磁盘性能检测之fio和iostat的初步使用

前言: 有的时候,我们接手一个新的服务器的时候,需要了解该服务器的磁盘性能是否可靠,比如,磁盘是否有坏道,磁盘的读写性能是否能够符合我们将要部署的服务,例如数据库服务,如果该数据库是一个读写比较频繁也就是IO比较高的数据库,那么,该磁盘是否能够支持高IO呢? 针对以上需求,建议使用工具fio和iostat这两个工具 一、 iostat在centos7下的安装 配置update源即可 i

软件设计师笔记-操作系统知识

操作系统的作用 操作系统(Operating System, OS)在计算机系统中扮演着至关重要的角色。通过资源管理提高计算机系统的效率;改善人机界面,向用户提供友好的工作环境。 通过资源管理提高计算机系统的效率: 处理器管理:操作系统负责管理和调度计算机的中央处理器(CPU)资源。它使用各种调度算法(如先来先服务、最短作业优先、优先级调度等)来确定哪个进程或线程应该在何时获得CPU的使用权