操作系统-进程与线程(进程控制,进行控制相关的原语、三种进程通信方式)

1.进程控制

什么是进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。

进程控制的实现方式
进程控制本质要实现进程之间的状态切换,更新进程PCB的值(修改进程状态),移动进程PCB的管理位置,释放PCB资源。进程控制需要原语操作。

原语:原语是一种特殊的程序,它的执行具有原子性。这段程序的运行必须一气呵成,不可中断。

操作系统进行进程切换就是原语的,操作系统修改PCB的状态字,同时更改PCB所处的队列。

  • 原语操作实现原理:计算机组成中介绍过,原语操作采用关中断和开中断来实现

  • 关中断与开中断之间的指令序列是不能相应中断的(紧急情况如掉电中断等除外),这样在开中断与关中断之间就实现了原子性

进程控制相关的原语(理解相关原语)

创建原语:进程在创建是系统使用的原语。进程从创建态->就绪态

原语内容如下图:
在这里插入图片描述
撤销原语:在进程终止时使用,进程从运行态/就绪态/阻塞态->终止态.

原语内容如下图:
在这里插入图片描述
阻塞原语与唤醒原语(成对出现)

阻塞原语:进程状态从就绪态->阻塞态。

唤醒原语:进程的状态从阻塞态->就绪态

在这里插入图片描述

进程的切换

切换当前在CPU上运行的进程,切换原语会改变两个进程的运行状态。
就绪态->运行态
运行态->就绪态
在这里插入图片描述

进程切换需要保存要切换进程的运行环境(进程上下文信息),这里包括:

  1. PSW寄存器的值
  2. PC寄存器的值
  3. 通用寄存的值

将这些数据写入到PCB中,方便下次继续运行。

2.进程通信(IPC)

在这里插入图片描述
进程通信:进程与进程之间的数据传递。

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

共享存储(共享内存)

进程与进程之间的通信在内存中的一块共享空间中发生。

Linux系统下共享内存管理方式:
在这里插入图片描述
Linux下的共享内存通信方式

注意:如果多个进程同时向共享内存中写入数据,会发生写入冲突。为了正确性,需要保证进程向共享内存的写入时互斥的(内核同步互斥操作)。

特点:共享内存通信

  1. 基于存储区的共享:速度非常快。灵活性很高。(高级通信方式)
  2. 基于数据结构的共享:共享内存限制多,速度比较慢,灵活性差(低级通信方式)

消息传递(消息队列)

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

系统一个消息分为:消息头+消息内容

  • 消息头:发送进程ID、接受进程ID、消息长度等格式化的信息
  • 消息体:进程通信的内容

消息传递有两种方式:

  1. 直接通信方式:消息发送进积要指明接收进程的ID
  2. 间接通信方式:类似通过“信箱”间接通信方式。因此又称“信箱通信方式”

直接通信方式:
进程PCB中有一个消息队列,其他进程给这个进程的消息都挂在这个队列上。

eg:A进程向B进程消息对列通信。
A进程使用发送原语将消息发送到B进程的消息队列上,进程B使用接受原语来接受消息。

间接通信方式:
eg:A进程向B进程通信
通信前内核空间会开辟空间S
A进程完善要发送的信息,使用发送原语将消息发送到对应的内核空间S上。
B进程使用接受原语,从内核空间中拿取消息。

注意:可以多个进程往同一个信箱发送消息,也可以多个进程从同一个信箱中接受消息

管道通信

Linux_Centos进程间通信_管道(匿名管道_命名管道)
在这里插入图片描述

写进程向管道写入数据,读进程向管道读取数据。(数据流向是单项的)

“管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区。

数据读取是先进先出型(循环队列)。

注意:

  1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。

  2. 各进程要互斥的访问管道。(操作系统实现,保证写入正确)

  3. 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。

  4. 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。

  5. 写进程往管道写数据,即便管道没被写满,读进程可也以读取管道数据。

  6. 只要管道有空间,写进程就会向管道中写入数据。

  7. 管道数据在读取完后就消失了,所以多个读进程读取管道时会出现读错误。(一个管道允许多个写进程,一个读进程)(Linux解决方案:允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUC_Dodamce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值