目录
3.1 进程描述
进程:是系统中占用处理机及争夺其它系统资源的实体。用户程序必须在进程中运行。
进程的引入:
- 为了能实现同一作业的作业步并发。(例如:一边听音乐一边写文档)
- 在作业某作业步等I/O时,另一逻辑上可并发作业步能使用CPU运行。
- 引入进程后,逻辑上可并发的作业步在不同进程中运行。处理机能在进程间切换。
程序与进程的区别
- 相同的程序可以在两个以上的进程中运行(可以创建多个进程运行相同网页浏览器程序)
- 程序文件存放在磁盘中,运行时读入内存;而进程是在系统运行期间动态创建的,生命周期不会跨越系统运行周期。
- 程序只有程序语句及有初值数据变量和无初值变量;而进程有要处理的输入数据。
进程并发运行时共享资源的问题
并发运行的程序访问共享数据问题举例:
(count为共享变量初值=300)
存款进程:输入i=100 取款进程:输入i=300
N=count M=count
N=N+1 M=M-1
count=N count=M
如果按以下次序占处理机运行:
存款进程:N=count,N=N+100;
取款进程:M=count,M=M-200,count=M;
存款进程:count=N
结果:count=400(应为200,空分占用,独占式占用count)
一、进程定义
进程:是有独立功能的程序关于某个数据集合的一次运行活动。
特点:
- 动态性:可动态创建,结束,也可是精灵进程(从服务创建到结束一直都在)
- 并发性:可以被调度轮流占用处理机运行(多道批处理,不用一直占用)
- 独立性:有独立空间(一个进程不可调用另一个进程)
- 制约性:因访问共享数据或进程间同步而产生制约。(如上述例题,无制约而产生错误)
组成:用于管理进程的PCB表以及进程映像
- 执行程序及处理数据,及存放程序和数据的内存空间;
- 执行程序用的栈(用户栈和核心栈)(每一个进程都有)
- 进程描述管理信息及运行要用的其他系统资源(比如说打开的文件)
二、进程控制块PCB
进程映像:进程执行程序,数据,用户栈。进程映像是进程存放于内存的对象,如何存放在内存取决于存储管理机制。
进程控制块PCB:系统管理控制进程运行用的信息集合。(进程当前的状态、本身的特性、对资源的占用与调度信息)
PCB含有以下三大类信息:
- 进程标识信息。如本进程的标识;本进程的产生者标识(父进程标识);进程所属用户标识。
- 处理机状态信息保存区(栈式结构)。是指就是核心栈。保存进程进入操作系统内核的运行现场信息保护:①通用寄存器:数据、地址寄存器。②控制和状态寄存器:程序计数器(PC);处理机状态字(PS)
- 进程控制信息:①调度和状态信息,用于操作系统进程占用处理机的信息。(执行、运行、就绪、阻塞状态等等) ②进程间的通讯信息,为支持进程间的通讯相关消息队列,信息等,这些信息存在接收方的进程控制块中。③存储管理信息,包含有描述进程映像存储空间的数据结构。④进程所用资源,说明由进程打开,使用的系统资源,如打开的文件等。⑤链接信息,如就绪进程链等。
3.2 进程状态
3.2.1 进程的创建与结束等系统调用
进程创建的处理过程:
- 接收进程运行所需参数:如进程初始优先级,执行程序及输入参数等参数。
- 请求分配进程描述块PCB空间,得到一个内部数字进程标识。
- 用接收的参数初始化PCB表。
- 产生用于描述进程空间的数据结构,用执行程序文件初始化进程空间,建立程序段、数据段、用户栈段等。
- 用进程进行输入参数设置处理机现场保护区,造一个进程运行栈帧。
- 置好父进程等关系域。
- 将进程置成就绪状态。
- 被PCB表挂入就绪队列,等待时机被调度运行。
进程结束的处理过程:
- 将进程状态改为结束状态。
- 关闭所有打开文件、设备。
- 释放进程程序文件关联和其他资源。(子孙进程)
- 进行相关信息统计(进程占用CPU多长时间等等)
- 清理其相关进程的链接关系,如在Linux中,将该结束进程的所有子进程链到1号进程,作为1号进程的子进程,并通知父进程自己已结束。
- 释放进程映像空间。
- 释放进程控制块(PCB)
- 调进程调度与切换程序。
进程等待的处理过程:
如waitpid(pid,&staloc,opts)系统调用。进程发出此系统调用阻塞于内核等待pid所指进程运行结束。
3.2.2 进程状态及变化
运行状态(Running):进程正在处理机上运行。
就绪状态(Ready):进程获得了除处理机(CPU)之外的一切所需资源,一旦得到处理机即可运行。
阻塞或等待状态(Blocked):进程正在等待某一事件而暂停运行时,如等待某资源成为可用,等待输入/输出完成。
创建状态(New):进程正在被创建,还没到就绪状态之前的状态。
结束状态(Exit):进程正在从系统中消失时的状态,这是因为进程结束或其它原因流产所导致的。
状态变化图:
状态变化解释:
空 —> 创建:新进程被产生来执行程序
创建—>就绪:当进程被创建完成,初始化后,一切就绪准备运行时变到就绪态。
就绪—>运行:处于就绪状态的进程被进程调度程序选中后,在处理机上运行。
运行—>结束:当进程调用“进程结束”系统调用或者因错流产,当前运行进程会由操作系统做结束处理。
运行—>阻塞:当进程请求某资源且必须等待时,如,当进程请求操作系统服务,而操作系统得不到所需的资源,或进程请求输入/输出,操作系统已启动外设,但输入/输出尚未完成,或进程要与其他进程通讯,进程准备接收对方还未发出的信息时都会被阻塞。
阻塞—>就绪:当进程等待的事件发生时,进程从阻塞变成就绪。
运行—>就绪:进程在其运行过程中,分给它的处理机时间片用完而被剥夺CPU;在可剥夺的操作系统中,当有更高优先级的进程就绪,在进程准备从内核返回用户态运行时,进程调度程序可以将正运行进程从运行状态改变为就绪状态,让更高优先级的进程占用CPU。
每个就绪队列中放相同优先级的事件
3.2.3 进程挂起
进程在挂起(Suspend)状态意味着进程没有占用内存空间,处在挂起状态的进程映像在磁盘上(外存)
先把阻塞变为阻塞挂起,事件发生后再变为就绪挂起状态,最后变为就绪状态。
当cpu已准备但内存不够用时,就绪状态变为就绪挂起状态,内存够用时解挂。