进程(一)

进程(一)

    • 2.1 进程的定义、组成、组织方式、特征
      • 2.1.1 定义
      • 2.1.2 组成
      • 2.1.3 组织方式
      • 2.1.4 特征
      • 2.1.5 本小节总结
    • 2.2 进程的状态与转换
      • 2.2.1 进程的状态
      • 2.2.3 进程状态的转换
      • 2.2.4 本小节总结
    • 2.3 进程控制
      • 2.3.1 基本概念
      • 2.3.2 进程控制相关的原语
      • 2.3.3 本小节总结
    • 2.4 进程通信
      • 2.4.1 共享存储
      • 2.4.2 消息传递
      • 2.4.3 管道通信
      • 2.4.4 本小节总结
    • 2.5 线程概念和多线程模型
      • 2.5.1 什么是线程,为什么要引入线程
      • 2.5.2 引入线程机制后,有什么变化
      • 2.5.3 线程的实现方式
      • 2.5.4 多线程模型
      • 2.5.5 本小节总结

该章节包括

2.1 进程的定义、组成、组织方式、特征

2.2 进程的状态与转换

2.3 进程控制

2.5 线程概念和多线程模型

2.1 进程的定义、组成、组织方式、特征

本小节知识概览

image-20230409132154899

2.1.1 定义

在早期的计算机中,只能处理单个任务,

image-20230409132319565

引入多道程序之后,在内存中需要存储多个程序需要的数据,那么操作系统是如何知道各个程序的存放位置呢?

image-20230409191526511

因此就引出了进程、进程实体的概念。

image-20230409191718800

程序段、数据段、PCB三部分组成了进程实体(进程映像〉。一般情况下,我们把进程实体就简称为进程,例如,所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB。

注意:PCB是进程存在的唯一标志

image-20230409192202529

2.1.2 组成

进程(进程实体)由程序段、数据段、PCB三部分组成

image-20230409192325254

PCB的组成:

image-20230409192516086

PCB:记录管理进程所需要的信息

程序段、数据段:记录程序需要的数据

image-20230409192625530

2.1.3 组织方式

在一个系统中,通常有数十、数百乃至数千个PCB。为了能对他们加以有效的管理,应该用适当的方式把这些PCB组织起来。

注意:进程的组成讨论的是一个进程内部由哪些部分构成的问题,而进程的组织讨论的是多个进程之间的组织方式问题。

image-20230409192918676

链接方式: 将处于不同状态的PCB连接成队列

image-20230409193124110

索引方式:指针通过索引表指向不同状态的PCB

image-20230409193219274

2.1.4 特征

image-20230409193352319

2.1.5 本小节总结

image-20230409193521651

2.2 进程的状态与转换

本小节知识概览

image-20230409193829496

2.2.1 进程的状态

进程是程序的一次执行。在这个执行过程中,有时进程正在被CPU处理,有时又需要等待CPU服务可见,进程的状态是会有各种变化。为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态。

image-20230409194141309

进程的创建状态:为进程分配内存、PID…

image-20230409194340713

进程的终止状态:销毁PCB、释放内存…

image-20230409194438921

2.2.3 进程状态的转换

上面说道进程的五种状态,那么这几种状态之间是如何转换的呢?

image-20230409194850127

2.2.4 本小节总结

image-20230409195115741

2.3 进程控制

本小节知识总览

image-20230409195439367

2.3.1 基本概念

什么是进程控制?

image-20230409195550948

如何实现进程控制?

简单来说进程的控制就是通过修改 PCB 中的标志,以及放入相应的队列中。

如果 PCB 中的标志位是就绪状态,但却在阻塞队列中,就会发生系统错误,因此需要原语实现进程的控制!

image-20230409195829021

2.3.2 进程控制相关的原语

原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作即原子操作。
原语采用**“关中断指令”“开中断指令”**实现

当代码中有一些外部中断信号,由于执行了关中断指令,这些外部中断信号是被忽略的,也就是不会被执行,保证了原子性。在执行开中断指令后,才会去处理这些中断信号。

image-20230409200457177

进程控制的相关原语

学习技巧:进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:

1. 更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)

