【操作系统】进程控制与进程通信

简介: 【操作系统】进程控制与进程通信

一、进程控制

1.1 什么是进程控制

  • 进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销己有进程、实现进程状态转换等功能。
  • 简化理解:反正进程控制就是要实现进程状态转换


1.2 如何实现进程控制(“原语”实现)

  • 原语是一种特殊的程序它的执行具有原子性,也就是说,这段程序的运行必须一气呵成,不可中断。
  • 如果不能“一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。
  • 假设PCB中的变量state表示进程当前所处状态,1表示就绪态,2表示阻塞态.
  • 假设此时进程2等待的事件发生,则操作系统中,负责进程控制的内核程序至少需要做这样两件事:
  • ①将PCB2的state设为1
  • ②将PCB2从阻塞队列放到就绪队列


1.2.1 如何实现原语的“原子性”

  • 原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
  • 可以用“关中断指令”和“开中断指令”这两个特权指令实现原子性
  • 正常情况:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程序。
  • CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查。
  • 这样,关中断、开中断之间的这些指令序列就是不可被中断的,这就实现了“原子性”。

1.3 进程的创建

  • 创建原语
  • 申请空白PCB
  • 为新进程分配所需资源
  • 初始化PCB
  • 将PCB插入就绪队列(创建态–>就绪态)
  • 引起进程创建的事件:
  • 用户登录
  • 分时系统中,用户登录成功,系统会建立为其建立一个新的进程
  • 作业调度
  • 多道批处理系统中,有新的作业放入内存时,会为其建立一个新的进程
  • 提供服务
  • 用户向操作系统提出某些请求时,会新建一个进程处理该请求
  • 应用请求
  • 由用户进程主动请求创建一个子进程

1.4 进程的终止

  • 撤销原语(就绪态/阻塞态/运行态 --> 终止态 --> 无):
  • 从PCB集合中找到终止进程的PCB
  • 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
  • 终止其所有子进程(进程间的关系是树形结构)
  • 将该进程拥有的所有资源归还给父进程或操作系统
  • 删除PCB
  • 引起进程终止的事件:
  • 正常结束
  • 异常结束(整数除以0、非法使用特权指令,然后被操作系统强行杀掉)
  • 外界干扰(Ctrl+Alt+delete,用户选择杀掉进程)

1.5 进程的阻塞

  • 阻塞原语(运行态 – > 阻塞态):
  • 找到要阻塞的进程对应的PCB
  • 保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
  • 将PCB插入相应事件的等待队列
  • 引起进程阻塞的事件:
  • 需要等待系统分配某种资源
  • 需要等待相互合作的其他进程完成工作

1.6 进程的唤醒

  • 唤醒原语(阻塞态 – > 就绪态):
  • 在事件等待队列中找到PCB
  • 将PCB从等待队列移除,设置进程为就绪态
  • 将PCB插入就绪队列,等待被调度
  • 引起进程唤醒的事件
  • 等待的事件发生(因何事阻塞,就应由何事唤醒)

1.7 进程的切换

  • 切换原语(运行态 --> 就绪态、就绪态 --> 运行态):
  • 将运行环境信息存入PCB
  • PCB移入相应队列
  • 选择另一个进程执行,并更新其PCB
  • 根据PCB恢复新进程所需的运行环境
  • 引起进程切换的事件:
  • 当前进程时间片到
  • 有更高优先级的进程到达
  • 当前进程主动阻塞
  • 当前进程终止

二、进程通信

2.1 什么是进程通信

  • 进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互。
  • 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
  • 为了保证安全,一个进程不能直接访问另一个进程的地址空间。

2.2 共享存储

  • 基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。
  • 基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式

2.3 消息传递

  • 进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
  • 直接通信方式
  • 消息发送进程要指明接收进程的ID
  • 间接通信方式
  • 通过“信箱”间接的通信,因此又称“信箱通信方式”

2.4 管道通信



  • “管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区。
  • 管道只能采用半双卫通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
  • 各进程要互斥地访问管道(由操作系统实现)
  • 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  • 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  • 管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:
  • ①一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案);
  • ②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Liux的方案)


相关文章
|
16天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
43 1
|
20天前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
18天前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
17天前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
18天前
|
存储 算法 调度
深入理解操作系统:进程调度的奥秘
在数字世界的心脏跳动着的是操作系统,它如同一个无形的指挥官,协调着每一个程序和进程。本文将揭开操作系统中进程调度的神秘面纱,带你领略时间片轮转、优先级调度等策略背后的智慧。从理论到实践,我们将一起探索如何通过代码示例来模拟简单的进程调度,从而更深刻地理解这一核心机制。准备好跟随我的步伐,一起走进操作系统的世界吧!
|
18天前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
19天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
22天前
|
算法 Linux 调度
深入浅出操作系统的进程管理
本文通过浅显易懂的语言,向读者介绍了操作系统中一个核心概念——进程管理。我们将从进程的定义出发,逐步深入到进程的创建、调度、同步以及终止等关键环节,并穿插代码示例来直观展示进程管理的实现。文章旨在帮助初学者构建起对操作系统进程管理机制的初步认识,同时为有一定基础的读者提供温故知新的契机。
|
21天前
|
消息中间件 算法 调度
深入理解操作系统之进程管理
本文旨在通过深入浅出的方式,带领读者探索操作系统中的核心概念——进程管理。我们将从进程的定义和重要性出发,逐步解析进程状态、进程调度、以及进程同步与通信等关键知识点。文章将结合具体代码示例,帮助读者构建起对进程管理机制的全面认识,并在实践中加深理解。
|
23天前
|
负载均衡 算法 调度
深入理解操作系统:进程管理与调度
在数字世界的心脏,操作系统扮演着至关重要的角色。它如同一位精明的指挥家,协调着硬件资源和软件需求之间的和谐乐章。本文将带你走进操作系统的核心,探索进程管理的艺术和调度策略的智慧。你将了解到进程是如何创建、执行和消亡的,以及操作系统如何巧妙地决定哪个进程应该在何时获得CPU的青睐。让我们一起揭开操作系统神秘的面纱,发现那些隐藏在日常计算背后的精妙机制。
下一篇
DataWorks