当前位置:   article > 正文

二、进程的定义、组成、组成方式及特征_进程的组成部分必须包含

进程的组成部分必须包含

一、进程的定义

1.1 进程的定义

程序:就是一个指令序列

 早期的计算机只支持单道程序
  • 1

引入多道程序技术后: 系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)

为了方便操作系统管理,完成个程序并发执行,引入了进程、进程实体的概念

进程实体(进程映像):程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况下,我们把进程实实体体就简称为进程。例如,所谓创建进程,是创建进程实体中的PCB;而撤销进程就是撤销进程实体中的PCB.
注意:PCB是进程中存在的唯一标志。

从不同角度,进程可以有不同的定义,比较传统典型的定义有:
三者皆强调动态性

  • 进程是程序的一次执行过程。
  • 进程是一个程序及其数据再处理机上顺序执行时所发生的活动
  • 进程是具有独立功能的程序在数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位。

1.2 进程的组成

进程(进程实体) 由程序段、数据段、PCB 三部分组成
在这里插入图片描述

在这里插入图片描述

1.2.1 PCB 所管理的各种信息

在这里插入图片描述

1.3 进程的组织

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

注:进程的组成讨论的是一个进程内部由哪些部分构成的问题,而进程的组织讨论的是多个进程之间的组织方式问题
在这里插入图片描述

1.3.1 链接方式

在这里插入图片描述

1.3.2 索引方式

加粗样式

1.4 进程的特征

进程和程序是连个截然不同的概念,相比于程序,进程拥有以下特征:

在这里插入图片描述

1.5 小结

在这里插入图片描述

二、进程的状态和转换

2.1 进程的状态

2.1.1进程的三种基本状态

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

在这里插入图片描述

注意:注意:单核处理机环境下,每一时刻最多只有一个进程处于运行态。(双核环境下可以同时有两个进程处于运行态)

进程的另外两种状态:

在这里插入图片描述

2.2 进程状态的转换

在这里插入图片描述

注意:不能由阻塞态直接转换为运行态,也不能由就绪态直接转换为阻塞态(因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求)

2.3 小结

在这里插入图片描述

三、进程控制

在这里插入图片描述

3.1 什么是进程控制

进程控制的主要功能就是对系统中的所有进程实施有效的管理,它具有创建进程、撤销进程、实现进程状态转换的功能
简化理解:进程控制就是要实现进程的状态转换
在这里插入图片描述

3.2 如何实现进程控 制

3.2.1 什么是原语

原语实现进程控制。原语的特点就是执行期间不允许中断,只能一气呵成。
这种不可被中断的操作即原子操作
原语采用”关中断指令“和”开中断指令“实现
显然,关/开中断指令的权限非常大,必然是只允许在核心态下执行的特权指令

3.2.2 原语如何实现进程控制

进程控制会导致进程状态的切换,无论哪个原语,要做的无非就是三类事情:

  1. 更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
    • 所有的进程控制原语一定会修改进程的状态标志
    • 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
    • 某进程开始运行前必然要恢复其运行环境
  2. 将PCB插入合适的队列
  3. 分配/回收资源

3.2.3 原语实现对进程的操作

1.原语实现进程创建
在这里插入图片描述
2.原语实现进程的终止
在这里插入图片描述
3.原语实现进程的阻塞和唤醒
在这里插入图片描述
4.原语实现进程切换
在这里插入图片描述

3.3 小结

在这里插入图片描述

四、进程通信

在这里插入图片描述

4.1 什么是进程通信

进程通信就是指进程之间的信息交换
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
在这里插入图片描述

为保证安全,一个进程不能直接访问另一个进程的地址空间。
但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法。
在这里插入图片描述

4.2 进程通信的方式

4.2.1 共享存储

在这里插入图片描述

4.2.2 管道通信

在这里插入图片描述
1.管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
2.各进程要互斥地访问管道。
3.数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞
4.如果没写满,就不允许读。如果没读空,就不允许写
5.数据一旦被读出,就从管道中被拋弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。

4.2.3 消息传递

在这里插入图片描述

4.3 小结

在这里插入图片描述

五、什么是线程,为什么要引入线程

5.1线程的定义

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

5.2 带来的变化

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.3 线程的属性

在这里插入图片描述

5.4 线程的实现方式

5.4.1 用户级线程

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

5.4.2 内核级线程

内核级线程的管理工作由操作系统内核完成。
线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。可以这样理解,“内核级线程” 就是“从操.作系统内核视角看能看到的线程”
在这里插入图片描述
重点
操作系统只看见”内核级线程“,因此只有内核级线程才是处理机的分配单位

在这里插入图片描述

5.5 多线程模型

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

5.5.1 多对一模型

多对一模型: 多个用户及线程映射到一个内核级线程。每个用 户进程只对应一个内核级
线程。
**优点:**用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高
**缺点:**当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行
在这里插入图片描述

5.5.2 一对一模型

一对一模型:一个用户及线程映射到一个内核级线程。每个用户进程有与用户级线程同
数量的内核级线程。
**优点:**当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核
处理机上并行执行。
**缺点:**一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到
核心态,因此线程管理的成本高,开销大。

5.5.3 多对多模型

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

5.6 小结

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/699478
推荐阅读
相关标签
  

闽ICP备14008679号