热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

进程的描述与控制进程的状态和转换三态模型和五态模型

进程的引入由于早期未配置os的系统和单道批处理系统中程序是顺序执行的,然而这种方式浪费资源、系统资源利用率较低,从而出现了多道批处理系统。内存中可以同时装入多个程序,使其共享资源、并发执行

进程的引入

由于早期未配置os的系统和单道批处理系统中程序是顺序执行的,然而这种方式浪费资源、系统资源利用率较低,从而出现了多道批处理系统。内存中可以同时装入多个程序,使其共享资源、并发执行。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,于是引入了“进程”

什么是进程?

进程是程序的一次执行;
是一个程序及其数据在处理机上顺序执行时所发生的活动;
是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源进行分配和调度的一个独立单位。
进程(又称为进程实体)由三部分组成:PCB(进程控制块)、程序段和相关数据段

进程控制块PCB

1.PCB作为进程实体的一部分,记录操作系统所需的用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。我们认为,创建进程就是创建一个PCB,销毁进程也就是销毁进程的PCB。它的作用是使一个能在多道程序环境下不能独立运行的程序称为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。

PCB中主要包含以下四方面的信息:

1)进程标识符:用于唯一的标识某一个进程
2)处理机状态(又称处理机上下文):主要由处理机的各种寄存器中的内容组成,当进程被切换时,处理机状态信息被保存起来以便重新执行时可以继续执行
寄存器主要包括:
通用寄存器:用于暂存信息(大多数处理机有8~32个)
指令计数器:存放将要访问的下一条指令的地址
程序状态字PSW:是运算器的一部分,分两类:一种是体现当前指令结果如是否有进位、是否为零,另一种是存放控制信息如允许中断、跟踪标志等
用户栈指针:每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址,栈指针则是指向该栈的栈顶
3)进程调度信息:存储当前进程的进程状态、进程优先级、进程调度所需的其他信息(与调度算法有关的信息如进程等待CPU的时间、已执行的时间等)和事件(从执行状态到阻塞状态的原因)
4)进程控制信息:用于进程控制的信息,包括:程序和数据的地址、进程同步和通信机制、资源清单和链接指针(该进程所在队列中的下一个PCB的首地址)

2.PCB的组织方式:

在一个系统中常有数百乃至上千个PCB,为了对他们加以有效的管理,应使用适当方式将其组织起来,目前常用的有以下三种方式:
1)线性:所有的PCB都组织在一张线性表中,该表的首地址放在内存的一个专用区域,每次使用都遍历整张表,适合进程数目较少的操作系统
2)链接:将具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列,这样可以形成就绪队列、阻塞队列和空白队列等
3)索引:即系统根据进程状态不同,建立几张索引表

进程控制

进程控制是进程管理中最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的转换等功能。进程控制一般是由OS内核中的原语来实现的

1.操作系统内核:

OS分为若干层次,通常将一些与硬件紧密相关的模块(如中断处理程序等)、各种常用设备的驱动程序以及运行频率较高的模块(如时钟管理、进程调度和许多模块所公用的一些基本操作),这些都常驻于内存,被称为OS内核。
目的在于:
1)便于对这些软件进行保护,防止遭受其他应用程序的破坏
2)提高OS的运行效率
相应的,系统为保护OS本身或关键数据(如PCB等)免遭破坏,也将处理机的执行方式分为两种状态:系统态内核态
1)系统态:又称为管态或内核态。它具有较高的特权,能执行一切命令,访问所有的寄存器和存储区;
2)用户态:又称为目态。具有较低的执行权,只能执行一部分命令或访问一部分寄存器和存储区。一般情况下,应用程序都是用户态,防止破坏OS
不同的OS内核之间都有不同程度的差异,但都具有以下两大功能
1)支撑功能:提供给OS其他众多模块所需要的一些基本操作以支撑其工作,三中最基本的支撑功能是:中断处理、时钟管理和原语操作
2)资源管理功能:包括进程管理、存储器管理、设备管理

2.进程的创建:

1)进程的层次结构(UNIX中是树状层次,Windows下所有进程没有层次结构):
OS中允许一个进程创建另一个进程,我们将创建进程的进程叫做父进程,把被创建的进程叫做子进程,子进程还可以创建孙进程,于是就出现了一个进程组。
子进程在被创建后可以继承父进程所有的资源,例如父进程打开的文件、父继承所分配到的缓冲区等。当子进程被撤销时就将所有从父进程那获得的资源还回给父进程,然而当父进程被撤销时,所有子进程也同样被撤销,将资源归还给OS。为表示进程之间的家族关系,PCB中的进程标识符中设置有家族表项。
2)进程图:
为形象的描述一个进程组而引入进程图,一个树结构的图,根节点是这个进程家族的祖先
3)引起创建进程的事件:用户登录、作业调度、提供服务、应用请求
4)进程创建:当系统中出现了创建新进程的请求后,OS便调用进程创建原语Creat按以下步骤创建一个新的进程:
①申请空白PCB
②为新进程分配其所需的资源:包括各种物理和逻辑资源,如内存、文件、I/O设备和CPU时间等
③初始化进程控制块(PCB):初始化标识信息、处理机状态信息和处理机控制信息(进程状态和优先级等)
④如果进程就绪队列可以接纳新的该进程,就将进程加入队列

3.进程的终止:

