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

news2024/9/26 5:15:41

在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


操作系统

  • 一、进程控制
    • 1.1 什么是进程控制
    • 1.2 如何实现进程控制(“原语”实现)
      • 1.2.1 如何实现原语的“原子性”
    • 1.3 进程的创建
    • 1.4 进程的终止
    • 1.5 进程的阻塞
    • 1.6 进程的唤醒
    • 1.7 进程的切换
  • 二、进程通信
    • 2.1 什么是进程通信
    • 2.2 共享存储
    • 2.3 消息传递
    • 2.4 管道通信

一、进程控制

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的方案)

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

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

相关文章

vue element 搜索框根据后台的接口实现模糊查询 + 分页特殊处理+重置表格

模糊查询效果图 1.配置接口 search: "/api/goods/search", //搜索接口/goods/search 2.get接口 search(params) { return axios.get(base.search, { params });//后台传参 再写这个params }, 3.异步请求接口 // 搜索接口async search(search){let res await this…

基于Java社区生鲜电商平台设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

离子风刀的特点以及应用领域

静电消除器离子风刀是一种用于消除静电的设备,它通过在空气中产生离子,将静电从物体表面或人体上释放掉,以保护电子设备和人体免受静电的损害。 离子风刀的特点包括: 1、高效:离子风刀能够快速消除静电,提…

CRM软件系统趣味性——游戏化销售管理

对于企业销售来说,高薪酬也伴随着更高的压力与挑战。高强度的单一工作会让销售人员逐渐失去对工作的兴趣,导致售状态缺少动力和激情,工作开展愈加困难。您可以通过CRM系统进行游戏化销售管理,让销售人员重新干劲满满。 游戏并不是…

SkyWalking使用讲解

文章目录 1 SkyWalking1.1 简介1.2 如何选择1.3 Skywalking架构1.4 服务端搭建1.4.1 下载安装包1.4.2 配置修改1.4.2.1 config/application.yml1.4.2.2 webapp/webapp.yml 1.4.3 启动服务 1.5 客户端搭建1.6 数据持久化1.6.1 修改配置文件1.6.2 添加MySQL的jdbc依赖 1.7 日志监…

Java面经整理(1)

一)Java中支持多继承吗,为什么? 答案:在JAVA中是不支持多继承的,原因是多继承会存在菱形继承的问题 菱形继承: 1)菱形继承也被称之为是钻石继承,是一种在JAVA面向对象编程的时候遇到的一个可能出现的继承问题; 2)假设JAVA支持多继承,那么就有可能一个类D继承两个不同的类…

一文总结提示工程框架,除了CoT还有ToT、GoT、AoT、SoT、PoT

夕小瑶科技说 原创 编译 | 谢年年 大语言模型LLM被视为一个巨大的知识库,它可以根据你提出问题或陈述的方式来提供答案。就像人类可能会根据问题的不同提供不同的答案一样,LLM也可以根据输入的不同给出不同的答案。因此,你的问题或陈述方式就…

视频太大怎么压缩变小?把视频变小这样做

随着科技的不断发展,视频已经成为了我们日常生活中不可或缺的一部分,然而,有时候我们会遇到视频体积太大,无法上传或者传输的问题,那么,如何将过大的视频压缩变小呢?下面就给大家分享几个方法&a…

如何检测出鸡蛋壳上的裂缝(个人想法,正确性有待研究)

问题 老师在课上提出了一个项目,是关于如何通过某些方式来找出有裂缝的鸡蛋壳,但是鸡蛋壳上的裂缝非常小,问有什么办法处理。 想法 通过瞬间增大气压使得有裂缝的鸡蛋破裂。 具体实施 在图中,我们可以看到鸡蛋受外界气压的力&…

TS自动监视ts文件修改

当我们对ts文件进行编译后会生成js文件 当我们在ts文件中进行修改时,js文件并不会进行变化 那我们该如何监视ts文件中的变化呢?可以在控制台中输入如下命令: tsc 文件名.ts -w 这下在ts中代码改变就可以被监听(这里报错是因为同时…

【UML】类图详解

UML UML ——Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用
于帮助软件开发人员进行思考和记录思路的结果 UML图有哪些 用例图静态结构图∶类图、对象图、包图、组件图、部署图动…

Python 搭建编程环境

一、搭建编程环境 1、下载python 官网:https://www.python.org 2、开始安装 下载安装版本,双击下载的安装包,如下: 步骤一: 步骤二: 步骤三: 安装完成后执行下面的操作,判断是否…

[移动通讯]【Carrier Aggregation-4】【LTE-5】

前言: 前面讲过通过能力上报,以及RRC Connection Reconfiguration 添加SCell,添加完成后,UE 处于Inactive 状态。 本章主要讨论一下 Inactive 状态Active 状态的切换. 3GPP TS 36.321 V11.1.0 section 6.1.3.8 "Activation/Deactivat…

使用Python抢购商品

使用Python抢购商品 前言准备工作安装selenium库下载ChromeDriver 编写抢购商品py脚本导入库selenium使用方法 示例代码淘宝网华为商城 前言 注意:示例代码仅供学习使用,禁止不正当盈利。 本文使用Python的selenium库通过Chrome浏览器来抢购商品。首先…

Vue3-初识Vue3、创建Vue3工程、vue3组合式API(setup、ref函数、reactive函数)、响应式原理、计算属性、监视属性

Vue3(1) 目录 Vue3(1)一、Vue3简介二、创建Vue3.0工程1、使用vue-cli创建2、使用vite创建 三、常用的Composition API(组合式API)1、拉开序幕的setup2、ref函数3、reactive函数4、Vue3中响应式原理&#xf…

Django:五、登录界面实现动态图片验证码

一、下载包 pip install pillow 二、代码 这是一个函数,无输入,返回两个值。一个值是图片,一个值是图片中的数字及字母。 需要注意:font_fileMonaco.ttf 是一个验证码字体文件,如有需要,可三连私信。 …

缓存之缓存简介

目录 一.缓存的作用二.缓存的使用1.适用缓存的数据场景2.读取缓存流程图 三.本地缓存和分布式缓存 一.缓存的作用 Java缓存技术是在应用程序和数据库之间的一种中间层,用于存储暂时性数据,尤其是读取频繁但更新较少的数据。它的作用是减轻应用程序和数据库之间的负担,提高应用程…

WhatsApp营销:避免封禁账号的关键策略

首先,我们需要明白,WhatsApp官方明确反对群发为,随时可能导致账号被封禁的风险存在。因此,我们应该避免避免群发,而更多地采用单一发单的方式。当找到目标客户后,应先仔细研究客户的主页,例如他…

VSCode 配置 Lua 开发环境(清晰明了)

概述 由于 AutoJS 学得已经差不多了,基本都会了,现在开始向其他游戏脚本框架进发, Lua 语言很强大,就不多说, 按键精灵、触动精灵等等都是用该语言编程脚本的,由于按键精灵、触动精灵 和 AutoJS 类似,不是…

基于SpringBoot的在线题库管理系统的设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…