【操作系统】进程管理——进程控制和进程通信(个人笔记)

news2024/11/24 5:22:59

学习日期:2024.6.30

内容摘要:进程控制的概念,进程控制相关的“原语”,进程通信


进程控制

原语

进程控制用“原语”实现。原语是一种特殊的程序,它的执行具有原子性,也就是说,这段程序的执行必须一气呵成,不能中断。

Q:为什么进程控制(状态转换)的过程必须一气呵成?

如果不能一气呵成,可能会出现某些进程的关键数据结构信息不统一的情况,会影响操作系统进行别的管理工作。

Q:原子性是如何实现的?

利用了“关中断指令”和“开中断指令”两个特权指令来实现原子性,CPU执行了关中断指令后,就不会再例行检查中断信号,直到执行开中断指令之后才会恢复检查,从而达到独占CPU的目的。

进程的创建

创建原语(操作系统创建一个进程时使用的原语)会申请空白PCB,为新进程分配所需资源,初始化PCB,将PCB插入就绪队列(创建态->就绪态)

引起进程创建的事件:

①用户登录:分时系统中,用户登陆成功,系统会为其建立一个新的进程。

②作业调度:多道批处理系统中,有新的作业放入内存时,会为其建立新进程。

③提供服务:用户向操作系统提出请求时,会新建一个进程处理请求。

④应用请求:由用户进程主动请求创建一个子进程。

进程的终止

撤销原语(操作系统终止一个进程时所使用的原语)会从PCB集合中找到终止进程的PCB,若进程正在运行,立刻剥夺CPU,同时将CPU分配给其它进程。终止其所有子进程,将该进程所拥有的所有资源归还给父进程或操作系统,最后删除PCB

引起进程终止的事件:

①正常结束:进程自己请求终止。

②异常结束:整数除以0,非法使用特权指令被操作系统强行杀死。

③外界干预:出于某种原因,用户使用任务管理器等方式杀死进程。

进程的阻塞

阻塞原语可以让进程从运行态变为阻塞态。阻塞原语会找到要阻塞的进程对应的PCB,保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行,最后将PCB插入相应事件的等待队列。

引起进程阻塞的事件:

①等待:需要等待系统分配某种资源,或需要等待互相合作的其它进程完成工作

进程的唤醒

唤醒原语可以让进程从就绪他转换为运行态,唤醒原语会在等待队列中找到待唤醒进程的PCB,将PCB从等待队列移除,设置进程为就绪态,将PCB插入就绪队列,等待被调度

引起进程唤醒的事件:

①进程因何事被阻塞,就应当由何事被唤醒,阻塞原语和唤醒原语必须是成对使用的

进程的切换

切换原语会让进程在运行态和就绪态之间切换。切换原语会将进程的运行环境信息存入PCB,然后将PCB移入相应队列(就绪/运行),选择另一个进程执行,并更新其PCB,根据PCB恢复新进程所需的运行环境。

引起进程切换的事件:

①当前进程的时间片到。 ②有更高优先级的进程到达。③当前进程主动阻塞。④当前进程终止。

共性

无论是哪个进程控制原语,要做的无非是三类事情:

①更新PCB中的信息(修改进程状态,保护/恢复运行环境)。

②将PCB插入合适的队列。

③分配/回收资源。

什么叫“进程的运行环境”?

我们在前面提到过很多次“保存运行环境”,其实就是保存寄存器中的指令和值,在进程切换时,先在PCB中保存这个进程的运行环境(保存如PC,IR,通用寄存器等信息)然后当原来的进程再次运行时,可以通过PCB快速的恢复它的运行环境。


进程通信

进程间通信(IPC,Inter-Process Communication)是指两个进程之间产生数据交互。

你在刷b站的过程中看到一个有意思的视频,想把它分享给你的好朋友,会点击视频下面的转发按钮,然后选择你的微信好友,视频就发出去了,但是正在运行的bilibili和微信显然不是同一个进程,那是怎么发出去的呢?这就是进程之间发生了通信

为什么进程的通信需要操作系统支持?

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立

如果两个进程P和Q之间需要通信,显然进程P是不能直接把数据写到Q的地址空间的,所以需要借助操作系统的帮助。下面介绍共享存储、消息传输、管道通信三种进程通信方式。

共享存储

共享存储的原理是,进程可以申请一片共享存储区,这片共享存储区其它的进程也可以访问,所有要进行交换的数据就可以放在这片区域,从而完成进程间通信。通过增加页表项/段表项即可将同一片共享内存区域映射到各个进程的地址空间当中。

为避免写覆盖,各个进程对共享空间的访问应该是互斥的。(避免P正在该区域写,此时Q也在同一区域写,覆盖了P写的内容)

