首页 > 系统相关 >OS(二):进程管理的基本概念

OS(二):进程管理的基本概念

时间:2023-08-21 20:55:33浏览次数:39  
标签:状态 执行 调度 PCB 进程 就绪 OS 基本概念

  进程是资源分配和独立运行的基本单位。

  引入进程的目的在于,使多道程序并发执行,提高系统的资源利用率和吞吐量;而引入线程,是为了减少程序在并发时的时空开销,提高系统的并发性,线程相对于进程,大大降低了创建、撤销和切换可执行实体的成本和难度。

1、进程的定义与特征

1.1、定义

  进程是程序的一次执行;

  进程是一个程序及其数据在处理机上顺序执行时所发生的活动;

  进程是程序在数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位。

  进程是一个可拥有资源的独立单位;进程是一个可独立调度和分派的基本单位。OS 提供了 创建进程、撤销进程、进程切换等进程操作,因此,进程才能成为一个独立运行的基本单位。

1.2、特征

1.2.1、结构特征

  为了使程序能独立运行,为每一个程序配置进程控制块,即PCB(Process Control Block)。

 0

  进程实体由 程序段、数据段 和 PCB 三部分构成。

1.1、控制块(PCB,Process Control Block)

  OS根据PCB来对进程进行控制和管理,进程的创建和撤销都是根据PCB来进行的;

  存储:程序计数器、进程状态、CPU暂存器、存储器管理、输入输出状态等信息;

  PCB在新建进程时创建,并常驻内存,是进程实体的一部分,也是该进程的唯一标识。

1.2、数据段

  在数据区域(data region),存储(全局和静态)变量和进程执行期间使用的动态分配的内存,原始数据;

  在堆栈(stack region)区域,存储活动过程调用的指令和本地变量,中间数据。

1.3、程序段

  存放在文本区域(text region),存储处理器执行的代码,二进制格式;程序段可以被多个进程共享。

1.2.2、动态性

  动态性是进程最基本的特征。

  进程的实质是进程实体的一次执行过程,表现为:由创建而产生、由调度而执行、由撤销而消亡。

1.2.3、并发性

  多个进程同时存在于内存中,可以同时运行;进程实体能和其它进程实体并发执行;程序的并发执行,是由PCB控制的。

1.2.4、独立性

  进程实体是能独立分配资源;进程实体能独立接受调度;进程实体能独立运行;程序的独立执行,也是由PCB控制的。

1.2.5、异步性

  进程实体按异步方式运行;进程与进程之间相互独立、互不干扰、以不可预知的速度运行。

2、进程的状态

2.1、基本状态

  进程三种基本状态:就绪(Ready)、执行(Running)、阻塞(Blocked)。

2.1.1、就绪状态

  进程已分配到除CPU外的所有必要资源后,再获取CPU便可立即执行,此时进程的状态称为就绪状态。

  将多个就绪状态的进程排成一个队列,此队列被称为就绪队列。

2.2.2、执行状态

  进程获得CPU,正在执行,此时进程的状态称为执行状态。

2.2.3、阻塞状态

  正在执行的进程由于发生某种时间而暂时无法继续执行,放弃处理机而处于暂停状态,进程的执行受到阻塞,把这种暂停状态称为阻塞状态。

  发生阻塞的典型事件:请求I/O、申请缓冲空间、进程同步。

2.2.4、状态转换

  

  就绪状态的进程,调度程序为之分配处理机,进程执行,进程由就绪状态变为执行状态。

  执行状态的进程,分配给他的时间片用完而被暂停执行,进程由执行状态变为就绪状态。

  执行状态的进程,因某些操作使进程执行受阻,无法继续执行,进程由执行状态变为阻塞状态。

2.2、挂起状态

2.2.1、概念

  使正在执行的进程暂停执行;

  若此时用户进程正处于就绪状态而未执行, 则该进程暂不接受调度, 以便用户研究其执行情况或对程序进行修改;

  此时,我们把这种静止状态称为挂起状态。

2.2.2、挂起的原因

  终端用户的请求:发现可疑问题,希望进程静止下来

  父进程请求:父进程希望挂起子进程,以便协调各子进程间的活动

  负荷调节的需要:负荷较重,挂起不重要的进程

  操作系统的需要:OS检查资源使用情况,或进行记账

