进程与线程的理解

news2024/10/5 18:05:51

目录

一、进程

1、进程的简介:

2、进程的组成:

3、进程的状态

4、进程控制:

5、进程的创建:

6、进程的终止

7、进程的阻塞和唤醒

8、进程上下文切换

二、线程

1、线程:

2、线程的优缺点:

三、进程与线程 比较

1、简单理解

2、整体理解:


一、进程

1、进程的简介:

(1)进程是程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的基本单位;

(2)通俗讲:进程就是程序的一次执行过程。

(3)进程包括:正在运行的程序实体+所占用的所有资源(CPU+内存+网络资源等…)

2、进程的组成:

(1)进程控制块PCB:进程存在的唯一标识,是操作系统用来记录和刻画进程状态及环境信息的数据结构,也是操作系统掌握进程的唯一资料结构和管理进程的主要依据;

进程描述信息:会分配身份证号:PID(进程ID)+UID(用户ID)

3、进程的状态

  1. 运行态(running):进程占有 CPU 正在运行。
  2. 就绪态(ready):进程具备运行条件,等待系统分配 CPU 以便运行。
  3. 阻塞态 / 等待态(wait):进程不具备运行条件,正在等待某个事件的完成。

正常是3态

有些系统会新增2态:新建态和结束态

从上图可以发现,只有就绪态和运行态可以相互转换,其它的都是单向转换。

4、进程控制:

对系统中的所有进程实施有效的管理,实现进程状态转换功能

(1)包括:创建进程、阻塞进程、唤醒进程、终止进程等

(2)操作系统通过原语来实现进程控制;

(3)原语:是一种特殊的程序,执行具有原子性。

也就是说:程序的运行必须一气呵成,不可中断。

为什么进程控制过程要一气呵成?

答:如果进程状态转换的过程不能一气呵成,就有可能导致操作系统中的某些关键数据结构信息不统一,会影响操作系统进行别的管理工作。

5、进程的创建:

(1)操作系统初始启动时会创建承担系统资源分配和控制管理的一些系统进程,同时还会创建一个所有用户进程的祖先,其他用户进程是在应用程序运行时创建的。

(2)操作系统允许一个进程创建另一个进程,而且允许子进程继承父进程所拥有的资源,当子进程被终止时,其在父进程处继承的资源应当还给父进程。同时,终止父进程时同时也会终止其所有的子进程。

创建进程的过程,也就是创建原语包含的内容如下:

(1)在进程列表中增加一项,从 PCB 池中申请一个空闲的 PCB(PCB 是有限的,若申请失败则创建失败),为新进程分配一个唯一的进程标识符;

(2)为新进程分配地址空间,由进程管理程序确定加载至进程地址空间中的程序;

(3)为新进程分配各种资源;

(4)初始化 PCB,如进程标识符、CPU 初始状态等;

(5)把新进程的状态设置为就绪态,并将其移入就绪队列,等待被调度运行。

什么事件会触发进程的创建呢?有如下四种情况:

  • 用户登录:分时系统中,用户登录成功,系统会为其建立一个新的进程
  • 作业调度:多道批处理系统中,有新的作业放入内存中,会为其建立一个新的进程
  • 提供服务:用户向操作系统提出某些请求时,会新建一个进程处理该请求
  • 应用请求:由用户进程主动请求创建一个子进程

6、进程的终止

进程的终止也称为撤销,进程完成特定工作或出现严重错误后必须被终止。引起进程终止的事件有三种:

  • 正常结束:进程自己请求终止(exit 系统调用)
  • 异常结束:比如整数除 0,非法使用特权指令,然后被操作系统强行终止
  • 外界干预:Ctrl + Alt + delete 打开进程管理器,用户手动杀死进程

终止(撤销)进程的过程,也就是撤销原语包含的内容如下:

  • 从 PCB 集合中找到终止进程的 PCB;
  • 若进程处于运行态,则立即剥夺其 CPU,终止该进程的执行,然后将 CPU 资源分配给其他进程;
  • 如果其还有子进程,则应将其所有子进程终止;
  • 将该进程所拥有的全部资源都归还给父进程或操作系统;
  • 回收 PCB 并将其归还至 PCB 池。

