操作系统学习笔记------进程描述与进程状态变化

2019-07-14 10:57发布

进程的定义:     是有独立功能的程序关于某个数据集合的一次运行活动。是系统中占用处理机及争夺系统资源的条件。 特点:        动态性:可以动态创建、结束、也可以是精灵进程(从系统运行到系统结束一直存在的进程,一般是系统进行)。与程序的区别也在此处,程序是静态的,一直存放在硬盘中的,只有在运行的时候才会调用内存,程序可以是多个进程,如打开多个浏览器就是一个程序的多个进程的表现。        并发性:可以被调度轮流占用处理机运行。        独立性:有独立的空间。        制约其:因访问共享数据或进行间同步而产生制约。  组成:用于管理进程的PCB以及进程映像。              执行程序及处理数据,及存放程序和数据的内存空间;              执行程序用的栈(用户栈及核心栈),操作系统内核运行所涉及到的程序都是放在核心栈内,所以当一个进程因为中断或者异常进入核心态的时候,也就是进入内核运行的时候,用到了核心栈;             进行描述管理信息(进程控制块)及运行要用到的其他的系统资源。 进程控制块PCB:            进程映像:进行执行程序,数据,用户栈。进程映像是进程存放于内存的对象,如何存放在内存取决于存储管理机制。            进程控制块PCB:系统管理控制进程运行用的信息集合。            PCB主要包含以下三大类信息:                          进程标识信息。如本进程的标识;本进程的产生者标识(父进程标识);进程所属用户标识。                          处理机状态信息保存区(栈式结构)。实质就是核心栈。保存进程进入操作系统内核的运行现场信息,比如:                                        通用寄存器:数据、地址寄存器                                        控制和状态寄存器:如程序计数器(PC)                                        处理机状态字(PS)×                                      如果出现中断或者异常,则进程的现场就会保存到核心栈中去。                       进程控制信息。就是进程控制管理的信息,比如说:                                      调度和状态信息,用于操作系统调度进程和处理机的信息。比如进程的优先级呀,运行状态、就绪状态、阻塞状态等。                                      进程间通讯信息,为支持进程间的通讯相关的消息队列,消息等,这些信息存在接收方的进程块中。                                      存储管理信息,包含有描述进程映像存储空间的数据结构。                                      进程所用资源,说明由进程打开,使用的系统资源,如打开的文件等。                                       连接信息,如就绪进程链等。 进程控制块PCB的组织方式                 1)线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况。                2)索引表方式:该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等。               3)链接表方式:系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等 进程状态:           三个主要状态,一个运行状态、阻塞状态、就绪状态。           进程的创建于结束等系统调用(操作系统内核提供给高层应用的处理) 进程创建”这个系统调用的处理过程:     1)接受进程运行所需参数:如进程初始优先级,执行程序及输入参数等参数。     2)请求分配进程描述块PCB空间,得到一个内部数字进程标识,也就是进程号。     3)用接收的参数初始化PCB表。     4)产生用于描述进程空间的数据结构,用执行程序文件初始化进程空间,建立程序段,数据段、用户栈段等。     5)用进程运行输入参数设置处理机现场保护区,造一个进程运行的栈帧。     6)置好父进程等关系域。     7)将进程置成就绪状态。只有就绪状态的进程才可能被调度占用处立即运行。     8)将PCB表挂入就绪队列,等待时机被调度运行。 “进程结束”这个系统调用的处理过程:(是进程创建的逆过程)     1) 将进程状态改到结束状态。     2)关闭所有打开文件、设备。     3)释放进程程序文件关联和其他资源。如何内存没有共享,则全部释放,如果被多个进程共享,则如果仍有其他进程使用该内存,则没必要释放。     4)进行相关信息的统计。如进程占用处理机多长时间等等。     5)清理相关进程的链接关系,如在linux中,将该结束进程的所有子进程链到1号进程,作为1号进程的子进程,并通知父进程自己已结束。     6)释放进程映像共建。     7)释放进程控制块(PCB)     8)调度程序调进程与切换程序。 “进程等待”系统调用:     如waitpid(pid, &statloc, opts)系统调用。如进程B需要进程A的输出作为输入,则进程B必须等待进程A结束后才可以进行。进程发出此系统调用阻塞与内核等待pid所指进程运行结束。
进程的状态及变化:     最主要的三个状态:运行状态、就绪状态、阻塞状态     运行状态(Running):进程正在处理机上运行。     就绪状态(Ready):进程获得了除了处理机之外的一切所需资源,一旦得到处立即即可运行。     阻塞或等待状态(Blocked):进程正在等待某一时间而暂停运行时,如等待某资源成语可用,等待打印机,等待输入/输出完成。     创建状态(New):进程正在被创建,还没到就绪状态之前的状态。     结束状态(Exit):进程正在从系统中小时时的状态,这是因为进程结束或其他原因流产所导致。 状态变化解释:     空--->创建:新进程被产生来执行程序。     创建-->就绪:当进程被创建完成,初始化后,一切就绪准备运行,就是就绪状态。     就绪-->运行:处于就绪状态的进程被进程调度程序选中后,在处立即上运行。     运行-->结束:当进程调用“进程结束”系统调用或者因错流产(a/0或者加减乘除导致数值溢出),当前运行进程会由操作系统作结束处理。     运行-->阻塞:当进程请求某资源且必须等待时,如,当进程请求操作系统服务,而操作系统得不到所需的资源,或进程请求输入/输出,操作系统已启动外设,但输入/输出尚未完成,或进程要与其他进程通讯,进程准备接收对方还未发出的消息时都会被阻塞。     阻塞-->就绪:当进程等待的时间发生时,进程从阻塞变到就绪。     运行-->就绪:进程在其运行过程中,分给它的处理机时间片用完而被剥夺CPU;在可剥夺的操作系统中,当有更高优先级的进程就绪,在进程准备从内核返回用户态运行时进程调度程序可以将正运行进程从运行状态变为就绪状态,让更高优先级进程占用CPU。
进程挂起的状态: 进程在挂起(Suspend)状态意味着进程没有占用内存空间,处在挂起状态的进程映像在磁盘上。
包含进程挂起状态转换图 如果一个进程创建后,马上分配内存,就进入了就绪状态,如果不马上分配内存,就进入了就绪挂起状态。 如果一个进程从运行的状态因为等事件变成阻塞状态,我可以把它占用的内存全部释放掉,那么就变成了阻塞挂起状态。 阻塞挂起的进程,如果时间发生了,如等消息,消息到来,等i/o,io有了,那么就成阻塞挂起变成就绪挂起,就绪挂起一旦分配内存,就是解挂。 在现在的操作系统中,因为我们采用到虚存(虚拟内存)的技术,所以使用到的内存很少很少,所以挂起的状态在现在的操作系统中基本不存在。