操作系统之(一篇文章让你简单搞定:什么是进程和线程)

文章目录

      • 1.为什么引入进程
      • 2.进程究竟是什么?进程的定义和属性:
      • 3.进程的状态和转换
      • 4.什么是进程上下文
      • 5.进程的控制和管理
      • 6.为什么要引入线程
      • 7.线程的概念
      • 8.引入线程的好处
      • 9.进程和线程的区别

1.为什么引入进程

1、我们知道,最早出现的OS系统是单道批处理系统,它是顺序执行程序的,即一个一个地按先到先执行的顺序依次执行。
作业运行过程中如果发生I/O请求,高速的CPU便需要等待低速的I/O操作完成,导致CPU资源利用率和系统吞吐量降低。
在这里插入图片描述

2、 而后为了缓解这个矛盾,人们引入了多道批处理系统,该系统让程序宏观上并发执行,即在一道程序发起I/O请求时CPU不再选择等待I/O完全运行结束,而是当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序,用户既不能了解自己程序的运行情况,也不能控制计算机【因为万一有其中一道程序根本不会占用CPU资源,但是系统还是会给它分配了同等的资源,所以根本不能达到人工控制】
在这里插入图片描述
3、再然后就诞生了分时操作系统,把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时停止运行,把处理器让给其他作业使用,等待下一轮再继续运行;将程序分成一小片一小片的,这个进程执行一点,那个进程执行一点。虽然在内部进程的执行是一段一段的,但是CPU的速度很快的(速度都是纳秒级别的),所以我们是感受不到进程执行过程中的停顿。
在这里插入图片描述
解释:
1.上面的简单操作系统通过一些系统指令去操作程序,然而程序本身也是一组指令的集合,指令操作指令,这是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系。

2.多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征.这些特征都是在程序的执行过程中发生的,是动态的过程。

3.程序这个静态概念已不能如实反映程序并发执行过程的特征.**为了深刻描述程序动态执行过程的性质,**人们引入“进程(Process)”概念。

4.引入进程想要实现的目标是什么呢?

-资源对多个应用程序是可用的;
-物理处理器在多个应用程序间切换以保障所有程序都在执行中;
-处理器和IO设备能得到充分利用。

5.所有现代操作系统采用的方法都是依据对应于一个或多个进程存在的应用程序执行的一种模型。

2.进程究竟是什么?进程的定义和属性:

在这里插入图片描述

程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程

1、从理论角度看:进程是对正在运行的程序过程的抽象

怎么理解这句话呢

正在运行的程序过程的抽象

你想象一下你在打LOL程序的时候,电脑需要把程序抽象成进程进行管理,什么时候操作什么指令。

从实现角度看:是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。


2、上面的话也许有点难以理解,那是因为没了解它的狭义和广义定义:

狭义定义:进程就是一段程序执行过程

广义定义【官方定义】:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

仔细看就会发现,进程的目的是在于清晰地刻画动态系统的内在规律,进而才能有效管理和调度进入计算机系统主存储器运行的程序

进程的定义总结为一句话:一个执行中的程序的实例

进程提供给应用程序的关键抽象:
①进程是一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器
②进程是一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用存储器系统


3、进程的一般特征:

**动态性:**进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。【这个很关键】
**并发性:**任何进程都可以同其他进程一起并发执行
**独立性:**进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;【这个也很关键】
**异步性:**由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进


4、进程的结构特征:进程由进程控制块【PCB】、数据段和正文段三部分组成:

进程控制块(PCB):进程控制块包含了充分的信息,这样就可以中断一个进程的执行,并且在后来恢复执行进程时就好像进程未被中断过一样。PCB是进程存在的唯一标志,PCB与进程同生死。系统创建进程时会产生一个PCB,撤销进程时,PCB也自动消失。

数据段系统把进程的数据段又划分成三部分:
用户栈区(供用户程序使用的信息区);
用户数据区(包括用户工作数据和非可重入的程序段);
系统数据区(包括系统变量和对换信息)。

正文段能被若干进程共享,为了管理可共享的正文段,UNIX设置了一张正文表,每个正文段都占用一个表目,用来指出该正文段在内存和磁盘上的位置、段的大小以及调用该段的进程数等情况。