​ a.所有的进程控制原语一定都会修改进程状态标志

​ b.剥夺当前运行进程的CPU使用权必然需要保存其运行环境

​ c.某进程开始运行前必然要恢复运行环境

2.将PCB插入合适的队列

3.分配/回收资源

创建原语

image-20230409200904227

撤销原语

image-20230409201040175

阻塞、唤醒原语

image-20230409201204904

切换原语

image-20230409201312258

2.3.3 本小节总结

image-20230409201333557

2.4 进程通信

本小节知识概览

image-20230409201354485

什么是进程通信?

顾名思义,进程通信就是指进程之间的信息交换。

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

image-20230409201619214

2.4.1 共享存储

顾名思义,就是通过一个共享的内存空间达到数据共享

image-20230409202000472

值的注意的是:

  • 两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)。
  • 操作系统只负责提供共享空间和同步互斥工具(如P、V操作)

俩种共享存储的方式

image-20230409202140521

基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式

基于存储区的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式。

思考

有过Java基础的,我们可以想想为什么 wait/notify 必须要在同步代码块中使用呢?

首先我们需要明确 wait/notify 是用来实现通信的一种手段,使用的正是 共享存储的方式,而在共享空间中,俩个进程对共享空间中数据的读和写必须是互斥的,而想要达到这一个条件,就需要我们使用互斥锁来实现。

2.4.2 消息传递

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

image-20230409203541277

俩种消息传递的方式:

image-20230409203619463

直接通信方式

每一个进程都会有一个消息缓冲队列, 进程1 想要给 进程2 发送消息,首先会创建一个消息Message,通过发送原语直接挂到进程2的缓冲队列上。

image-20230409203655687

image-20230409203806294

间接通信方式

进程之间通过 信箱 的方式进行通信,进程1通过发送原语将消息发送到信箱中,进程2通过接收原语接受消息

image-20230409203911571

2.4.3 管道通信

image-20230409203154094

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

2.各进程要互斥地访问管道。

3.数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞

4.如果没写满,就不允许读。如果没读空,就不允许写。

5.数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。

2.4.4 本小节总结

共享存储是双向通信,可以进行数据交换,管道通信和消息传递属于单向通信。

image-20230409204133366

2.5 线程概念和多线程模型

本小节知识概览

image-20230409204834863

2.5.1 什么是线程,为什么要引入线程

image-20230409205045223

因此在引入线程之后,CPU调度的并不是一个个进程了,而是进程中的某一个线程,更加细粒度。

image-20230409205246896

  • 可以把线程理解为“轻量级进程
  • 线程是一个基本的CPU执行单元,也是程序执行流的最小单位
  • 引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)
  • 引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)

2.5.2 引入线程机制后,有什么变化

image-20230409205617154

线程的属性

image-20230409210151394

2.5.3 线程的实现方式

用户级线程(User-Level Thread,ULT)

  • 用户级线程由应用程序通过线程库实现。所有的线程管理工作都由应用程序负责(包括线程切换)
  • 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
  • 在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。(用户级线程对用户不透明,对操作系统透明)
  • 可以这样理解,“用户级线程”就是“从用户视角看能看到的线程

image-20230409210333887

内核级线程(Kernel-Level Thread,KLT 又称:内核支持的线程)

  • 内核级线程的管理工作由操作系统内核完成。线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
  • 可以这样理解,“内核级线程”就是“从操作系统内核视角看能看到的线程

image-20230409210559195

在同时支持用户级线程和内核级线程的系统中,可采用二者组合的方式:将n个用户级线程映射到m个内核级线程上( n >= m)

重点重点重点;
操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位

例如:

左边这个模型中,该进程由两个内核级线程,三个用户级线程,在用户看来,这个进程中有三个线程。但即使该进程在一个4核处理机的计算机上运行,也最多只能被分配到两个核,最多只能有两个用户线程并行执行。

image-20230409210836541

2.5.4 多线程模型

