首页 > 其他分享 >OS:资源类型 & 锁

OS:资源类型 & 锁

时间:2023-03-29 20:13:46浏览次数:39  
标签:P2 资源类型 P1 OS 死锁 进程 等待 资源

1、资源类型

分类标准:可重用、可抢占。

1.1、重用性

  • 可重用资源(永久)
    • 可被多个进程重复使用。一次只能分配给一个进程使用,其它线程必须等待资源释放。
    • 数目:固定,进程无法创建或删除。
    • 使用顺序:请求资源、使用资源、释放资源。
  • 消耗性资源(临时)
    • 进程在运行期间动态的创建和消耗。
    • 数目:进程运行期间是可以不断变化(0 或多个)。
    • 典例:进程间通信的消息。
      • 创建:通常由生产者进程创建,放入该资源类的缓冲区。
      • 消耗:通常由消费者进程消耗,进程可请求若干个资源并消耗,不再放回缓冲区。

1.2、抢占性

  • 可抢占资源:被进程获取后,可被其他进程或系统抢占,不会引起死锁(如 CPU、主存)
  • 不可抢占资源:被进程获取后,只能等进程本身释放资源(如打印机)。

2、锁

根据锁的活跃性,分为两类。

  • 死锁:多个进程在竞争资源,或彼此通信而造成的阻塞。
  • 饥饿:某个进程一直得不到资源。

3、死锁

3.1、产生原因

① 互斥

竞争不可抢占资源

示例:OS 中仅有一台打印机和输入设备。

  1. 某一时刻进程 P1 使用打印机,P2 使用输入设备。
  2. 此时,P1 请求使用输入设备、P2 请求使用打印机,双方等待彼此的资源。

② 循环等待

竞争可消耗资源

示例:三个进程互相发送消息。进程 P1 发给 P2,P2 发给 P3,P3 发给 P1。

  1. 正常:每个进程都是先发送消息,再等待接收消息。
  2. 死锁:每个进程先等待接收消息,系统进入不安全状态。

3.2、特征(必要条件)

只要发生死锁,以下 4 个条件同时成立。

  1. 互斥:至少有一个资源非共享,同一时刻只有一个线程能使用。
  2. 不可剥夺:即存在不可抢占资源,资源只能在进程完成任务后主动释放
  3. 请求与保持:进程占用至少一个资源,并等待另一个被其它进程占用的资源。
  4. 循环等待:存在进程资源的循环等待链(如进程 P1 等待 P2,P2 等待 P1)

3.3、处理

① 预防

设置限制条件,破坏产生死锁的以下两个条件。

  1. 破坏不可剥夺:弱请求的资源被其它进程占有,释放当前进程的资源、或抢占资源。
  2. 破坏循环等待:有序资源分配法。

② 避免

在资源的动态分配过程中,用某种方法防止系统进入不安全状态。

  1. 有序资源分配法:将资源统一编号,进程必须按编号顺序申请资源。
    • 示例:操作系统中有一个 R1、R2 资源,分别编号为 1、2
    • 进程必须按编号升序申请,即 R1 → R2,不能是 R2→ R1。
    • 破坏循环等待的条件
  2. 银行家算法:允许进程动态申请资源,在资源分配前检查安全性。
    • 拟分配资源给当前进程,计算剩余资源数量是否能满足下一进程的需求。

常用技术

  • 加锁顺序:线程按一定的顺序加锁。
  • 加锁时限:线程尝试获取锁时加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁。
  • 死锁检测

③ 检测

设置检测机构,及时检测死锁的发生。

④ 解除

检测出死锁后,采取适当措施将进程从死锁状态中解脱出来。

  1. 资源剥夺:挂起某些死锁进程并剥夺资源,分配给其它死锁进程。
  2. 撤销进程:强制撤销部分或全部死锁进程并剥夺资源。
  3. 进程回退:设置还原点,让死锁进程回退到足以回避死锁,进程回退时自愿释放资源而不是被剥夺。

标签:P2,资源类型,P1,OS,死锁,进程,等待,资源
From: https://www.cnblogs.com/secretmrj/p/17270163.html

相关文章

  • iOS 解决按钮防重复点击的问题
    日常使用中经常会出现按钮重复点击导致的数据重复提交问题,从而导致数据出错,常用的解决办法有1、在发起请求的时候来一个全屏的loading这样在loading期间按钮就无法被点击,......
  • git报“REMOTE HOST IDENTIFICATION HAS CHANGED”错误
    问题描述:本地进行gitpull时发现报错,具体报错信息如下:Pushingtogithub.com:xxxxxxxx.git@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WARNIN......
  • 简单的Dos命令
    打开CMD的方式开始+Windows系统+命令提示符Win键+R输入cmd在任意文件夹下,按住shift+鼠标右击,在此处打开PowerShell窗口资源管理器的地址栏前面加上cmd路径......
  • AUTOSAR - UDS 基本概念
    一、AUTOSAR基本概念二、UDS基本概念 一、AUTOSAR基本概念什么是AUTOSAR:AUTOSAR全称为“AUTomotiveOpenSystemARchitecture”,译为“汽车开放系统体系结构”;AAU......
  • Docker compose 部署的Jenkins如何更新版本
    转载于Docker部署的Jenkins如何更新版本呢_Tomonkey的博客-CSDN博客_dockerjenkins升级在这之前,使用docker-compose部署了docker,其中的脚本配置如下。1.安装Jenkinsdocke......
  • docker :repository docker.io/zookeeper not found: does not exist or no pull acces
    分析略解决vi/etc/docker/daemon.json{......
  • CentOS7中远程连接数据库连不上的问题解决方法
      当远程连接数据库连接不起来时:可能原因:1.检查网络防火墙或其他安全设置是否阻止了连接  2.mysql服务是否启动,查看systemctlstatusmysql3.是否提前授权:......
  • NoSQL之 Redis配置与优化
    关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。sQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用......
  • iTeleport:让Siri可以跨平台运行OS X应用
    让iOS平台上的Siri跨平台运行的OSX应用?别忙着说不,利用一款叫做iTeleport的VNC(VirtualNetworkComputing,远程操作)软件,完全可以做到这一点。最新版的......
  • CentOS7系统放行TCP/UDP端口教程
    在使用CentOS7操作系统时,您需要放行某些端口,以便应用程序能够正常运行。下面是如何放行TCP/UDP端口的步骤。步骤1:SSH连接服务器使用SSH方式连接服务器,如果您不知道如何SSH......