王道操作系统笔记(二)———— 进程与线程

news2025/1/20 1:04:33

文章目录

  • 一、进程的概念和特征
    • 1.1 进程的概念
    • 1.2 进程的组成
    • 1.3 进程的特征
    • 1.4 进程的状态与转换
    • 1.5 进程控制
    • 1.6 进程的通信
      • 1.6.1 共享存储
      • 1.6.2 消息传递
      • 1.6.3 管道通信
    • 1.7 父进程与子进程
  • 二、线程概念和多线程模型
    • 2.1 线程的概念
    • 2.2 线程的属性
    • 2.3 线程的实现方式
    • 2.4 多线程模型
    • 2.5 线程的状态与转换
    • 2.6 线程的组织与控制


一、进程的概念和特征

1.1 进程的概念

程序:静态的,就是个存放在磁盘里的 可执行文件,如:QQ.exe。
进程:动态的,是程序的一次 执行过程,或者是一个正在运行的是程序,如:可同时启动多次QQ程序。
进程实体: 即进程映像,是 静态的,可理解为进程的 一次时刻的状态
作业:静态的,如:一个应用软件(对应多个进程)、一个程序(对应一个进程)。
    作业装入内存,OS 会为该作业创建进程,作业装入后会变成进程。
在这里插入图片描述
注:同一个程序多次执行会对应多个进程。


1.2 进程的组成

进程是程序的一次执行过程,进程的组成实际上是进程实体(即进程映像)的组成。
进程组成包括:PCB、程序段、数据段。

在这里插入图片描述

注:① PCB,即 进程控制块,操作系统需要对各个并发运行的进程进行管理, 但凡管理时所需要的信息,都会被放在 PCB 中。
  ② PCB 是进程存在的唯一标志。 当进程被创建时,OS 会为其创建 PCB。当进程结束时,OS 会回收 PCB。
  ③ PCB 存于内存的内核区,注意内存的内核区和 OS 的内核态的区别,内核程序运行在内核态。

在这里插入图片描述

注:① PCB 是给操作系统用的,程序段和数据段是给进程自己用的。
  ② 引入进程实体的概念后,可把 进程 定义为是进程实体的 运行过程,是系统进行 资源分配调度 的一个独立单位。


1.3 进程的特征

在这里插入图片描述

注:① 动态性是进程最基本的特征。
  ② 异步性会导致并发程序执行结果的不确定性。


1.4 进程的状态与转换

在这里插入图片描述
注:单核 CPU同一时刻只会有一个进程处于运行态,多核 CPU 可能有多个进程处于运行态。
在这里插入图片描述
举例:运行态阻塞态:申请打印机。阻塞态就绪态:打印机可用了。

注:① “其他”,指代 “其他所需资源”。
  ② 运行态阻塞态,是进程自身的主动行为。
  ② 阻塞态就绪态,是被动行为。

创建新进程后,能进行处理及调度( ✓ )
在系统调用完成并返回用户态时能进行处理机调度( ✓ )
解析:能 ≠ 一定,可假设进程优先级很高,且采用剥夺式调度策略
(来源:12年408第30题)


1.5 进程控制

  进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为 原语,原语执行具有原子性,即执行过程 一气呵成,不可中断。因此,可用 关中断和开中断指令 这两个特权指令实现原子性。
在这里插入图片描述

无论哪个进程控制原语,要做的无非三类事:
① 更新 PCB 中的信息
② 将 PCB 插入合适的队列
③ 分配 / 回收资源

引起 进程创建 的事件用户登录、作业调度、提供服务、应用请求
引起 进程终止 的事件正常结束、异常结束、外界干预
引起 进程阻塞 的事件等待系统分配某种资源、等待相互合作的其他进程完成
引起 进程唤醒 的事件等待的事件发生
引起 进程切换 的事件当前进程时间片到、当前进程主动阻塞、当前进程终止、有更高优先级的进程到达(剥夺式调度)

补充: 进程的组织
进程的组织方式有两种:链接方式和索引方式
在这里插入图片描述


