手把手教你---进程资源分配

简介: <div class="markdown_views"><p></p><div class="toc"><div class="toc"><ul><li><a href="#%E4%B8%80-%E4%BA%86%E8%A7%A3%E8%BF%9B%E7%A8%8B%E8%B5%84%E6%BA%90%E5%9B%BE">一 了解进程资源图</a></li><li>


一 了解进程资源图


Markdown编辑器用的还不是太熟,表格中插入图片这事还没学会,纠结着在Word中总结了下,然后截个图放在下面供大家参考:

图和表示的内容


二 化简资源分配图


方法步骤

  • 第一步:先看系统还剩下多少资源没分配,再看有哪些进程是不阻塞(“不阻塞”即:系统有足够的空闲资源分配给它)的
  • 第二步:把不阻塞的进程的所有边都去掉,形成一个孤立的点,再把系统分配给这个进程的资源回收回来
  • 第三步:看剩下的进程有哪些是不阻塞的,然后又把它们逐个变成孤立的点。
  • 第四步:最后,所有的资源和进程都变成孤立的点。这样的图就叫做“可完全简化”

如果一个图可完全简化,则不会产生死锁;如果一个图不可完全简化(即:图中还有“边”存在),则会产生死锁。这就是“死锁定理”

实例

进程资源图

  • 第一步:先看R1资源,它有三个箭头是向外的,因此它一共给进程分配了3个资源,此时,R1没有空闲的资源剩余。
  • 第二步:再看R2资源,它有一个箭头是向外的,因此它一共给进程分配了1个资源,此时,R2还剩余一个空闲的资源没分配。
  • 第三步:看完资源,再来看进程,先看进程P2,它只申请一个R1资源,但此时R1资源已经用光了,所以,进程P2进入阻塞状态,因此,进程P2暂时不能化成孤立的点。
  • 第四步:再看进程P1,它只申请一个R2资源,此时,系统还剩余一个R2资源没分配,因此,可以满足P1的申请。这样,进程P1便得到了它的全部所需资源,所以它不会进入阻塞状态,可以一直运行,等它运行完后,我们再把它的所有的资源释放。相当于:可以把P1的所有的边去掉,变成一个孤立的点,如下图所示:

进程资源图2

  • 第五步:进程P1运行完后,释放其所占有的资源(2个R1资源和1个R2资源),系统回收这些资源后,空闲的资源便变成2个R1资源和1个R2资源,由于进程P2一直在申请一个R1资源,所以此时,系统能满足它的申请。这样,进程P2便得到了它的全部所需资源,所以它不会进入阻塞状态,可以一直运行,等它运行完后,我们再把它的所有的资源释放。相当于:可以把P2的所有的边都去掉,化成一个孤立的点,变成下图:
    进程资源图3

由于这个资源分配图可完全简化,因此,不会产生死锁。
而如果资源分配图中的点,最终不能够化成孤立的点,则进程资源图不能够完全简化,从而会发生死锁。

相关文章
|
4月前
|
缓存 负载均衡 Linux
内核:进程与调度机制(笔记)
内核:进程与调度机制(笔记)
63 0
|
4月前
|
算法 调度
======第三章处理机调度与死锁======(3)
3.4.3 常用的集中实时调度算法
23 0
|
4月前
|
移动开发 安全 算法
======第三章处理机调度与死锁======(4)
3.5.2 产生死锁的必要条件   (1) 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求该资源,则请求者只能等待,直至占有该资源 的进程用毕释放。
39 0
|
4月前
|
算法 调度
======第三章处理机调度与死锁======(2)
3.3.2 高优先权优先调度算法 优先权调度算法的类型
46 0
|
4月前
|
算法 调度 语音技术
======第三章处理机调度与死锁======(1)
第三章 处理机调度与死锁 3.1处理机调度的层次
37 0
|
4月前
|
C语言
进程环境笔记
进程环境笔记
15 0
|
9月前
|
消息中间件 Linux 调度
Linux进程管理:深入探索进程的创建、终止与调度
在Linux操作系统中,进程管理是一个重要的主题。进程是程序的执行实例,负责执行应用程序的代码,并拥有自己的内存空间和资源。本文将深入探讨Linux进程管理的相关知识,包括进程的创建、终止与调度,以帮助读者更好地理解Linux操作系统中的进程运行机制。
165 0
|
11月前
|
Ubuntu Linux 调度
Linux进程管理(一) Linux进程的基本概念
Ubuntu linux的所有任务都是在操作系统内核的调度下由CPU执行,很多时候,Linux是将任务和进程的概念合在一起。 进程的标准定义:进程是可并发执行的程序在一个数据集合上的运行过程。 进程是一个动态的使用系统资源,处于活动状态的应用程序。进程和程序有着显著的区别。
|
安全 Java
28a 线程&进程基础-快速上手
使用Java的Thread类来创建和管理程。线程的生命周期包括五个状态:新建、就绪、运行、阻塞和死步与互斥: 当多个程共享同一资源时,性Java提供了synchronized关. 线程安全的概念和正确的执行,不会出现数据竞争和错误情况发生。Java提供类概锁造成的一种阻塞状态。方法来避免死锁的发生程的工具类: Java提供了一些并发编的工具类,比如Semaphore、CountDownLatch、CyclicBarrier等来实现程之间的协作和控制概是,当有任务需要处理时接从线程池中取出线程使用,可以优化线程创建和销毁过程,减7. 分析线程和并在开发过程中,我们需要使用一些工具和方法来分析和解
74 0
|
存储 监控 Java
手把手教你写Linux线程池
顾名思义,存储线程的池子。线程池是线程的一种使用模式。在平常业务开发中常规的逻辑是遇到任务然后创建线程去执行。但是线程的频繁创建就类似于内存的频繁申请和销毁,会给操作系统带来大的压力,进而影响整体的性能。所以我们一次申请好一定数量而定线程,然后将线程的管理操作交给线程池,就避免了在短时间内不断创建与销毁线程的代价,线程池不但能够保证内核的充分利用,还能防止过分调度,并根据实际业务情况进行修改。
217 0
手把手教你写Linux线程池

热门文章

最新文章