**注意:**多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;
但是执行过程中,程序不能发生改变。

可以这么说:进程 = 程序代码 + 相关数据 + 进程控制块


3.进程的状态和转换

进程的三种基本状态:

**1. 就绪状态:**进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
   **2. 运行状态:**进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以 执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
   **3. 阻塞状态:**由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生 前即使把处理机分配给该进程,也无法运行。
   在这里插入图片描述
进程状态的转换:
   
运行—>就绪:这是由资源调度引起的,主要是进程占用CPU的时间过长,人家嫌弃它就让它去等待一下
就绪—>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
运行—>阻塞:发生了I/O请求或等待某件事的发生,突然就有别的请求发生,导致运行变阻塞
阻塞—>就绪:进程所等待的事件发生,就进入就绪队列【队列是先进先出的表】

这里可以比喻成去超市排队买菜,【运行—>就绪】摊位只有一个窗口的时候一次性只能和一个人买菜,买菜时间太久了就一边去继续排队,排队的过程其实就是就绪状态,【就绪—>运行】轮到你了才可以再次购买,【运行—>阻塞】当你正在窗口前买菜的时候,突然有人插队了,直接推开你,【阻塞—>就绪】这时候你只能重新去排队,谁让插队那个人比较霸道。

以上4种情况可以相互正常转换,不是还有两种情况吗?

阻塞–>运行:即使给阻塞进程分配CPU,也无法执行,操作系统載进行调度时不会載阻塞队列进行挑选,其调度的选择对象为就绪队列:
就绪–>阻塞:因为就绪态根本就没有执行,何来进入阻塞态?

这里可以比喻成,你去超市买菜的时候,看到很多很多人在排队买菜,【阻塞–>运行】你想强制插队进去窗口直接买菜,但是排队的人就不同意了,同样,【就绪–>阻塞】你在排队买菜的时候快排到自己了会考虑强制插队吗?

在这里插入图片描述

4.什么是进程上下文

一开始小编也是很疑惑,什么是上下文,上面和下面的内容吗?其实不然,我们都知道万物必有因果,有上文才有下文,因此

操作系统中把进程运行的时的物理实体和运行的环境合称为进程上下文

△那么进程上下文我们知道其实是系统运行时提供的环境了,系统调度新进程占有处理器【可以暂时看做CPU】的时候,新老进程随之发生上下文切换,这个上下文是什么概念呢?老进程退出处理器的时候需要先保存其退出运行环境,然后退出,也就是说保存其退出进程上下文,然后退出处理器,这时候新进程要进来处理器了,为了适应处理器的环境,新进程需要先创建新的运行环境,也就是说先创建新的进程上下文。新老进程发生上下文切换,进程的运行被认为是在上下文中执行。


进程切换的步骤:
1.保存中断进程的处理器现场情况
2.修改被中断进程的进程控制块有关信息,相当于创建一个新的上下文环境
3.把被中断进程的PCB加入有关队列
4.选择下一个占有处理器运行的进程,这时候新进程要准备进来了,因为第二步已经为它创建好了环境
5.修改被选中进程的PCB的有关信息
6.设置被选中进程的地址空间,回复存储管理信息
7.根据被选中进程的上下文信息恢复处理器现场
8.处理器开始新的进程处理

怎么样,是不是觉得进程的切换很简单。

5.进程的控制和管理

上面说了进程从何而来,进程有什么定义,进程有什么状态的切换,进程切换的进程上下文是什么…说了这些,相信你一定很好奇,进程这么厉害,那么进程是如何控制,谁来控制的呢?

进程是由处理器控制,控制的内容包括:进程创建、进程撤销、进程阻塞和唤醒进程等,这种功能由操作系统中的原语实现

原语是什么呢?

原语是在管态下执行的,就是有管理员权限的时候执行,这个原语和我们所学的机器指令类似,其特点就是执行过程中不允许被中断,是一个不可分割的基本单位,执行的时候是顺序的不是并发的

因此进程有两种执行模式:

一种是:非特权态常称为用户态/目态,这是因为用户程序通常在该模式下运行