7、进程的阻塞和唤醒

  1. 进程阻塞是指进程让出 CPU 资源转而等待一个事件,如等待资源、等待 I/O 操作完成等。
  2. 进程通常使用阻塞原语来阻塞自己,所以阻塞是进程的自主行为,是一个同步事件。
  3. 当等待事件完成时会产生一个中断,激活操作系统,在系统的控制下将被阻塞的进程唤醒,也就是唤醒原语。

进程的阻塞和唤醒显然是由进程切换来完成的。

进程的阻塞步骤,也就是阻塞原语的内容为:

  • 找到将要被阻塞的进程对应的 PCB;
  • 保护进程运行现场,将 PCB 状态信息设置为阻塞态,暂时停止进程运行;
  • 将该 PCB 插入相应事件的阻塞队列(等待队列)。

进程的唤醒步骤,也就是唤醒原语的内容为:

  • 在该事件的阻塞队列中找到相应进程的 PCB;
  • 将该 PCB 从阻塞队列中移出,并将进程的状态设置为就绪态;
  • 把该 PCB 插入到就绪队列中,等待被调度程序调度。

阻塞原语和唤醒原语的作用正好相反,阻塞原语使得进程从运行态转为阻塞态,而唤醒原语使得进程从阻塞态转为就绪态。如果某个进程使用阻塞原语来阻塞自己,那么他就必须使用唤醒原语来唤醒自己,因何事阻塞,就由何事唤醒,否则被阻塞的进程将永远处于阻塞态。因此,阻塞原语和唤醒原语是成对出现的

8、进程上下文切换

(1)所谓进程的上下文切换,就是说各个进程之间是共享 CPU 资源的,不可能一个进程永远占用着 CPU 资源,不同的时候进程之间需要切换,使得不同的进程被分配 CPU 资源,这个过程就是进程的上下文切换,一个进程切换到另一个进程运行

(2)因为进程是由内核进行管理和调度的,所以进程的上下文切换一定发生在内核态。

(3)进程上下文的切换也是一个原语操作,称为切换原语,其内容如下:

  • 首先,将进程 A 的运行环境信息存入 PCB,这个运行环境信息就是进程的上下文(Context)
  • 然后,将 PCB 移入相应的进程队列;
  • 选择另一个进程 B 进行执行,并更新其 PCB 中的状态为运行态
  • 当进程 A 被恢复运行的时候,根据它的 PCB 恢复进程 A 所需的运行环境
  1. 引起进程上下文切换的事件,也就是某个占用 CPU 资源运行的当前进程被赶出 CPU 的原因有如下:
  • 当前进程的时间片到
  • 有更高优先级的进程到达
  • 当前进程主动阻塞
  • 当前进程终止

二、线程

1、线程:

(1)线程是进程中一个实体,是被系统独立分配和调度的基本单位。

(2)线程是CPU可执行调度的最小单位。

(3)也就是说,进程本身并不能获取CPU时间,只有线程才可以。

(4)一个进程中可以有多个线程,它们共享这个进程的资源。

(5)引入线程前,进程是资源分配和独立调度的基本单位。

(6)引入线程后,进程是资源分配的基本单位,线程是独立调度的基本单位

(7)线程又称为迷你进程,但是它比进程更容易创建,也更容易撤销。

用严谨的语言描述来说就是:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,需要较大的时空开销,限制了并发程度的进一步提高。为减少进程切换的开销,把进程作为资源分配单位和调度单位这两个属性分开处理,即进程还是作为资源分配的基本单位,但是不作为调度的基本单位(很少调度或切换),把调度执行与切换的责任交给线程,即线程成为独立调度的基本单位,它比进程更容易(更快)创建,也更容易撤销

2、线程的优缺点:

(1)线程的特征和进程差不多,进程有的他基本都有,比如:

  • 线程具有就绪、阻塞、运行三种基本状态,同样具有状态之间的转换关系;
  • 线程间可以并发执行
  • 在多 CPU 环境下,各个线程也可以分派到不同的 CPU 上并行执行

(2)线程的优点:

  • 一个进程中可以同时存在多个线程,这些线程共享该进程的资源。进程间的通信必须请求操作系统服务(因为 CPU 要切换到内核态),开销很大。而同进程下的线程间通信,无需操作系统干预,开销更小。
  • 引入了线程,尽量减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能;