基于存储区的共享

操作系统在内存中划出一块共享存储区域,数据的形式、存放的位置都由通信进程控制,而不是操作系统,这种共享方式速度很快,是一种高级通信方式。

基于数据结构的共享

比如说共享空间内只能放一个长度为100的数组,这个数组能在各个进程之间共享访问,这种共享方式速度慢限制多,是一种低级通信方式。

消息传递

进程间的数据交换以格式化的消息(Message)为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。

直接通信方式

在操作系统的内核区域中,进程Q的PCB中会有一个进程Q的消息队列。进程P给进程Q发送消息时,进程P在自己的区域中初始化消息,然后使用发送原语,send(Q,msg),这会使得操作系统接收到了这个消息,把这个消息复制到进程Q的消息队列当中。进程Q在运行时,可以使用接收原语,receive(P,&msg),操作系统查找Q的消息队列,发现P发来的信息,再把消息队列当中的msg放到进程Q的地址空间当中。

间接通信方式

进程可以向操作系统申请一个(或多个)邮箱,保存在操作系统内核地址空间当中。当进程P准备给Q发送信息时,进程P首先在自己的地址空间内给自己要发送的消息赋值(好比先写好信),然后使用发送原语(A,msg)往信箱A发送消息msg。注意!此时与直接通信方式的区别是,不声明自己消息要发给谁,而是发送给信箱,以信箱作为中间实体进行传递。

之后,进程Q通过接收原语,receive(A,&msg)从信箱A接受消息。

同现实中的信箱一样,多个进程可以在同一个信箱send或receive消息。

管道通信

水管当中的水流一定是单向的,管道通信也是如此,我们只能从一端写数据,一端读数据。

“管道”(pipe)是一个特殊的共享文件,其实就是在内存中开辟一个大小固定的内存缓冲区,其与共享存储的根本区别是:共享内存的P、Q进程都可以在共享存储区当中自由读写数据,但管道是单向的,P只能向管道里写数据,Q只能读数据,且管道中的数据满足先进先出的特征,Q不是想读哪个就读哪个,而是按照P发送的顺序来读。

①管道只能采用半双工通信,某一时间段内只能实现单向的传输(管道可以倒过来,但是不能同时来回传)。如果需要双向同时通信(全双工通信),则需要建立两个管道。

②各个进程要互斥的访问管道(由操作系统实现)

③因为管道的大小是固定的,当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。同理,当管道读空时,读进程将堵塞,直到写进程往管道中写入数据。

④管道中的数据一旦被读出,就彻底消失,因此当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:

1.一个管道允许多个写进程,但是只能有一个读进程(多个进水口,一个出水口)

2.允许有多个写进程和多个读进程,但是系统会让各个读进程轮流读数据(多个出水口,但不准同时打开)(Linux的方案)


 内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1879783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs code python开发笔记

目录 选择python 解析器 安装插件 不全: 调试启动目录问题: 2.选择python解释器 选择python 解析器 ctrl shift P select interpreter 安装插件 不全: remote ssh python debuger 左下角,点击左右左右箭头,远程…

后端之路第三站(Mybatis)——JDBC跟Mybatis、lombok

一、什么是JDBC JDBC就是sun公司研发的一套通过java来操控数据库的工具,对应不同的数据库系统有不同的JDBC,而他们统称【驱动】,这就是上一篇我们提到创建Mybatis项目时要引入的依赖、以及连接数据库四要素里的第一要素。 JDBC有自己一套原始…

Redis 7.x 系列【8】数据类型之哈希(Hash)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 HSET2.2 HGET2.3 HDEL2.4 HEXISTS2.5 HGETALL2.6 HKEYS2.7 HLE…