1.6 进程的通信

  进程通信是指进程之间的信息交换,PV操作是低级通信方式,高级通信方式是指以比较高的效率传输大量数据的通信方式,高级通信方式有三种:共享存储、消息传递和管道通信。
  进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。因此,为了保证安全,一个进程不能直接访问另一个进程的地址空间,所以进程通信需要操作系统支持。

1.6.1 共享存储

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

各进程对共享空间的访问应该是互斥的,各进程可使用操作系统内核提供的 P V 操作实现互斥。


1.6.2 消息传递

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

在这里插入图片描述

  1. 直接通信方式

    发送进程要知名接收进程的ID,直接把消息发送给接收进程,并将他挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
    在这里插入图片描述

  2. 间接通信方式
    发送进程通过 信箱 间接地通信,将消息发送到某个中间实体,接收进程从中间实体取得消息。
    在这里插入图片描述
    注:可以多个进程往同一个信箱 send 消息,也可以多个进程从同一个信箱中 receive 消息。


1.6.3 管道通信

管道 是一个特殊的 共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区。
在这里插入图片描述

注:① 管道只能采用 半双工通信,某一时间段内只能实现 单向的传输。如果要实现 双向同时通信,则需要设置两个管道
  ② 各进程要互斥地访问管道(由操作系统实现)
  ③ 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  ④ 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。

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

  1. 一个管道允许多个写进程,一个读进程(来源:2014年408第31题)
  2. 允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux 的方案)。

补充:
 写进程往管道写数据,即便管道没被写满,只要管道没空,读进程就可以从管道读数据
 读进程从管道读数据,即便管道没被读空,只要管道没满,写进程就可以往管道写数据


1.7 父进程与子进程

父进程与子进程可以并发执行,有不同的进程控制块,且不能同时使用同一临界资源。(注意并发与并行的区别)

父进程与子进程有可共享虚拟地址空间。(×)
解析:同一进程的不同线程间可共享虚拟空间,而不同进程之间的虚拟空间是相互独立的。
(来源:2020年408第29题)


二、线程概念和多线程模型

  未引入线程之前,系统之间只能串行执行程序,如:QQ和音乐播放器只能串行执行。
  引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如:QQ中的视频、文字聊天与传文件)

2.1 线程的概念

线程可理解为轻量级进程,它是一个基本的CPU执行单元,也是程序执行流的最小单位
引入线程后,进程 只作为 除 CPU 外的系统资源的分配单元(如:打印机、内存地址空间等都是分配给进程的)。
线程则作为处理机的分配单元。
在这里插入图片描述


2.2 线程的属性

在这里插入图片描述
注:线程是处理机调度的单位,这里的线程指的是 操作系统看得见的内核级线程,内核级线程是处理机分配的单位

在支持多线程的系统中,进程P创建的若干线程可共享进程P的代码段、进程P的打开的文件、进程P的全局变量,不可共享的是进程P中某线程的栈指针。
(来源:2011年408第25题)


2.3 线程的实现方式

线程的实现可以分为两类:用户级线程内核级线程。内核级线程又称内核支持的线程。

用户级线程内核级线程
线程的管理工作由谁来完成应用程序 通过线程库实现所有的 线程管理工作 ,包括线程切换线程管理工作 操作系统内核完成
线程切换是否需要 CPU 变态用户级线程切换 可以在 用户态下即可完成 ,无需操作系统干预线程调度、切换等工作都由内核负责,因此 内核级线程的切换 必然需要在 核心态 下才能完成。
OS 是否能意识到用户级线程的存在OS 内核意识不到用户级线程的存在
用户级线程就是从用户视角看能看到的线程
OS 会为每个内核级线程建立相应的 TCB(线程控制块)
通过TCB对线程进行管理
内核级线程就是从操作系统内核视角看能看到的线程
优点用户级线程的切换在用户空间即可完成,
不需要切换到核心态,线程管理的系统开销小,效率高
当一个线程被阻塞后,其他线程还可以继续执行,并发能力强
多线程可在多核处理机上并行执行
缺点当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高
因为进程是处理机调度的基本单位,同一进程的多个线程不可在多核处理机上并行运行
一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成
需要切换到核心态,因此线程管理的开销大,效率低,成本高