不过,需要注意的是:从属于不同进程的线程间通信,也必须请求操作系统服务。

  • 线程间的并发比进程的开销更小,系统并发性提升。

同样,需要注意的是:从属于不同进程的线程间切换,它是会导致进程切换的,所以开销也大。

(3)线程的缺点:

  • 当进程中的一个线程奔溃时,会导致其所属进程的所有线程奔溃。

举个例子,对于游戏的用户设计,就不应该使用多线程的方式,否则一个用户挂了,会影响其他同个进程的线程。

三、进程与线程 比较

1、简单理解

(1)进程:是一个应用程序被操作系统拉起来加载到内存之后从开始到执行结束的这样一个过程。

进程是程序(应用程序,可执行文件)的一次执行。

(2)线程:线程是进程中一个实体,是被系统独立分配和调度的基本单位。

线程是CPU可执行调度的最小单位。

也就是说,进程本身并不能获取CPU时间,只有线程才可以。

2、整体理解:

(1)线程参与操作系统的调度,参与CPU的竞争,得到分配的时间片,获得处理机(CPU)运行。而进程负责获取操作系统分配的资源,如内存。

(2)引入线程前,进程是资源分配和独立调度的基本单位。

(3)引入线程后,进程是资源分配的基本单位,线程是独立调度的基本单位。

总结:

操作系统的设计,从进程和线程的角度来说,可以归结为三点:

  • 以多进程形式,允许多个任务同时运行;
  • 以多线程形式,允许单个任务分成不同的部分运行;
  • 提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

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

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

相关文章

火山引擎 DataLeap:3 步打造“指标管理”体系,幸福里数据中心是这么做的

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 一家企业,为什么要搭建指标体系? 一句话总结来说,全面、合理的指标体系可以帮助企业统一目标,将业务环节量化&#…

1073. 负二进制数相加(leetcode,模拟,数学分析)-------------------c++实现

1073. 负二进制数相加(leetcode,模拟,数学分析)-------------------c实现 题目表述 给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。 数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有…

Kubernetes1.26.3 高可用集群

Kubernetes1.26.3 高可用集群 0、服务器信息 服务器为腾讯云服务器(按需计费,按流量计费,并且将IP转换为弹性IP,使用结束可关机仅收取硬盘等固定资源费用) 服务器名称IP描述组件信息Kubernetes1124.223.218.159maste…

Matlab如何调用外部函数/工具包,如何将新函数加到默认函数库中

自从开始制作、分享工具包,我被问到最多的一个问题是: “XXX工具包怎么用?” 而我给出的回答通常是: “放在你代码文件夹,当函数调用。” 什么意思呢? 方法1 比如在名为“1”的文件夹中放着我们想要运…

TreeSet源码分析

概述 TreeSet ,基于 TreeSet 的 Set 实现类。在业务中,如果我们有排重 排序的需求,一般会考虑使用 TreeSet #TreeSet的继承关系 TreeSet的内部属性 m 的 key ,存储 HashSet 的每个 key 。 map 的 value ,因为 TreeSe…

DJ5-3 多路访问链路和协议

目录 一、网络链路 二、广播信道要解决问题 三、多路访问协议 1、基本介绍 2、多路访问协议的类型(3) 四、信道划分协议 1、时分多路访问 TDMA 2、频分多路访问 FDMA 3、码分多路访问 CDMA(略) 五、随机访问协议 1、纯…

基于AD96808 FMC 模块,支持8 路14-bit、500MSPS/1GSPS/1.25GSPSADC 采集功能

板卡概述 FMC-XM148 是一款基于VITA57.4 标准的JESD204B 接口FMC 子卡模块,该模块可以实现8 路14-bit、500MSPS/1GSPS/1.25GSPSADC 采集功能。该板卡ADC 器件采用ADI 公司的AD9680 芯片,全功率-3dB 模拟输入带宽可达2GHz。该ADC 与FPGA 的主机接口通过16 通道的高速…

ThingsBoard自定义分发节点duplicate to related

