操作系统(4)进程管理(下)通信、死锁、调度

简介: 4.1.进程通信4.1.1.概述在一个进程调用另一个进程时,进程间需要进行通信。在管理进程时,需要与进程进行通信。4.1.2.管道通信Windows采用匿名管道技术进行进程间通信。匿名管道通信只支持具有亲缘关系的进程之间通信(父进程、子进程、兄弟进程)。管道是单向的,由写的一方建立,一头写一头读,若要双向通信,需要两条管道。Windows并不是只支持父子进程之间通信,因为Windows并不是只使用了匿名管道技术来支撑底层间进程的通信。

4.1.进程通信

4.1.1.概述

在一个进程调用另一个进程时,进程间需要进行通信。在管理进程时,需要与进程进行通信。

4.1.2.管道通信

Windows采用匿名管道技术进行进程间通信。匿名管道通信只支持具有亲缘关系的进程之间通信(父进程、子进程、兄弟进程)。管道是单向的,由写的一方建立,一头写一头读,若要双向通信,需要两条管道。Windows并不是只支持父子进程之间通信,因为Windows并不是只使用了匿名管道技术来支撑底层间进程的通信。

4.1.3.信号通信

Linux使用信号进行进程间通信,信号是向进程发送的一个通知,通知该事件已经发生,收到信号后进程做出相应的操作,信号可以由硬件产生,也可以由进程产生。

Ctrl+C快捷键,产生SIGINT信号,杀死当前进程。


Ctrl+Z快捷键,产生SIGTSTP信号,挂起当前进程。


kill -9命令,产生SIGKILL信号,杀死一个进程。


调用kill()函数,产生SIGKILL信号,杀死一个进程。


硬件异常或内核异常,产生信号。


……


Linux中定义了64种信号,常用以下几种:

 

编号 名称 说明
2 SIGINT 结束进程,Ctrl+C快捷键,产生SIGINT信号
6 SIGABRT 结束进程,调用abort函数产生
9 SIGKILL 进程强制结束
11 SIGUSR1 用户自定义型号1
14 SIGALRM 定时器时间到
19 SIGTSTP 进程暂停执行

4.2.死锁

4.2.1.概述

两个或者多个进程无限期的等待永远不会发生的条件的一种系统状态,结果是进程永远阻塞。造成死锁的底层原因是进程间相互占有了对方释放锁的条件资源。举个例子就是:


小明想的是——妈妈做好饭我就回家,而小明妈妈想的是——小明回家我就做饭。


此处以三进程间的死锁为例展示一下死锁情况下的相互持有资源的一个状况:

8ce417cb822445b3a067fbdbef4bce24.png

4.2.2.解决策略

根据上图可以看到死锁的产生一定是产生了一个资源相互持有的环路,其实不让环路产生,或者破坏掉环路任意一条边就可以解开死锁。

目前常用的解决策略有:

  • 有序资源分配法
  • 鸵鸟策略

有序资源分配法:

系统中的每个资源分配一个唯一序号,进程每次申请资源时只能申请序号更大的资源。

鸵鸟策略:

因为解决死锁难度很大,实现很复杂,所以现代操作系统,不论是Linux还是Windows都没有去实现死锁解决策略,全部是留给用户去手动解决。

4.3.进程调度

4.3.1.概述

在合适的时候以一定策略选择一个就绪的进程运行。


进程调度的目标:


响应速度尽可能快


进程的处理时间尽可能短


系统的吞吐量尽可能大


系统资源利用率尽可能高


尽量避免某进程长时间未被调度造成的进程饥饿


进程调度的两种量化衡量指标:


周转时间、平均周转时间。


带权周转时间、平均带权周转时间。


周转时间:进程在系统内停留的时间。


带权周转时间:周转时间/运行时间。是个无单位量纲的数字。

4.3.2.典型调度算法

1.先来先服务算法

先进入系统的作业优先运行。

缺点:没有考虑到作业的长短问题,有可能先来的全是大作业,执行速度很慢,不利于后来的短作业的执行。

2.短作业优先算法

优先执行运行时间短的作业。

缺点:未考虑等待时间,很可能造成先来的大作业一直等待。