1)引起进程终止的条件:
- 正常结束:任何系统中都有一个表示进程已经运行完成的指示,运行到该指令时,就产生一个中断通知OS该进程已运行完毕
- 异常结束:指进程运行中出现了无法解决的错误导致程序无法继续执行。产生的原因有:
越界错、保护错(权限问题或访问方式非法)、非法指令、特权指令错、运行超时、等待超时、算术运算错、I/O故障
- 外界干预:操作员或操作系统干预、父进程请求、父进程终止
2)进程终止的过程:
- 根据终止进程的进程标识符在PCB集合中检索出要终止的进程,并查看改进程的状态
- 若被终止的进程正在执行则立即终止该进程,并置调度标志为真,用于指示该进程被终止后应重新进行调度
- 若该进程有子进程或孙进程则全部终止,以免变成不可控制的进程
- 将被终止进程的资源全部归还给父进程或操作系统
- 将被终止的进程(PCB)从所在队列中移除

4.进程的阻塞(block)和唤醒(wakeup)

阻塞原语block和唤醒原语wakeup使用时是成对的
1)引起进程阻塞和唤醒的事件
- 向系统请求共享资源失败
- 等待某种操作的完成
- 新数据尚未到达
- 等待新任务的到达
2)进程阻塞过程
进程在发生以上情况时变调用阻塞原语(block)将自己阻塞,可见阻塞是一个主动过程。首先将进程状态从执行改为阻塞状态并加入到阻塞队列;如果系统中设置了原因不同的阻塞队列,则将该队列插入相应队列;最后转调度程序进行调度,此时分配新的PCB,并按照新的PCB中的处理机状态设置CPU环境
3)进程唤醒过程
当阻塞进程所期待的事件发生时,则由有关进程(比如提供数据的进程)调用唤醒原语wakeup将该时间唤醒。wakeup的执行过程是:将该进程由阻塞队列移出,将其状态改为就绪,再将其加入就绪队列

5.进程的挂起(suspend)与激活(active)

1)进程的挂起
- 检查被挂起的进程的状态
- 若是活动就绪状态,便将其改成静止就绪;若是活动阻塞状态,便将其改成静止阻塞
- 为方便用户或父进程考察该进程的运行情况,而把该进程的PCB复制到某指定的内存区域
- 若被挂起的进程正在执行,则转向调度程序重新调度
2)进程的激活
- 将进程从外存调入内存,检查该进程的现行状态
- 若是静止就绪,便将其改为活动就绪;若是静止阻塞,便将其改为静止就绪
- 假如采用的是抢占调度策略,则每当有静止就绪进程被激活而加入就绪队列时,便检查是否需要重新调度,即由调度程序将被激活的进程和当前进程两者优先级进行比较
- 若被激活进程优先级低,则不必重新调度;若当前进程优先级低,则把处理机分配给被激活的进程

进程的基本状态和转换

1.三种基本状态及转换:

三种基本状态:

1)就绪(Ready)状态:指进程已处于准备好运行的状态,及进程已经分配到需要的系统资源,只要在获得CPU就可以执行
2)执行(Running)状态:指进程获得了CPU正在执行,在单处理机系统中,最多只有一个进程处于该状态
3)阻塞(Block)状态:指正在执行的进程,在执行过程中发生了某时间(如:I/O请求、申请缓冲区失败等)
这里写图片描述

2.五种状态及转换:

为满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,通常在引入两种状态:创建状态终止状态
1)创建状态:
创建一个进程要经过以下几步:
- 首先进程申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息
- 然后为该进程分配运行时所必须的资源
- 最后把该进程转入就绪状态并插入就绪队列
引入创建状态是为了保证进程的调度必须是在创建工作完成之后
2)终止状态:
进程的终止状态有以下两步:
- 首先,等待操作系统做善后处理
- 最后将其PCB清零,并将PCB空间返还给系统
当一个进程达到了自然结束点或是出现了无法克服的错误,或是被操作系统终结,则进入终止状态。进入终止状态的进程以后不能再执行,但在操作系统中保存状态码和一些计时统计数据供其他进程收集
这里写图片描述

挂起操作和进程状态的转换

1.挂起操作的引入:

1)终端用户的需要:当终端用户在运行程序期间发现有可疑问题,希望暂停程序的运行以便研究其执行情况或做一定的修改
2)父进程请求
3)符合调节的需要
4)操作系统的需要:有时希望挂起某些进程以便检查运行中的资源使用情况或进行记账

2.分别使用挂起原语Suspend和激活原语Active对进程进行挂起或激活

三种基本状态下加入挂起和激活的进程状态图:

这里写图片描述

五种状态下加入挂起和激活的进程状态图:

这里写图片描述


推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • PHP引用的概念和用法详解
    本文详细介绍了PHP中引用的概念和用法。引用是指不同的变量名访问同一个变量内容,类似于Unix文件系统中的hardlink。文章从引用的定义、作用、语法和注意事项等方面进行了解释和示例。同时还介绍了对未定义变量使用引用的情况,以及在函数和new运算符中使用引用的注意事项。 ... [详细]
  • 本文介绍了在Linux中执行.sh脚本时出现/bin/sh^M: bad interpreter: No such file or directory异常的原因分析,并提供了两种解决方法:在Windows下进行编码格式转换,或在Linux中修改文件格式和执行权限。具体操作步骤也在摘要中给出。 ... [详细]
author-avatar
入骨红豆撕不撕
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有