操作系统(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

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

目录
相关文章
|
3月前
|
缓存 运维 前端开发
阿里云操作系统控制台:高效解决性能瓶颈与抖动之进程热点追踪
遇到“进程性能瓶颈导致业务异常”等多项业务痛点时,提供高效解决方案,并展示案例。
|
3月前
|
缓存 运维 前端开发
|
4月前
|
弹性计算 运维 资源调度
使用阿里云操作系统控制台巧解调度抖动
阿里云操作系统控制台是一站式云服务器管理平台,提供性能监控、故障诊断、日志分析、安全管理和资源调度等功能。用户可实时查看CPU、内存等使用情况,快速定位并解决调度抖动等问题。智能诊断工具自动生成优化建议,简化运维流程,降低技术门槛。尽管部分功能仍在优化中,但整体上显著提升了云服务器管理的效率和稳定性。
104 15
使用阿里云操作系统控制台巧解调度抖动
|
5月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
6月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
427 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
7月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
215 1
|
7月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
103 4
|
7月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
7月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
104 2
|
7月前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!

推荐镜像

更多