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

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系统: 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修行路】线程安全和死锁

目录 ⛳️推荐 一、线程安全 1.1 常见的线程不安全情况 1.2 常见的线程安全情况 1.3 常见的不可重入情况 1.4 常见可重入的情况 1.5 可重入与线程安全的联系 1.6 可重入与线程安全的区别 二、死锁 2.1 死锁的四个必要条件 2.2 如何避免产生死锁? ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大

操作系统分页式存储管理

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