408大纲中是这样要求的
二、进程管理
(一)进程与线程
1.进程概念
2.进程的状态与转换
3.进程控制
4.进程组织
5.进程通信
共享存储系统,消息传递系统,管道通信。
6.线程概念与多线程模型
1.进程的概念
打开任务管理器,这些便是进程,有你打开的,也有系统一直运行着的,比如系统中断
上概念:进程是程序的一次运行过程,它是由程序段,数据段,和进程控制块(PCB)组成的一个实体
程序段:对应程序的代码部分
数据段:对应程序执行时所需要的数据部分,包括数据,堆栈和工作区
进程控制块:记录了程序运行时所需要的全部信息,它是进程存在的唯一标识
这句话告诉我们,进程是一个运行过程,是动态的
进程控制块(PCB)是进程实体的重要组成部分,原来不能独立运行的程序或数据,通过PCB就可以成为一个可以独立运行的基本单位
在创建一个进程时,系统会为它建立一个PCB,当进程结束后PCB被系统回收到空闲队列
PCB主要包括4个方面的信息:
- 进程标识信息
- 进程调度信息
- CPU状态信息
- 进程控制信息(资源与所需信息)
2.进程的状态与转换
点开任务管理器详细信息,我们可以看到,这里便有两种状态运行和挂起
进程的基本状态
这几个状态又分别出现在什么时候,以及这些状态代表什么呢,让我们来看一遍“一个进程的一生”
(1)NULL-->创建态:首先世上本没有进程,只有一个NULL,所以我们需要创建一个进程
(2)创建态-->就绪态:在创建态的进程,充分吸取养分,获得了它所需要的除了CPU以外的相关资源后,将它加入就绪队列,这样它现在便是就绪态了
(3)就绪态-->运行态:处于就绪队列的”孩子“们此时需要等待被进程调度算法所选中,选中后分配到CPU上运行,此时变为运行态
(4)运行态-->终止态:在运行中由于自然结束或因为错误而陷入内核,就结束运行并做结束处理。(任务管理器的结束进程可以非自然结束)
(5)运行态-->就绪态:正在运行的进程由于系统分配的时间片用完了,或者有大哥插队(高优先级的),就回到就绪队列,等待下一次被唤醒
(6)运行态-->阻塞态:这里可以想想你用scanf(),cin()等I/O输入时,CPU的速度是很快的,它不会等你慢慢输入,便将该进程加入到阻塞队列,此时转为阻塞态
(7)阻塞态-->就绪态:这时你完成了你的输入,阻塞队列中的进程就会被唤醒,重新回到就绪队列中,等待再一次运行
但是这里面并没有挂起态对吧,先理解什么是挂起,以及为什么需要挂起 .
进程被挂起,意味着进程处于了静止状态,引入挂起主要是满足下列需求:
1.挂起某些进程检测资源使用情况,以调整系统负荷
2.操作系统的需要。操作系统可能需要挂起后台进程或一些服务进程,或者某些可能导致故障的进程。
3.对换需求:系统为了缓和内存和其他资源紧张的情况,将处于等待状态的进程挂起,并从内存换出到外存(内存管理会讲)
4.父进程的需求,父进程需要考察或者修改子进程
其实对比一下,无非是将
就绪态-->活到就绪和静止就绪(静止后无法被调度,需要先唤醒)
阻塞态-->活到阻塞和静止阻塞
而且想一下也很好理解,即当系统资源不足,就将他们挂起转换到相应状态,以节省系统资源或者满足上面讲的那些需求
3.进程控制
进程控制一般由操作系统内核中的原语来完成。
原语:指具有特定功能的,执行过程中不可被中断的指令集合。原语是一个不可分割的基本单位,它只能顺序执行,不能并发执行。
控制原语主要有
(1)进程创建:创建进程的目的是为一个程序建立一个进程控制块,并为它分配地址空间
(2)进程撤销:一个进程正常运行结束或者在运行过程中出现异常,回收空间,释放资源,撤销PCB
(3)进程阻塞(4)进程唤醒(5)进程的挂起(6)进程的激活
原语与系统调用的异同:原语与系统调用都是通过使用仿管指令来实现,区别在于:原语是由操作系统内核实现,而系统调用是由系统进程或者系统服务程序实现的,原语不允许中断,而系统调用允许中断
访管指令是一条非特权指令,功能是执行它就会产生一个软中断,促使*处理机由 目 态转为 管 态,进入操作系统,并处理该中断
4.进程组织
目的:更好的有效的管理数量众多的PCB
管理(组织)方式一共有3类
(1)线性表方式:仅适用于进程数量不多的系统
(2)链接方式:讲具有相同状态的进程PCB链接成队列,如就绪队列,阻塞队列,空闲队列
(3)索引方式:将具有相同状态的进程组织成一个索引表,如就绪索引表,阻塞索引表。。。
5.进程通信
(1)直接通信方式:适用于同一台计算机系统中的相互合作
(2)间接通信方式:通过中间实体完成通信
更细节的我们在进程同步中再讨论
6.线程概念与多线程模型
线程概念:线程是系统调度和CPU分配的最小单位,是进程的一个实体,除了拥有必不可少的资源外,不拥有其他资源
--线程的状态:
线程与进程类似拥有3态
(1)就绪态
(2)运行态
(3)阻塞态
需要注意的是线程没有创建态,挂起态,所以说线程不能离开进程而单独存在,当进程被挂起时,它的所有子线程都必须被对换出去(内存-->外存)
线程由可以分为3类
(1)用户级线程:指线程的所有管理和控制任务全部由应用程序完成,在用户空间内实现
优点就是 1)线程切换开销小,2)控制管理方便,3)健壮,实用性强
缺点就是:当谋个线程被阻塞,其所属进程中的所有线程都将被阻塞。而且,相同进程的多个线程并不能真正并行
(2)内核级线程:由操作系统直接支持实现,应用程序若需要使用线程,必须调用内核提供的接口
内核级线程方法的优点是:内核例程自身也是可以使用多线程的。
缺点:在把控制从一个线程传送到同一个进程内的另一个线程时,需要到内核的状态切换。
(3)混合式线程:上两种的混合
巩固题:
1.处理机为什么要区分核心态和用户态两种操作方式什么情况下进行两种方式的转换
ANSER:https://wenku.baidu.com/view/a70922272bf90242a8956bec0975f46527d3a743.html
2.系统调用与原语有何不同?他们是特权指令吗?
ANSER:特权指令和访管指令都是CPU指令系统中的指令,只是前者是一些只能在管态下执行的指令,后者是一条只能在目态下执行的指令。原语和系统调用命令都是操作系统中的功能程序,只是前者执行时不能被其他程序所打断,后者没有这个要求。操作系统中有些系统调用命令是以原语的形式出现的,例如创建进程就是一条原语式的系统调用命令。但并不是所有系统调用命令都是原语。因为如果那样的话,整个系统的并发性就不可能得到充分地发挥。
3.简述并行与并发的异同
ANSER:并发性,又称共行性,是指能处理多个同5261时性活动的能力;并行是指同时发生的两个并发事件,具有并发的含义,而并发4102则不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
4.在一个单CPU系统中,若有5个用户进程。假设当前系统为用户态,则处于就绪状态的用户进程最多有 __4__个,最少有 __0_个。
5.作业、进程和程序之间的联系:
ANSER:一个作业通常包括程序、数据和操作说明书3部分。每一个进程由PCB、程序和数据集合组成。这说明程序是进程的一部分,是进程的实体。因此,一个作业可划分为若干个进程来完成,而每一个进程有其实体————程序和数据集合。