2.2.3、进程状态的转换

 

  

·活动就绪→静止就绪

  进程处于未被挂起的就绪状态时,称为活动就绪状态,表示为Readya。

  未被挂起的就绪状态(Readya)--(Suspend原语)-->静止就绪状态(Readys),Readys状态不会被调度

·活动阻塞→静止阻塞

  进程处于未被挂起的阻塞状态时,称为活动阻塞状态,表示为Blockeda。

  未被挂起的阻塞状态(Blockeda)--(Suspend原语)-->静止阻塞状态(Blockeds),Blockeds状态不会被调度

·静止就绪→活动就绪

  静止就绪状态(Readys)--(Active原语)-->活动就绪状态(Readya),Readya状态可以被调度

·静止阻塞→活动阻塞

  静止阻塞状态(Blockeds)--(Active原语)-->活动阻塞状态(Blockeda),Blockeda状态可以被调度。

2.3、创建和终止状态

2.3.1、创建状态

1.1、进程创建的步骤

  1、为一个新进程创建PCB,并填写必要的管理信息;

  2、把该进程转入就绪状态并插入就绪队列之中。

1.2、创建状态的概念

  新进程被创建时,系统已为其分配了PCB,填写进程标识,此时进程拥有自己的PCB,但进程尚未进入主存(未分配),进程不能被调度执行,当前进程所处的状态为创建状态。

1.3、创建状态的作用

  保证进程的调度必须在创建工作完成后进行;

  确保对进程控制块(PCB)操作的完整性;

  增加了管理的灵活性,OS可以根据系统性能或主存容量的限制推创建状态进程的提交;

2.3.2、终止状态

2.1、进程终止步骤

  1、OS将该进程标记为终止

  2、资源释放和回收

2.2、终止状态

  一个进程正常执行结束、异常执行结束或外界干预使进程被终结,当前进程所处的状态为终止状态。

  终止状态的进程不能再执行,但会保留一个记录(保存状态码和一些计时统计数据),供其它进程收集;

  等待操作系统进行善后处理,然后将其PCB清零, 并将PCB空间返还系统,该进程被删除。

2.3.3、进程状态转换图

 

3、PCB - 进程控制块

1、PCB

  OS为每个进程定义了一个数据结构 - PCB(Process Control Block),即进程控制块,用来描述和控制进程运行的全部信息。

  PCB是进程的唯一标识,OS根据PCB来对并发执行的进程进行控制和管理。

  进程控制块的作用:使一个在多道程序环境中不能独立运行的程序,成为一个能独立运行的基本单位。

  PCB的生命周期:创建新进程时,为其建立PCB,进程结束时回收其PCB,进程消亡。

  

  PCB常被系统访问,所以常驻内存,OS将所有的PCB组成若干个链表(或队列),存放在OS专门开辟的PCB区中。

2、PCB中的信息

  

1、进程标识符

  进程标识符,唯一地标识一个进程。常用 内部标识符 和 外部标识符 两种。

  内部标识符:进程序号

  部标识符:创建者提供,用户进程访问该进程时使用

2、处理机状态

  处理机状态信息由处理机的寄存器中的内容组成。在运行时,许多信息都放在寄存器中。当处理机被中断时,所有这些信息必须保存在PCB中,以便该进程重新执行时,能从断点处继续执行。

3、进程调度信息

3.1、进程状态

  指明进程的当前状态,作为进程调度和对换时的依据。

3.2、进程优先级

  描述进程使用处理机的优先级别的一个整数

3.3、事件

  进程由执行状态转变为阻塞状态等待发生的事件

3.4、进程调度所需其他信息

  与进程调度算法相关的信息。

4、进程控制信息

4.1、程序和数据的地址

  进程的程序和数据所在的内存或外存地址,以便再调度到该进程执行时,从PCB中找到程序和数据。

4.2、进程同步和通信机制

  实现进程同步和通信是必需的机制。

4.3、资源清单

  除CPU外,进程所需的全部资源及已分配到该进程的资源清单。

4.4、链接指针

  给出本进程(PCB)所在队列中的下一个进程的PCB的首地址。

3、PCB中的组织方式

  为了方便对PCB加以有效的管理,需要将PCB组织起来,PCB提供了两种组织方式: 链接方式 、 索引方式 。

