第二章
2_1进程的基本概念
**并发:**多个线程同时竞争一个位置,竞争到的才可以执行,每一个时间段只有一个线程在执行。
**并行:**多个线程可以同时执行,每一个时间段,可以有多个线程同时执行。
作业(JOB) :作业是用户从控制界面向OS提交的一项完整工作的请求,由作业步序列组
作业可能是一个简单的程序命令,也可能是一个命令序列,即作业步序列
作业是作业说明,作业程序,作业数据三者的总和
**程序:**是一个在时间上严格有序的指令集合
进程(Process):
是程序的一次执行。
是可以和其它计算并行执行的计算。
是系统进行资源分配和调度的一个独立单位(也称最小单位)。
分为:系统进程、用户进程。系统进程高于用户进程
线程(Thread):
1、引入的目的是为了减少程序并发执行时所付出的时空开销
2、线程是进程中的一个实体,是被系统独立调度和分派的基本单位.多个线程之间可以并发执行。
进程与线程的区别:
一个程序至少有一个进程,一个进程至少有一个线程
1、调度:线程的划分尺度小于进程,使得多线程程序的并发性高。
2、拥有资源:进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
3、并发性:进程可以独立的执行但线程不能够独立运行,必须依存在应用程序中。
作业≥进程≥线程
**调度(Schedule):**系统是多任务的,所以会有很多的作业,一批作业按照某种算法从中选择出来一个,这个过程叫做调度。
进程与程序的联系和区别:(5个)
(1)动态性:进程是程序的一次执行,进程是动态的,程序是静态的。
(2)并发性:进程可以并发执行,而程序不可并发执行。
(3)独立性:进程是系统进行资源分配和调度的一个独立单位;程序则不是。(CPU的分配是以进程为单位)
(4)异步性:进程以各自独立的、不可预知的速度向前推进。
(5)结构特性:从结构上看,每个进程是由程序段、数据段和进程控制块三部分组成。
2_2进程的基本状态
**引入进程的目的:**为了描述系统中各并发活动而引入的,资源利用率及提高系统的吞吐量。
进程的三种基本状态:
1、就绪状态(Ready):存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到CPU,就立即可以运行。
2、运行状态(Running):正在运行的进程所处的状态。
3、阻塞状态(Wait / Blocked ):若一进程正在等待某一事件发生(如等待输入输出工作完成),这时,即使给它CPU,它也无法运行,称该进程处于等待状态、阻塞、 睡眠、封锁状态。
4、新状态。当一个新进程刚刚建立,还未将其放入就绪队列时的状态,称为新状态。
5、结束状态。当一个进程已经正常结束或异常结束,操作系统已将其从系统队列中移出,但是,尚未撤消。
进程的状态变迁图(三态图):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zd9AlHsl-1626180647826)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702145041295.png)]
进程的挂起
将挂起操作作用于某个进程时该进程将会被挂起。此时该进程处于静止的状态,
如果正在运行则暂停进入阻塞态,
如果处于就绪态,则该进程暂不接受调度
与挂起对应的时激活状态
进程的状态变迁图(五态图):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BfiClRqb-1626180647827)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702150612067.png)]
2_3进程的基本结构
**进程的组成:**程序段、数据段、进程控制块
进程控制块(PCB):存放进程的管理和控制信息的数据结构,是OS感知进程存在的唯一标志。
创建进程时为其建立PCB,伴随进程运行的全过程,直到进程撤销而收回。系统通过PCB实现对程序的控制。
说明:
1、PCB只能由OS访问,不允许用户进程访问。
2、一个系统中的PCB数目是一定的,它规定了该系统可同时拥有的进程的最大数目。
3、每个PCB是系统PCB表中的一个表目。
4、PCB的组织方式可采用链接方式和索引方式
5、PCB表常驻内存,存放于OS中专门开辟的PCB
进程控制块的内容:
(1)进程标识信息:
进程标识符用于标识一个进程,通常有外部标识符和内部标识符两种。
(2)说明信息(进程调度信息):
说明信息是与进程调度有关的状态信息 :进程状态、优先级、阻塞原因等。
(3)现场信息(处理器状态信息):
现场信息是用于保留进程存放在处理器中的各种信息,主要由处理器中的各个寄存器的内容组成。
(4)管理信息(进程控制信息):
管理信息包括进程资源、控制机制等一些进程执行所需要的信息:程序和数据的地址、进程同步和通信机制 、资源清单 、链接指针等。
(5)其他信息:如进程的家族联系等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8M5zOKhW-1626180647829)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702152501372.png)]
进程的组织:
1、链接方式:根据进程的状态将PCB分为多个队列,操作系统拥有指向各个队列的指针
2、索引方式:用的较少不做介绍。
链接方式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F04Qzy3t-1626180647831)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702152923091.png)]
2_4进程的控制
处理器管理概述:
处理器管理的主要任务就是对处理器进行合理有效的分配,又因为处理器的管理和运行都是以进程为单位,所以对处理器管理可以看作对进程的管理。
处理器管理的主要功能:
1.处理器调度:作业调度,进程调度
2.进程控制
3.进程同步与互斥
4.进程通信
**进程的控制:**包括进程的创建、进程的撤销、以及改变进程的状态。
如何实现进程的控制?
内核进行操作时,利用原语操作实现。
原语:指具有特定功能不可被中断的过程。主要实现操作系统的一些专门控制操作。
原子操作:一个操作中的所有动作要么全做,要么全不做,即不可分割的操作。
原语采用“关中断指令”和“开中断指令”实现
用于进程控制的原语:
(1)创建原语(create原语):用于为一个进程分配工作区和建立PCB,置该进程为就绪状态。
(2)撤消原语(Termination):用于一个进程工作完后,收回它的工作区和PCB。
(3)阻塞原语(blocked):用于进程在运行过程中发生等待事件时,把进程的状态改为阻塞状态,或者叫(挂起原语)。
(4)唤醒原语(blocked):用于当进程等待的事件结束时,把进程的状态改为就绪状态。
(注意:阻塞和唤醒应当成对出现)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JKpirwtc-1626180647834)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702160104811.png)]
2_5进程调度
从就绪队列中按照一定的算法选择一个进程把处理机分配给它运行,以实现进程并发地执行。
处理机调度三个层次:
低级调度(进程调度)
中级调度(内存/交换调度)
高级调度(作业/长程/宏观)
进程调度(低级调度):
它的主要功能是按照某种调度原则,实现对处在就绪队列里的进程进行调度。
作业调度与进程调度的关系:
作业调度是把输入缓存中的作业装入主存,此时系统为该作业创建一个进程,若有多个作业被装入主存储器,则同时存在多个进程。它们处于就绪状态 (万事具备,只欠处理器)
进程调度则是选择当前可占用处理器的进程,当进程的状态发生变化,他让出处理器,进程调度就再选另一个作业的进程去运行。
中极调度:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWvqdOgb-1626180647834)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702161829280.png)]
三种调度直接的关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1TvQlpQ-1626180647835)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702161915573.png)]
进程调度算法
1、进程调度的方式:
抢占式(剥夺方式)
非抢占式(非剥夺方式)
2、常用的调度算法:
(1)先来先服务算法(FCFS)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L238G1Q1-1626180647835)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702162446356.png)]
特点:① 原理简单,易于实现。
② 各进程平等竞争。
③ 由于各进程执行的时间不一样,从而导致相对不公平现象的产生。
④ 有利于长进程,不利于短进程。
⑤ 很少用来作为主调度策略,常常用作辅助调度算法使用
(2)时间片轮转法(RR)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQxloeQe-1626180647837)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702162619347.png)]
每个进程被分配一时间段,称作它的时间片,即该进程允许运行的时间。即使没运行完也要中断到后面(就绪态)排队。
特点: ① 时间片的长度选择比较困难
② 时间片长度选择的动态性
③ 该算法的扩充——多级反馈轮转法(法分级调度法)
抢占式算法:若进程未能在时间片完成,则被强行剥夺处理机使用,由时钟发出时钟中断通知时间片到
(3)最高优先权优先调度算法(优先数法,优先级法)
**基本思想:**为每个进程规定一个优先数,进程优先权高者优先调度;优先级别相同,则采用FCFS算法。
静态法:创建进程时确定,之后不再改变
动态法:是指在创建进程有一个初始优先权,在进程运行过程中再根据情况的变化调整优先权 。(动态优先权一般根据进程占有CPU时间的长短、进程等待CPU时间的长短等因素确定)
抢占、非抢占方式
(4)多级队列调度算法(分级反馈队列)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wb4Prnyx-1626180647838)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702163529580.png)]
**思想:**先照顾输入输出繁忙的过程;你要得越多、就必须等得越久(抢占式算法)
总结:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VBQ1sIqR-1626180647838)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702163707267.png)]
三层调度的联系与对比:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wX27EvFJ-1626180647838)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702163737979.png)]
进程调度需要完成的主要功能:
记录系统中所有进程的情况,如进程状态、优先数等
确定处理机的分配算法
完成处理机的分配
完成处理机的回收
三种调度方法比较:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQ9TOfLH-1626180647839)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702163906192.png)]
2_6作业调度
概念: 特权指令、管态、目态
特权指令:只能由os使用的指令
主要用于系统资源的分配和管理,包括改变系统的工作方式,检测用户的访问权限,修改虚拟存储器管理的段表,页表和完成任务的创建和切换等
管态:管理程序态
当cpu控制权移至os,硬件设为管态
目态:目标程序态
用户程序占用cpu,硬件设为目态
这是CPU的两种工作状态:当其处于管态时,可执行包括特权指令在内的一切机器指令;当其处于目态时,只能执行非特权指令,禁止使用特权指令
用户与操作系统的两种接口:
1、程序级:系统调用
2、操作命令级:命令接口
作业控制语言( 早期批处理操作 系统)
键盘命令(交互式操作系统,分时操作系统为代表)
图形用户接口(UNIX、WINDOWS)
访管指令:
是一条非特权指令,执行它时会产生一条软中断,促使cpu由目态转变为管态,用户程序只有通过访管指令,才能由目态转为管态,以达到调用系统调用命令的目的。
作业调度与管理
(1)作业与作业步
一个作业的各作业步之间是有联系的。通常,上一个作业步的输出是下一个作业步的输入。下一个作业步能否顺利执行,取决于上一个作业步的结果是否正确。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b15U1Rj0-1626180647840)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702184509382.png)]
(2)作业控制块(JCB)
作业提交时用于记录作业调度所需信息的数据结构,即作业说明。
概念:
后备作业与后备作业队列:
被系统接纳的作业,在未投入运行前,称后备作业。它们存放在辅存,由JCB连接在一起,形成后备作业队列。后备作业队列里的作业,不参与对处理机的竞争,但系统从它们里面挑选对象去参与对处理机的竞争。
作业调度:
按某种规则从后备作业队列里挑选作业进入内存,参与对处理机的竞争,称为作业调度,它由作业调度程序完成。所 采用的规则,称作业调度算法。
作业的生命期:从作业提交给系统,到作业运行完毕被撤消,是一个作业的生命期。在这期间,作业随着自己的推进,及环境变化,状态也在不断变化。
(3)作业调度(高级调度/宏观调度)
功能:按照某种调度原则,选取某些作业进入内存,为它们分配必要的资源,建立相应的进程,并当作业完成后做好一切的善后工作。
作业调度的作用:
1、选择作业:按照作业调度算法,从作业队列中选取作业进入内存
2、分配资源:调用存储管理和设备管理程序,为选中的作业分配内存和外设
3、建立作业的进程:为选中的作业建立的进程
4、作业善后处理:作业运行完毕时回收该资源占用的资源,输出必要的信息,撤销必要的信息,撤销该作业的JCB与相应的进程
作业状态
从作业提交到作业运行完毕的全过程
作业在整个活动期间有4种状态:
1、提交状态:用户正在将程序和数据输入计算机外存
2、后备状态:用户程序和数据已经进入外存待运行,又叫收容状态
3、执行状态:作业被作业调度程序选中送入内存,参与竞争处理机;(作业将生成若干进程)
4、完成状态:作业运行结束,系统回收其占用的所有资源,使其退出系统
作业调度算法:
1、先来先服务(FCFS)
2、短作业优先(Short Job First)
3.响应比最高者优先算法 (Highest Response Ratio Next)
响应比最高者优先算法 :响应比=(等待时间+计算时间)/计算时间
**周转时间:**从作业提交到作业完成的时间间隔(等待的时间+作业运行的时间)
周转时间=完成时间-到达时间
平均周转时间=周转时间/进程个数
**等待时间:**是从作业进入后被队列起,到被调度程序选中时的时间间隔。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZctnqNVW-1626180647840)(C:\Users\邵星宇\AppData\Roaming\Typora\typora-user-images\image-20210702192315358.png)]
实验2:Linux中进程的创建
1、fork()函数
1、头文件:
#include<sys/types.h> //提供类型pid_t的定义
#include<unistd.h> //提供fork()命令
2、系统调用格式:
pid=fork( )
参数定义:
int fork( )
3、返回值:
子进程返回0,父进程返回子进程的ID,出错返回-1
pid=0,表示当前为子进程。
pid>0,表示当前为父进程。
pid=-1,表示创建失败。
4、注意:创建子进程时产生一个新的PCB。
父子进程并发执行。
创建后父子的调度平等。
父子共享代码区,子复制父的数据区。
ps -l :获得进程详细状态
2、getpid()
头文件:
#include<sys/types.h>
#include<unistd.h>
系统调用格式:
pid=getpid()
返回值:调用进程的进程ID
3、getppid()
头文件:
#include<sys/types.h>
#include<unistd.h>
系统调用格式:
pid=getppid()
返回值:调用进程的父进程ID