在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到几个内核级线程的问题引出了“多线程模型”问题。

多对一模型:多个用户及线程映射到一个内核级线程。每个用户进程只对应一个内核级线程。
优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高

缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行

image-20230409211142716

一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

image-20230409211724547

多对多模型:n用户及线程映射到m个内核级线程(n >= m)。每个用户进程对应m个内核级线程。
克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

image-20230409211811959

2.5.5 本小节总结

image-20230409212012507

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java零基础入门篇】第 ⑤ 期 - 抽象类和接口(二)

博主:命运之光 专栏:Java零基础入门 学习目标 1.了解什么是抽象类,什么是接口; 2.掌握抽象类和接口的定义方法; 3.理解接口和抽象类的使用场景; 4.掌握多态的含义和用法; 5.掌握内部类的定义方法…

vue学习

{{}} 插值语法,应用vue实例容器中,获取标签值 v-bind v-bind:单向绑定,实例对象key的对应的值,绑定到vue实例容器标签的属性中 简写:: v-model v-model:双向绑定 注意:v-model只能应用于‘表单…

MathType7简体中文版数学公式编辑器下载安装教程

MathType一款专业的数学公式编辑器,理科生专用的必备工具,可应用于教育教学、科研机构、工程学、论文写作、期刊排版、编辑理科试卷等领域。2018年2月,MathType 7简体中文版正式发布,给用户带来全新的体验。MathType 是Windows和M…

jenkins,gitlab,实时构建推送

首先jdk,jenkins安装好,新版jenkins不支持jdk8 然后安装环境maven,git 环境配置 插件安装 gitlab插件 Build Authorization Token Root插件 插件环境整好之后新建个任务 源码管理,填入仓库https地址,添加git…

shell函数

目录 一、shell函数 1.函数的作用 2.函数的优点 二、shell函数的格式 2.1函数返回值return 2.2函数变量 三、函数传参 四、递归函数 4.1查找输入目录下文件及其子目录下文件 4.2将IP地址转换为二进制 五、函数数据库 一、shell函数 1.函数的作用 把程序里需要多次…

C++Primer第20章 iostream库

第20章 iostream库 C中的IO流是通过多继承和虚拟继承实现的,下面是它的关系. 我们要学习的就是三个库,这里我会把重点的拿出来 iostream: 终端操作fstream:文件操作sstream:格式化操作 20.1 输出操作符<< 输出操作符可以接受任何内置数据类型的实参,包含我们的const …

怎么搭建个人小型渲染农场?搭建渲染农场配置

渲染农场是众多机器组成的渲染集群&#xff0c;通常用来渲染你的单帧效果图或动画项目&#xff0c;我们借助渲染农场的力量&#xff0c;可以满足3D项目交期时间迫在眉睫的需求&#xff0c;当你试着在自己的机器上渲染一个复杂的动画项目时&#xff0c;可能需要几十小时的等待时…

车载软件架构——闲聊几句AUTOSAR BSW(四)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…

大数据赛项|2023年广东省大学生计算机设计大赛初赛结果公示

2023年广东省大学生计算机设计大赛 暨第16届中国大学生计算机设计大赛 粤港澳大湾区赛初赛结果公示 根据《广东省教育厅关于做好2023年广东省本科高校大学生学科竞赛工作的通知》&#xff0c;广东外语外贸大学承办2023年“广东省大学生计算机设计大赛”。 在广大师生的热情…

达摩院开源多模态对话大模型mPLUG-Owl

miniGPT-4的热度至今未减&#xff0c;距离LLaVA的推出也不到半个月&#xff0c;而新的看图聊天模型已经问世了。今天要介绍的模型是一款类似于miniGPT-4和LLaVA的多模态对话生成模型&#xff0c;它的名字叫mPLUG-Owl。 论文链接&#xff1a;https://arxiv.org/abs/2304.14178…

实时操作系统内存管理-TLSF算法

