操作系统 进程同步以及死锁

2024-03-21 15:38

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

进程同步以及死锁

  • 顺序程序设计
    • 特性
  • 并发程序设计
  • 同步问题解决
    • 硬件解决方法
      • 忙等待
    • 软件解决
      • 信号量方法
        • 分类
        • 互斥解决方案-临界区互斥
        • 同步解决方案
        • 经典问题
          • 生产者消费者
            • 注意
            • 特点
          • 哲学家进餐
            • 注意
            • 解决方案
          • 读者写者问题
      • 管程
        • 特点
  • 死锁和饥饿
    • 死锁
      • 死锁必要条件
      • 死锁预防
      • 死锁避免
        • 资源分配图
        • 银行家算法
          • 具体实现
          • 例子
      • 死锁检测、恢复
        • 检测 具体算法
        • 恢复
    • 饥饿

顺序程序设计

  1. 指令序列
  2. 执行严格有序

特性

  1. 执行顺序性
  2. 环境封闭性
  3. 结果确定性
  4. 过程可再见性

并发程序设计

  1. 并发性
  2. 共享性
  3. 交往性:进程互相制约

互斥: 并发进程之间因相互争夺独占性资源而产生的竞争制约关系
进程同步: 并发进程之间为完成共同任务基于某个条件来协调执行先后关系而产生的协作制约关系

同步问题解决

硬件解决方法

  • 屏蔽中断:只有一个CPU的时候有效
  • 提供特殊指令(原子操作)

忙等待

持续监测一个变量,浪费CPU时间。

软件解决

信号量方法

用信号方法协作。(Semaphore特殊变量)
只能执行两个原子操作:

  • wait(S) 接收信号。 称 P操作
  • signal(S) 发送信号。 称V操作。
分类
  • 计数
  • 二元
  • 结构型
    struct{
    int val;
    struct process *L;
    }semaphore;
互斥解决方案-临界区互斥

多进程互斥进入临界区。
Wait(S)
临界区
Signal(S)

  • S.value=-1的时候进程阻塞进入S的等待队列
  • Signal(S)执行,唤醒队列中一个进程。等待状态到就绪状态。
同步解决方案

进程1的A段代码必须在进程2的B段代码之前执行完。
在这里插入图片描述

经典问题
生产者消费者
  • 多个生产者往缓冲区放数据
  • 多个消费者从缓冲区取数据
注意
  1. 所有进程互斥
  2. 满了生产者不能放
  3. 空了消费者不能拿
特点
  • 环形缓冲区
哲学家进餐
  • 五个哲学家,吃饭或思考
  • 桌上一盘菜,五人每人一个叉子一个盘子
  • 想吃饭就到桌上,拿左右两叉子和一盘子,取菜。
注意
  1. 叉子互斥使用
  2. 防止死锁和饥饿
  3. 普通方法解决会出现死锁
解决方案

方案一:相邻哲学家按不同顺序拿叉子
方案二:两个叉子必须一起拿起放下
方案三:限制人数

读者写者问题
  • 多个读者同时读一个文件
  • 每次一个写者
  • 写和读相斥

管程

软件模块

  • 多过程
  • 初始化序列
  • 本地数据
特点
  • 只能管程的过程访问本地数据
  • 进程只能调用管程过程进入管程
  • 每次只能一个进程在管程运行

在这里插入图片描述

死锁和饥饿

不可抢占资源是互斥资源的子集。

死锁

  • 针对不可抢占资源。
  • 多个进程无限等待同一事件,而事件只能由其中一个来产生。
  • 多进程抢夺不可抢占资源,造成永远等待。
    在这里插入图片描述

死锁必要条件

破坏这些条件来应对死锁

  • 互斥条件
  • 请求和保持条件
  • 不可抢占条件
  • 循环等待条件

死锁预防

  1. 破坏“不可剥夺”条件:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到 系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。
  2. 破坏”请求与保持条件“:第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源。第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源。
  3. 破坏“循环等待”条件:采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。

死锁避免

系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。

资源分配图

分配前检测,出现环路就是非安全状态

银行家算法
  • 安全状态:至少有一个进程执行顺序会让所有进程安全得执行完。
  • 一定保证系统总是处于安全状态
  • 固定数目可以借贷给顾客
  • 如果不能有足够资金满足顾客要求,并不能使顾客可以全部偿还,那么就拒绝他。
具体实现
  • Resource向量
  • Available向量
  • Max矩阵
  • Allocation矩阵
  • Need矩阵
例子

在这里插入图片描述

Max-Allocation=Need

死锁检测、恢复

  • 不限制对资源的访问
  • 只是检测死锁是否存在
  • 如果存在,想办法恢复
检测 具体算法
  • 标记没有死锁的进程
  • 算法结束没有被标记->存在死锁
恢复
  • 终止所有死锁进程
  • 一次终止一个,直到取消死锁

饥饿

  • 无限期阻塞
  • 长时间得不到CPU
死锁饥饿
需要CPU及其它资源需要CPU
进程相互等待等待调度

这篇关于操作系统 进程同步以及死锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【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段表 每一个程序设置一个段表,放在内存,属于进程的现场信息

【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的使用权

操作系统真象还原:用户进程

第11章-用户进程 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 11.1 为什么要有任务状态TSS Linux 任务切换未采用 Intel 的做法,而是用了一套自己的方法,只是用了 TSS 的一小部分功能。 操作系统最直接控制的就是 CPU,要想让 CPU 这颗奔腾的心永远地跳下去,首先必须把内存分成段,把内存按“内存块”访问,其次必须让代码段寄存器 cs 和指令寄存器