------------------------------------内容仅博主所有,订阅者请勿泄露,感谢--------------------- 1、概述 大家好,我又更新干货了,还是那句话,我绝不像某些博主“拿我格子衫”分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享Th…

高端制造业国产化是未来高质量发展的必经之路

在当前全球经济的大背景下,高端制造业已成为各国竞争的焦点。中国作为世界第二大经济体,也在高端制造业领域发挥着越来越重要的作用。然而,我们必须清醒地认识到,目前我国高端制造业的发展还面临着一些困难和挑战,其中…

国产高性能DSP音频处理芯片的工作原理以及应用领域

DSP芯片是数字信号处理器的简称,它是一种专门用于数字信号处理的微处理器,它可以对数字信号进行高速运算和处理。DSP是一类嵌入式通用可编程微处理器,主要用于实现对信号的采集、识别、变换、增强、控制等算法处理,是各类嵌入式系…

ChatGPT 高效对话-学习使用提示语Prompts​

我们整理了一些可以帮助你学习如何使用ChatGPT的资源,包括吴恩达教授最新推出的官方ChatGPT提示词工程师课程的中文B站视频资源,一些插件、使用ChatGPT的标准范式等。 我们将这些所有的相关网址收录到 webhub123 ChatGPT 高效对话-学习使用提示语Promp…

【LeetCode】326. 3 的幂

326. 3 的幂&#xff08;简单&#xff09; 方法一&#xff1a;试除法 思路 我们可以先进行特殊点判断&#xff0c;n < 0 的数都不可能是 3 的幂次方。接着&#xff0c;当 n > 0 且 n 能被 3 整除 时&#xff0c;我们对其整除 3 &#xff0c;直到该条件不满足&#xff…

MyBatis之缓存机制

缓存即为存在内存中的临时数据.将用户经常查询的数据存放在缓存(内存)中,用户去查询数据就不用去每次去数据库中查询,而是去缓存中查询,从而提高了查询的效率,解决了高并发系统的性能问题.MyBatis提供了两种缓存机制&#xff1a;一级缓存&#xff08;本地&#xff09;和二级缓存…

thinkphp6 消息队列think-queue(完整版)

1.安装队列依赖 如果是在Linux上&#xff0c;进入thinkphp项目的think文件所在目录&#xff0c;执行安装命令 composer require topthink/think-queue 2.修改queue的配置文件&#xff0c;文件位置config/queue.php(安装成功后自动生成) <?php return [default >…

Python实现ACO蚁群优化算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

Layui layer 弹出层的使用【笔记】

Layui layer 弹出层的使用 首先&#xff0c;为了方便直接通过在线cdn引入对应的css和js <!-- 引入 layui.css --> <link href"//unpkg.com/layui2.8.0/dist/css/layui.css" rel"stylesheet"> <!-- 引入 layui.js --> <script src&…

来自非985211的普通本科的Android面试题分享【网络安全】

文中附有详细的面试真题目&#xff0c;文末有我当时刷的面试真题还有一些对我帮助良多的复习资料&#xff0c;特别有用&#xff0c;希望也可以帮大家顺利上岸&#xff0c;顺便攒攒人品&#xff01; 个人的基本情况 本人出生在一个普通家庭&#xff0c;自身学历很一般&#xff…

现在的00后,真是卷死了呀,辞职信已经写好了·····

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;三月份春招我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

【taro react】---- 解决开发环境微信小程序由于主包体积过大不能预览问题

1. 开发环境代码包大小 注意:可以看到此时主包加分包将近 5MB,上传预览将会超出限制!!! 2. 预览结果 报错:代码包大小超过限制,主包资源近3MB,限制最大2MB!!! 3. 解决办法 使用webpack的压缩插件,在开发环境编译的时候进行压缩;进行分包处理,同时依赖也进行分包处…

冲刺618:新品变爆品,品牌如何提炼差异化卖点?

纵观2023年品牌生态&#xff0c;大牌强势、新锐崛起。618大促将至&#xff0c;当前市场营销内容同质化严重&#xff0c;如何占领用户心智&#xff0c;成为品牌营销的“考题”之一。千瓜&#xff5c;谦果营销 结合小红书品牌推广实操经验&#xff0c;沉淀总结品牌差异化卖点提炼…