内存管理-TLSF算法 前言TLSF算法&#xff1a;为什么内存又叫内存“块”&#xff1a;O(1)查找空闲块&#xff1a;确定fl&#xff1a;确定sl&#xff1a;提级申请&#xff1a;分割块&#xff1a; 空闲块如何串成链表&#xff1f;减少外部碎片&#xff1a;查找上下块&#xff1a; …

OpenGL 4.0的Tessellation Shader(细分曲面着色器)

细分曲面着色器&#xff08;Tessellation Shader&#xff09;处于顶点着色器阶段的下一个阶段&#xff0c;我们可以看以下链接的OpenGL渲染流水线的图&#xff1a;Rendering Pipeline Overview。它是由ATI在2001年率先设计出来的。 目录 细分曲面着色器细分曲面Patch细分曲面控…

Node.js对ES6 及更高版本的支持

目录 1、简介 2、默认情况下什么特性随着 Node.js 一起发布&#xff1f; 3、有哪些特性在开发中&#xff1f; 4、移除这个标记&#xff08;--harmony&#xff09;吗 5、Node.js 对应 V8 引擎 1、简介 Node.js 是针对 V8 引擎构建的。通过与此引擎的最新版本保持同步&…

【HMS Core】Health Kit想要查看数据是来自用户的哪个设备,如何查看?

【问题描述1】 如何查看运动健康数据是来自用户的哪个设备&#xff1f; 【解决方案】 可以通过返回的数据中携带的dataCollectorId来查询提供数据的设备信息&#xff1a; 请求示例&#xff08;以查询睡眠记录详情为例&#xff09;&#xff1a; 1、查询睡眠记录并关联睡眠状…

用友携国资国企走进浙江龙游,共探区县国资智慧监管新样板

近日&#xff0c;由龙游县国有资产经营有限公司指导&#xff0c;用友网络科技股份有限公司&#xff08;以下简称&#xff1a;用友网络&#xff09;主办的“成为数智企业 迈向高质量发展——2023走进龙游数智化观摩研讨会”在浙江龙游成功举办&#xff01;全国近百位国资国企负责…

操作系统学习02

&#xff01;&#xff01;&#xff01;由于感冒和出去玩&#xff0c;好几天没学这些计算机基础知识了&#xff01;&#xff01;&#xff01; 抓紧跟上嘿嘿嘿 1、内存管理主要做了什么 操作系统的内存管理非常重要&#xff0c;主要负责下面这些事情&#xff1a; 内存的分配与…

shell脚本--函数

目录 一&#xff1a;shell函数定义 1.函数的含义 2.函数的优点 3.函数的格式 4.函数返回值 &#xff08;1&#xff09;return输出 &#xff08;2&#xff09;echo输出 二&#xff1a;函数传参 1.情景一 2.情景二 3.情景三 4.情景四 三:递归函数 1.递归函数定义 2.通过…

ASEMI代理ADUM3223ARZ-RL7原装ADI车规级ADUM3223ARZ-RL7

编辑&#xff1a;ll ASEMI代理ADUM3223ARZ-RL7原装ADI车规级ADUM3223ARZ-RL7 型号&#xff1a;ADUM3223ARZ-RL7 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;SOIC-16 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;16 工作温度:-40C~125…

利用MQ事务消息实现分布式事务

MQ事务消息使用场景 消息队列中的“事务”&#xff0c;主要解决的是消息生产者和消息消费者的数据一致性问题。 拿我们熟悉的电商来举个例子。一般来说&#xff0c;用户在电商 APP 上购物时&#xff0c;先把商品加到购物车里&#xff0c;然后几件商品一起下单&#xff0c;最后…

2路 QSFP,40G 光纤的数据实时采集(5GByte/s 带宽)板卡设计原理图 -PCIE732

板卡概述 PCIE732 是一款基于 PCIE 总线架构的高性能数据传输卡&#xff0c;板卡具有 1 个 PCIex8 主机接口、2 个 QSFP40G 光纤接口&#xff0c;可以实现 2 路 QSFP 40G 光纤的数据实时采集、传输。板卡采用 Xilinx 的高性 能 Kintex UltraScale 系列 FPGA 作为实时处理器…