3.1、链接方式

  把具有同一状态的PCB,用其中的链接字链接成一个队列。如此便可以形成若干个就绪队列、阻塞队列和空白队列。

  

  就绪队列按优先级高低排列,优先级高的排在PCB队列的前面。

3.2、索引方式

  根据进程的建立索引表,将相同状态进程存放在一张表中,如就绪索引表、阻塞索引表等。

 

  

  将个各索引表在内存的首地址记录在内存中的专用单元中,记录具有相应状态的某个PCB在PCB表中的地址。

 

标签:状态,执行,调度,PCB,进程,就绪,OS,基本概念
From: https://www.cnblogs.com/RunningSnails/p/17647053.html

相关文章

  • 逆向 | 简单调试器检测&调试器进程检测、虚拟机进程检测、启动路径检测、计算机名检测
    逆向|简单调试器进程检测、虚拟机进程检测、启动路径检测、计算机名检测写在自己书里的代码,丢一份到blog。简单调试器检测:#include<stdio.h>#include<windows.h>//定义枚举值constintProcessDebugPort=0x7;constintProcessDebugObjectHandle=0x1e;constint......
  • iOS开发Swift-基础部分
    1.常量letmaxNum=10//单个常量赋值letmaxNum=10,minNum=2//多个常量赋值用逗号隔开2.变量varx=0.0//单个变量赋值varx=0.0,y=0.1//多个变量赋值用逗号隔开3.类型注解系统可通过赋初始值进行自动推断。varname:String//冒号(:)......
  • axios如何取消请求,其原理是什么?
    axios可以通过创建一个CancelToken来取消一个请求,基本原理是:创建一个CancelToken的实例,它有一个executor函数,可以通过调用executor参数中的cancel函数来取消请求。在axios请求配置中指定cancelToken属性,将CancelToken实例传递进去。当我们需要取消请求时,调......
  • Apipost中自定义接口字段如何配置
    Apipost项目设置中可以配置接口文档中的自定义接口字段,创建状态码字典。分享分档时会展示到文档页面状态码字典在状态码字典中可以自定义状态码即其含义自定义的状态码会在分享的API文档中展示接口属性接口属性中可以自定义接口和接口文档展示字段,在接口属性中添加一个时间类型字段......
  • Apipost中自定义接口字段如何配置
    Apipost项目设置中可以配置接口文档中的自定义接口字段,创建状态码字典。分享分档时会展示到文档页面状态码字典在状态码字典中可以自定义状态码即其含义 自定义的状态码会在分享的API文档中展示 接口属性接口属性中可以自定义接口和接口文档展示字段,在接口属性中添加一......
  • Docker-compose
    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 目录一、简介 二、compose三层三、compose文件系统四、yml格式五、compose命令六、compose部署七、总结        一、简介 1.compose背景我们知道使......
  • PostgreSQL-常用命令汇总
     1. 连接到PostgreSQL数据库:psql-h主机名-p 端口号-U用户名-d数据库名 2. 列出所有数据库:\l 3. 切换到指定数据库:\c 数据库名 4. 查看当前数据库中的所有表:\dt 5. 查看表的结构:\d 表名 6. 执行SQL查询:SELECT *FROM 表名; 7. 创......
  • Docker-Compose
    目录一、Docker-Compose简介二、YAML文件格式及编写注意事项三、数据及结构1.对象映射2.序列数组3.布尔值4.示例四、DockerCompose配置常用字段五、DockerCompose常用命令六、DockerCompose文件结构七、DockerCompose环境部署1.下载2.安装3.查看版本八、DockerC......
  • 12.进程控制
    12.进程控制1.学习目标了解进程相关的概念掌握fork/getpid/getppid函数的使用熟练掌握ps/kill命令的使用熟练掌握execl/execlp函数的使用说出什么是孤儿进程什么是僵尸进程熟练掌握wait函数的使用熟练掌握waitpid函数的使用2.进程相关概念2.1程序和进......
  • PostgreSQL-查询每个表的大小
    1、查询数据库中单个表的大小(不包含索引)selectpg_size_pretty(pg_relation_size('表名')); 2、查询所有表的大小并排序(包含索引)SELECTtable_schema||'.'||table_nameAStable_full_name,pg_size_pretty(pg_total_relation_size('"'||table_schema||&#......