grpc学习golang版( 五、多proto文件示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件2.1 公共proto文件2.2 语音唤醒proto文…

探索MySQL核心技术:理解索引和主键的关系

在数据密集型应用中,数据库的性能往往是决定一个应用成败的重要因素之一。其中,MySQL作为一种开源关系型数据库管理系统,以其卓越的性能和丰富的功能被广泛应用。而在MySQL数据库优化的众多技巧中,索引和主键扮演着极其重要的角色…

5、Python之rich:GUI之外,终端呈现也能玩出花

引言 在Python系列文章的上一篇中,我们从print的定义出发,进一步探索了print()函数更多的用法,尤其是一些哪怕是Python老手也可能忽略的用法。没有阅读的或者需要回顾print()及输出格式化的扩展用法,可以查看上一篇文章。 虽然pr…

2024/6/30周报

文章目录 摘要ABSTRACT文献阅读题目问题本文贡献方法LSTMTCN模型总体架构 实验实验结果 深度学习TCN-LSTM代码运行结果 总结 摘要 本周阅读了一篇关于TCN和LSTM进行光伏功率预测的文章,本文提出了一种利用LSTM-TCN预测光伏功率的新模型。它由长短期记忆和时间卷积网…

可编程定时计数器8253/8254 - 8253控制字

8253控制字 概述 图7-45中左下角的是控制字寄存器,其操作端口是0x43,它是8位大小的寄存器 控制字寄存器也称为模式控制器,在控制字寄存器中保存的内容称为控制字,控制字用来设置所指定的计数器(通道)的工作方式、读写格式及数制&#xff0c…

emptyDir + initContainer实现ConfigMap的动态更新(K8s相关)

1. 絮絮叨叨 K8s部署服务时,一般都需要使用ConfigMap定义一些配置文件例如,部署分布式SQL引擎Presto,会在ConfigMap中定义coordinator、worker所需的配置文件以node.properties为例,node.environment和node.data-dir的值将由Helm…

48 - 按日期分组销售产品(高频 SQL 50 题基础版)

48 - 按日期分组销售产品 -- group_concat 分组拼接selectsell_date,count(distinct product) num_sold,group_concat(distinct product order by product separator ,) products fromActivities group bysell_date;

监控电脑的软件有哪些?精选8大监控电脑的软件

根据当前市场反馈和功能评价,以下是八款备受推崇的电脑监控软件推荐,适合不同企业和组织的监控与管理需求: 1.安企神监控软件 特点:全面的局域网监控工具,擅长网络设备监控、网络性能管理和故障诊断。提供员工电脑屏幕…

C++操作系列(二):VSCode安装和配置C++开发环境

1. VSCode下载 进入VSCode的官网网页:Download Visual Studio Code - Mac, Linux, Windows 下载相应的版本: 2. 安装VSCode 安装到指定位置: 一路下一步,直至安装完成: 3. 安装C插件 3.1. 安装C/C 点击扩展图标&…

语音唤醒入门(基于ESP-skainet)

主要参考资料: ESP-SR 用户指南: https://docs.espressif.com/projects/esp-sr/zh_CN/latest/esp32s3/index.html 目录 ESP提供的模型直接初始化和使用模型AFE声学前端算法 使用模型 自定义模型 ESP提供的模型 乐鑫提供了经过训练的 WakeNet 和 MultiNet 模型&…

《高考择校择专业:权衡与抉择的智慧》

分数限制下,选好专业还是选好学校? 2024 年高考的大幕已然落下,然而对于众多考生而言,新的挑战才刚刚开始。在分数既定的情况下,是优先选择心仪的专业,还是更看重知名度高的学校?这无疑是一个令…

Go线程实现模型-核心元素的容器

核心元素的容器 图例 作用 3个全局容器存在的主要目的,都是为了罗列某个核心元素的全部 与G相关的调度器 与G相关的那4个非全局容器:调度器的可运行G队列、调度器的自由G队列、本地P的可运行G队列,以及本地P的自由G列表 全局G列表 任何…

LLM 大模型入门笔记-Tokenizer

下图展示了完整的 tokenization 流程,接下来会对每个步骤做进一步的介绍。 tokenizer_pipeline 1. Normalization normalize 其实就是根据不同的需要对文本数据做一下清洗工作,以英文文本为例可以包括删除不必要的空白、小写和/或删除重音符号。 代码…

《概率论与数理统计》期末复习笔记_下

目录 第4章 随机变量的数字特征 4.1 数学期望 4.2 方差 4.3 常见分布的期望与方差 4.4 协方差与相关系教 第5章 大数定律和中心极限定理 5.1 大数定律 5.2 中心极限定理 第6章 样本与抽样分布 6.1 数理统汁的基本概念 6.2 抽样分布 6.2.1 卡方分布 6.2.2 t分布 6.…

Winform使用HttpClient调用WebApi的基本用法

Winform程序调用WebApi的方式有很多,本文学习并记录采用HttpClient调用基于GET、POST请求的WebApi的基本方式。WebApi使用之前编写的检索环境检测数据的接口,如下图所示。 调用基于GET请求的无参数WebApi 创建HttpClient实例后调用GetStringAsync函数获…

数学之美:SQL语句的编译与关系代数

引言 当年读书的时候,真正学到数据库的操作之前,先学的内容是关系代数运算,以及相关的关系代数的定律。然后知道了当前比较主流的数据库都是关系型数据库,其底层依赖的是关系代数。 但是,当年考试的时候,…

【C语言】C语言-体育彩票的模拟生成和兑奖(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…