用户级线程可以在不支持内核级线程的操作系统上实现(✓)
解析:早期操作系统中,还没有内核级线程,进程是处理机分配的基本单位,而用户级线程是在线程库支持下实现的,如下图。
(来源:2019年408第23题)

在这里插入图片描述


2.4 多线程模型

在这里插入图片描述

  1. 多对一模型: 多个用户级线程 映射到 一个内核级线程,且一个进程只被分配一个内核级线程。
    优点:上文用户级线程的优点。
    缺点:上文用户级线程的缺点。
  2. 一对一模型: 一个用户级线程映射到 一个内核级线程,每个用户进程有与用户级线程同数量的内核级线程。
    优点:上文内核级线程的优点。
    缺点:上文内核级线程的缺点。
  3. 多对多模型: n 用户及线程映射到 m 个内核级线程(n >= m),每个用户进程对应 m 个内核级线程。
    克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

2.5 线程的状态与转换

在这里插入图片描述


2.6 线程的组织与控制

在这里插入图片描述


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

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

相关文章

C#【必备技能篇】DatagridView添加行时,设置行标题单元格的值为行数

文章目录1、DatagridView添加行的代码2、方法一:【每次添加行都重新刷新了全部的行数,不推荐】3、方法二:【只有一个DatagridView时,推荐此方法】4、方法三:【通用方法,多个DatagridView都有这个需求时&…

利用 Burp Suite 进行密码爆破

利用 Burp Suite 进行密码爆破1.Intruder 功能介绍2.攻击类型3.实战4.验证码爆破1.Intruder 功能介绍 使用 BP 工具的 Intruder 模块高度可配置,可以对目标网站进行密码爆破,一般被用于网站的安全渗透测试场景 BP 工具的 Intruder 模块包含几个功能标签…

解决2022.3.1版本中 IDEA中 XML文件屎黄色背景 的方法

问题:在idea打开mybatis的xml映射文件,出现大面积黄色背景提示 1:打开文件,点击设置 2:打开编辑器--> 检查--> SQL 3:受不了,我的是中文,我换成英文继续了 找到 No data sou…

CDH6.3.2 ORC文件格式 Spark引擎查询数组越界异常

组件版本: flink1.13.2 cdh6.3.2 hive2.1.1 问题描述: CDH6.3.2 ORC文件格式 Spark引擎查询数组越界异常 java.io.IOException: java.lang.ArrayIndexOutOfBoundsException: 7 ‘org.apache.orc.impl.ReaderImpl::ReaderImpl.java:385’, org.apache.hadoop.hive.ql.io.orc.Re…

解决OBS录屏模糊问题

相信大家在使用OBS过程中也会遇到录屏模糊的问题,网上有很多配置教程,尝试了视频比特率、提高OBS当中其他的硬件参数。 模糊是要分情况的,如果是静态情况下模糊,就是屏幕不动的时候录制的视频也很模糊,那就是视频的基…

linux中使用KubeSphere和k8s 部署springboot项目

1、创建项目----》按照做的项目名称建 创建一个项目 创建后,如图所示: 2、工作负载---》就是创建服务容器Prod第一步:创建一个工作负载服务-->基本信息第二步:容器组设置 设置容器端口,健康检查,环境…

基于Gentoo发行版本的Calculate Linux 23发布