3.响应比高者优先算法

计算每个作业的响应比,响应比高的先被执行。


响应比=响应时间/运行时间


=(等待时间+运行时间)/运行时间


=1+等待时间/运行时间


从公式可以看出,如果作业等待时间相同,则运行时间越短的作业,其响应比越高,越容易被调度,因而有利于短作业。如果作业运行时间相同,则等待时间越长的作业,其响应比越高,因此越容易被调度,因此有利于等候长的作业。所以可以看出响应比既考虑到了等待时间又考虑到了运行时间。

4.优先数调度算法

优先调度优先数高的进程。


优先数=静态优先数+动态优先数


静态优先数:进程创建时确定,整个运行期间不再改变。


动态优先数:在运行期间不断调整变化。


决定静态优先数的因素:


所需资源


运行时间的长短


进程的类型


动态优先数变换的触发条件:


使用CPU超过一定时长


进行I/O操作以后


进程等待超过一定时长

5.循环轮转调度算法

把所有就绪进程按照先进先出的原则排成队列,新进来的进程加到队列末尾。进程以时间片q 为单位轮流使用CPU,刚刚运行一个时间片的进程排队到队列末尾,等候下一轮运行。

2644cf5aae874a159399355a0ed8dc8a.png

时间片的大小很关键,过小会造成系统调度过于频繁,增加开销,过大,性能会直接跌落为先来先服务算法。

目录
相关文章
|
23天前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
2天前
|
Java Linux API
[JavaEE]———进程、进程的数据结构、进程的调度
操作系统,进程任务,PCB,PID,内存指针,文件描述符表,进程的调度,并发编程,状态,优先级,记账信息,上下文
|
1月前
|
消息中间件 算法 调度
深入理解操作系统:进程管理与调度
操作系统是计算机系统的核心,负责管理和控制硬件资源、提供用户接口以及执行程序。其中,进程管理是操作系统的重要组成部分,它涉及到进程的创建、调度、同步和通信等方面。本文将深入探讨进程管理的基本概念、进程调度算法以及进程间的同步和通信机制。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程管理的基本技能。
48 11
|
29天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
操作系统作为计算机系统的核心,其进程管理和调度策略对于系统性能和用户体验至关重要。本文将通过直观的代码示例和浅显易懂的语言,带领读者了解操作系统如何有效管理进程以及常见的进程调度算法。我们将从进程的基本概念出发,逐步深入到进程状态、进程控制块(PCB)的作用,最后探讨不同的调度算法及其对系统性能的影响。无论您是初学者还是有一定基础的开发者,都能从中获得有价值的信息。
|
28天前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度
在数字世界的心脏,操作系统扮演着至关重要的角色。它如同一位精明的指挥家,协调着硬件资源和软件需求之间的和谐乐章。本文将带你走进操作系统的核心,探索进程管理的艺术和调度策略的智慧。你将了解到进程是如何创建、执行和消亡的,以及操作系统如何巧妙地决定哪个进程应该在何时获得CPU的青睐。让我们一起揭开操作系统神秘的面纱,发现那些隐藏在日常计算背后的精妙机制。
|
1月前
|
调度 开发者
深入理解操作系统之进程调度
在计算机科学领域,操作系统是核心的一环,它管理着计算机硬件资源,并提供接口供上层软件运行。本文将通过深入浅出的方式,探讨操作系统中至关重要的一个概念——进程调度。我们将从基础理论出发,逐步展开讲解进程调度的原理和实现,并配以实际代码示例,旨在帮助读者更好地理解和掌握这一主题。文章不仅适合初学者建立基础,也适合有一定基础的开发者深化理解。
|
1月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第40天】在数字世界中,操作系统是连接硬件与软件的桥梁,它管理着计算机资源和提供用户服务。本文将深入探讨操作系统中的进程管理与调度策略,揭示它们如何协调多任务运行,保证系统高效稳定运作。通过代码示例,我们将展示进程创建、执行以及调度算法的实际应用,帮助读者构建对操作系统核心机制的清晰认识。
|
1月前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
45 3
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
59 0
Vanilla OS:下一代安全 Linux 发行版
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
66 4