另一种是特权态可称为系统态/内核态/管态

既然知道了处理器可以进行进程的控制,现在,我们用掌握的知识创建一个进程吧

步骤:给新进程分配一个唯一的进程标识符->给进程分配空间->初始化进程控制块PCB->设置正确的连接->创建或扩充其他数据结构
在这里插入图片描述
创建成功后假设计算机里面有很多进程该如何切换呢?
步骤:在某一时刻,一个正在运行的进程被中断,操作系统指定另一个进程为运行态,并把控制权交给这个进程

这时候系统不需要一个进程该如何撤销呢?
在这里插入图片描述
进程的阻塞和唤醒:

1.引起进程阻塞和唤醒的事件

1)请求系统服务
2)启动某种操作
3)新数据尚未到达
4)无新工作可做

2.进程阻塞过程:
正在执行的进程,当发现上述某事件后,由于无法继续执行,于是进程便通过调用阻塞原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由执行改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞 (等待)队列。最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换,亦即, 保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU环境。
3.进程唤醒过程:
当被阻塞的进程所期待的事件出现时,如I/O完成或者其所期待的数据已经到达,则由有关进程(比如, 用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。
在这里插入图片描述

6.为什么要引入线程

前面所学的进程我们了解到,创建和切换进程的时候既有进程上下文环境初始化,又有进程退出处理器时要保存其进程结束的上下文环境,这样对系统的时间空间开销都很大,效率很低,这时候,围绕着效率低这件事情,我们引入线程的概念,以小的开销来提高进程内的并发程度

那么要提高效率,我们提供了一种基本思路:

  • 把进程的两项功能①独立分配资源②被调度分派执行进行分离
  • 进程作为系统资源分配和保护的独立单位,不需要频繁地切换和加载
  • 线程作为系统调度和分派执行的基本单位,会被频繁地调度和切换

7.线程的概念

线程是进程内的一个相对独立的可执行单元;
线程是操作系统中的基本调度单元,在线程中包含调度所需的信息。

一个进程至少有一个线程,可有多个线程。

线程并不拥有资源,而是共享和使用包含它的进程所拥有的所有资源。
线程在需要时也可创建其他线程。线程有自己的生命期,也有状态变化。

和进程一样,进程有进程控制块【PCB】里面存储了充分被调用的信息,因此,每一个线程都有一个线程控制块【thread】,用于保护自己私有信息,主要由四个基本部分组成:

一个唯一的线程标识符 、一组寄存器 、两个栈指针 、一个私有存储区
在这里插入图片描述
为什么线程又被叫做轻量级进程呢?

线程运行在进程的上下文中,并共享使用进程的资源和环境。

系统调度的基本单位是线程而不是进程,每当创建一个进程时,至少要同时为该进程创建一个线程。

线程状态有:运行、就绪、等待和终止,状态转换也类似于进程。

线程必须在某个进程内执行,一个进程可以包含一个线程或多个线程
在这里插入图片描述

8.引入线程的好处

1.两个线程的调度切换方便:线程是调度的基本单位,进程是资源的拥有单位

2.进程可以由一个或多个线程组成。在同一进程中,线程的切换不会引起进程的切换,不同进程间的线程切换则会引起进程切换。

3.共享同一地址空间资源:不同进程间的地址空间是相对独立的,而同一进程的各线程共享同一地址空间,可访问其隶属的进程资源。

4.线程通信方便:同一进程内的线程共享内存和文件,因此它们之间可以相互通信,无须调用内核。

5.占用资源少:线程除了必不可少的一点资料 (私有堆栈和程序计数器)外,自己不拥有系统资源.

9.进程和线程的区别

1.进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。以前进程既是资源分配也是调度的最小单位,后来为了更合理的使用cpu(实际上是cpu性能越来越好),才将资源分配和调度分开,就有了线程。线程是建立在进程的基础上的一次程序运行单位。

2.进程是应用程序的执行实例。比如说,当你双击的Microsoft Word的图标,你就开始运行的Word的进程。线程是执行进程中的路径。另外,一个过程可以包含多个线程。启动Word时,操作系统创建一个进程并开始执行该进程的主线程。由于一个进程可以由多个线程,线程可以被认为是“轻量级”的过程。【参考】

在这里插入图片描述

内核不知道线程的活动,但仍然管理线程的进程的活动。当线程调用系统调用时,整个进程阻塞,但对线程库来说,线程仍然是运行状态,即线程状态是与进程状态独立的。

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

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

相关文章

冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结

一、排序算法说明排序的定义&#xff1a;对一个无序的序列进行排序的过程。输入&#xff1a;n个数&#xff1a;a1,a2,a3,…,an。输出&#xff1a;n个数的排列:a1,a2,a3,…,an&#xff0c;使得a1<a2<a3<…<an。排序的稳定性&#xff1a;相同值的节点相对位置是否会发…

docker 挂载目录_Docker容器数据管理

在Docker容器内部创建的文件默认存储在可写的容器层&#xff0c;容易产生几个问题:当容器不存在时&#xff0c;数据文件不能持久化&#xff0c;同时这些数据文件不方便在容器之外被其他进程使用。当容器运行的时候容器可写层严重依赖宿主机&#xff0c;不能轻易移动这些数据文件…

IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReady

打开AS有时会报这个错&#xff0c;之前没怎么在意&#xff0c;因为完全没影响&#xff0c;但是看起来标红就很难受&#xff0c;总觉得认真有强迫症的程序员才是好的程序员&#xff0c;所以特意查了解决办法&#xff0c;也很简单&#xff0c;就点击Files----->Invalidate and…

java数组有跨类建立对象_必会的 55 个 Java 性能优化细节!一网打尽!

程序员的成长之路互联网/程序员/成长/职场 关注阅读本文大概需要 10 分钟。来源&#xff1a;https://yq.aliyun.com/articles/662001在 Java 程序中&#xff0c;性能问题的大部分原因并不在于 Java 语言&#xff0c;而是程序本身。养成良好的编码习惯非常重要&#xff0c;能够显…

android平板截屏方法,Android 各种截屏方法

1 应用内截屏(无SurfaceView, TextureView)boolean cacheEnable captureView.isDrawingCacheEnabled();captureView.setDrawingCacheEnabled(true);captureView.buildDrawingCache();Bitmap bitmap captureView.getDrawingCache();cache[0] Bitmap.createBitmap(bitmap);cap…

新手操作HTML

一、 首先得学会使用HTML5-API手册&#xff0c;因为HTML的属性有很多很多&#xff0c;如果将这些属性全部记下来的话得不偿失&#xff0c;需要花费大量的时间和经历&#xff0c;因此我们需要学会使用这个帮主文档才能全面而深入的了解HTML&#xff1b; 就像你去找对象一样&am…

nginx 判断手机端跳转_nginx基本功能和工作原理

nginx能做什么反向代理正向代理负载均衡HTTP服务器(包含动静分离)反向代理和正向代理1.正向代理简单的说,我是一个用户,我无法直接访问一个网站,但是我能访问一个代理服务器,这个代理服务器能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内…

Node.js教程-express框架

概述 Express是基于Node.js平台(建立在Node.js内置的http模块上)&#xff0c;快速、开放、极简的Web开发框架。 中文官网 http://www.expressjs.com.cn/。 Github地址&#xff1a;https://github.com/orgs/expressjs。 Express核心特性&#xff1a; 可设置中间件来响应 HTTP…

python猜数字游戏续_python3实现猜数字游戏

本文实例为大家分享了python3实现猜数字游戏的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 需求目标&#xff1a; 需求:猜数字游戏 1: 开始游戏产生一个1~100随机数 2: 用户输入&#xff0c;游戏根据输入值提示大或者小 3: 用户根据提示继续输入&#xff0c;知道猜…

HTML的script标签

在 HTML 页面中插入一段 JavaScript&#xff1a; 这句话可能大家一开始根本不了解JavaScript&#xff0c;是什么&#xff1f; 在我的了解中JavaScript并不是用java语言开发的&#xff0c;人家用的是c语言和另外一种语言的结合体&#xff0c;就像印度和印度尼西亚根本不是同一…

tesseract4.0.0 中文语言包_一份TensorFlow2.0中文教程

近两个月&#xff0c;网上已经出现了大量 TensorFlow 2 0 英文教程。在此文章中&#xff0c;本文为大家推荐一个持续更新的中文教程&#xff0c;以便大家学习。来源&#xff1a;机器之心今年 3 月份&#xff0c;谷歌在 Tensorflow Developer Summit 2019 大会上发布 TensorFlow…

HTML的块级元素和行级元素的标签列表

行内元素列表: <a>标签可定义锚点 <abbr>表示一个缩写形式 <acronym>定义只取首字母缩写 <b>字体加粗 <bdo>可覆盖默认的文本方向 <big>大号字体加粗 <br>换行符号 <cite>引用进行定义 <code>定义计算机代码文…

mysql select count 5万条数据很慢_mysql亿级数据数据库优化方案测试银行交易流水记录的查询...

点击上方△蓝字关注我们带你征服编程和泡妞两座大山对MySQL的性能和亿级数据的处理方法思考&#xff0c;以及分库分表到底该如何做&#xff0c;在什么场景比较合适&#xff1f;比如银行交易流水记录的查询限盐少许&#xff0c;上实际实验过程&#xff0c;以下是在实验的过程中做…

jvm垃圾回收机制_干货|JVM垃圾回收机制

前言不同于C程序员必须自己完成内存的分配、使用和释放&#xff0c;JAVA语言提供了垃圾回收机制(GC&#xff0c;Garbage Collection)&#xff0c;所以JAVA程序员仅需要负责分配和使用内存即可&#xff0c;而释放内存则由GC负责。这样程序员就从讨厌的内存管理的工作中脱身了。本…

HTML的列表说明

<ul></ul>无序列表&#xff08;Unordered List&#xff09; <ol></ol>有序列表 (Ordered List) <li> 标签定义列表项目。 <li> 标签可用在有序列表 (<ol>) 和无序列表 (<ul>) 中 两个常用的CSS列表属性 CSS3帮助文档 li…

计算机考试网络应用题一定要做到ie浏览器,网络远程教育统考单项练习:计算机应用基础之Internet应用部分(二)...

计算机考试的分数提高离不开日常的练习&#xff0c;下面&#xff0c;就做几道Internet应用部分的题目练习和巩固一下吧&#xff01;1、在IE9浏览器中按地址栏后的“停止”按钮&#xff0c;浏览器将会______。A.中断正在浏览的web页的连接B.关闭该web页的页面C.关闭浏览器窗口D.…

javascript实现图片轮播_第2章 第9节 JavaScript(四)

● 知道哪些ES6&#xff0c;ES7的语法参考回答&#xff1a;promise&#xff0c;await/async&#xff0c;let、const、块级作用域、箭头函数● promise和await/async的关系参考回答&#xff1a;都是异步编程的解决方案● 问了一段js代码&#xff0c;输出结果是什么● js的数据类…

HTML的HTTP 中 GET 与 POST 的区别

99% 的人都理解错了 HTTP 中 GET 与 POST 的区别&#xff08;转&#xff09;转自&#xff1a;WebTechGarden 微信公众号GET 和 POST 是 HTTP 请求的两种基本方法&#xff0c;要说它们的区别&#xff0c;接触过 WEB 开发的人都能说出一二。最直观的区别就是 GET 把参数包含在 UR…

利用计算机可产生随机数,一种利用计算机生成随机数的方法

一种利用计算机生成随机数的方法(2012-07-16 23:22:33)标签&#xff1a;随机数函数数值计数器程序运行杂谈这里介绍一种利用计算机生成随机数的方法&#xff0c;微机都有系统计数器记录自运行开始以来的脉冲数&#xff0c;这是个规律变化的数字&#xff0c;只用它是不能产生随机…

每天最重要的2小时

每天最重要的2小时 各位优秀的同学们&#xff0c;大家早上好&#xff01; 真的特别开心&#xff0c;我们还能继续相约YY空中平台一起学习。一个人走得快&#xff0c;一群人才能走得远。 我是来自一组的金鱼&#xff0c;就是那位拥有“七世记忆”的金鱼&#xff0c;原产地美…