导读Calculate Linux 是一个为在组织环境中快速部署而优化的 Linux 发行版。它以 Gentoo Linux 项目为基础,包括许多预配置的功能。 Calculate Linux 以五种方式发布。Calculate Linux Desktop(CLD)、Calculate Directory Server(…

【涵子来信python大全】——第二季——opencv第三篇-numpy和颜色通道解释

各位亲爱的读者,博主: 大家好,我是涵子。今天我们继续讲讲opencv,讲讲其中numpy的秘密。如果不清楚上一章的内容,请从链接或者主页回去先读一遍之前的文章,否则今天的内容很难理解。 【涵子来信&pyth…

人工智能ai写作系统,ai智能写作机器人

人工智能AI大数据深度:基于伪原创算法,采用神经网络算法,在超过1535000篇文章中进行自动学习、聚合算法进行人工智能的创建,内容语义不变,媒体阿里、腾讯、百度均于日前在百家号内容创作者盛典上推出人工智能创作支撑平…

Vue2 Vuex在大型项目中的应用

文章目录前言一、总体结构二、代码结构1. 文件层2. 一级功能模块3. 二级功能模块4. 总状态总结前言 参考去年参与的大型ERP项目, 我主要负责财务模块的前端部分. 这个项目有几百个前端页面(具体多少没算过), 状态管理结构应该是具有参考价值的. 一、总体结构 项目标准中约定仅…

CobaltStrike与Metasploit联动方法

文章目录CobaltStrike联动Metasploit方法一方法二Metasploit联动CobaltStrikeCobaltStrike联动Metasploit CobaltStrike (简称CS)及 MetaSploit (简称MSF)各有所长,CS更适合作为稳控平台,MSF更适用于与各类…

包体积优化·工具论·初识包体积优化

“ 【小木箱成长营】包体积优化系列文章: 包体积优化 实战论 怎么做包体积优化? 做好能晋升吗? 能涨多少钱? 包体积优化 方法论 揭开包体积优化神秘面纱 ”一、引言 Hello,我是小木箱,欢迎来到小木箱成长营系列教程,今天将…

预制菜开启春节之战,破局立新正在进行时

撰稿 | 火华 来源 | 贝多财经 对预制菜行业来说,2022年绝对是浓墨重彩的一年。 这条汇集了餐饮企业、专业预制菜企业、冷冻食品企业、农牧水产企业、生鲜电商企业的赛道,在乏善可陈的商业市场中野蛮生长一路高歌。 有调研数据显示,“自己做…

嵌入式linux-僵尸进程?

1.僵尸进程 1.1 僵尸进程的由来和概念 通常,子进程结束之后,需要父进程为子进程进行回收,俗称“收尸”,则回收子进程占用的一些内存资源,父进程通过调用wait()(或其变体 waitpid()、waitid()等&#xff0…

公共数据 | CnOpenData中国省际铁路通行时间数据

中国省际铁路通行时间数据 一、数据简介 本数据来自南京大学长江产业经济研究院《全国统一大市场下的省际铁路交通研究报告》的附录部分。中国的铁路(高铁)建设取得了辉煌成果。但受铁路时刻众多、历史数据不容易搜集整理的限制,学术与政策研…

Linux进程状态和优先级

我的另一篇有关进程概念的博客:Linux 进程概念 目录 一、操作系统进程状态 1.1 运行状态(R) 1.2 阻塞状态(S) 1.3 挂起状态(S) 二、Linux操作系统内核中的进程状态 2.1 进程状态种类 2.2 查看R和S进程状态 2.3 T和t状态 2.3.1 T状态 2.3.2 t状态…

python正则表达式与回溯绕过waf

1.正则表达式的背景 正则表达式的历史:美国的两个人类神经元研究者,使用特殊的符号描述。之后有一位科学家将这门技术引入了数学,将这门技术命名为正则表示式。 肯汤普森在编写UNIX系统时,将正则引入到了一个编辑器 绝大多数编…

GNN实战——KarateClub数据集

GNN:graph neural network 图神经网络,是⼀种连接模型,通过⽹络中节点之间的信息传递(message passing)的⽅式来获取图中的依存关系(dependence of graph),GNN通过从节点任意深度的邻居来更新该节点状态,这个状态能够表…

Linux网络编程 第四天

目录 学习目标 多路IO-poll 多路IO-epoll 进阶epoll 用实验验证LT和ET模式 epoll反应堆 学习目标 1 了解poll函数 2 熟练使用epoll多路IO模型 3 了解epoll ET/LT触发模式并实现 4 理解epoll边缘非阻塞模式并实现 5 了解epoll反应堆模型设计思想 6 能看懂epoll反应堆模型的…

《C++程序设计原理与实践》笔记 第10章 输入/输出流

在本章和下一章中,我们将介绍C标准库中用于处理来自各种源的输入和输出的功能:I/O流。本章关注基本模型:如何读写单个值,以及如何打开和读写整个文件。下一章将介绍具体细节。 10.1 输入和输出 如果没有数据,计算就毫…