首页 > 系统相关 >OS(三):进程管理之进程的控制

OS(三):进程管理之进程的控制

时间:2023-08-21 21:14:41浏览次数:55  
标签:控制 阻塞 PCB 原语 进程 就绪 OS 终止

  控制进程的程序段,进程控制一般是由OS的内核中的原语来实现的。原语是不可再分的原子操作(Action Operation),执行过程中不会被打断。

1、原语

2.1、原语概念

  原语的概念:由若干条指令组成,完成特定的功能,是一种原子操作(Action Operation)。

2.2、原语特点

  原语的特点:原子操作,一个操作中的所有动作要么全做,要么全不做,执行过程不会被中断;在管态/系统态/内核态下执行,常驻内存;是内核三大支撑功能(中断处理/时钟管理/原语操作)之一。

2.3、原语作用

  实现进程的通信和控制。

2.4、常见原语

  

2.4.1、进程控制原语

  创建原语:create()

  阻塞原语:block()

  唤醒原语:wakeup()

  撤销原语:destroy()

2.4.2、常见其他原语

  挂起原语:suspend()

  激活原语:active()

2、进程的创建

2.1、进程间的关系

  进程中有父进程、子进程的概念。如在进程A中创建了进程B,成A是B的父进程,B是A的子进程。

  子进程可以继承父进程所拥有的资源,当子进程被撤销时,应将其从父进程哪里获得的资源归还给父进程。

  撤销父进程时,必须同时撤销器所有的子进程。

  为标识进程间的关系,在PCB中设置了进程关系表项,标明自己的父进程及所有的子进程。

2.2、创建进程的事件

2.2.1、作业调度

  作业调度程序按一定的算法调度到某作业时,该作业装入内存,为它分配必要的资源,并立即为它创建进程,再插入就绪队列中。

2.2.2、提供服务

  运行中的用户程序提出某种请求后,系统将专门创建一个进程来提供用户所需要的服务。

2.2.3、应用请求

  应用进程创建一个新进程,使新进程以并发运行方式完成特定任务。

2.3、进程的创建

  进程的创建需要调用进程创建原语Create()。

2.3.1、申请空白PCB

  为新进程申请获得惟一数字标识符,并从PCB集合中索取一个空白PCB。

2.3.2、为新进程分配存储空间

2.3.3、初始化PCB

3.1、初始化标识信息

  系统分配的标识符和父进程的标识符填入新PCB中。

3.2、初始化处理机状态

  使程序计数器指向程序的入口地址,使栈指针指向栈顶。

3.3、初始化处理机控制信息

  将进程的状态设置为就绪状态或静止就绪状态。

2.3.4、将新进程插入就绪队列

3、进程的终止

3.1、进程终止原因

3.1.1、正常结束

  自然结束:运行到Holt指令(最后一条指令)时,将产生一个中断,去通知OS本进程已经完成

3.1.2、异常结束

  由于出现某些错误和故障而迫使进程终止,越界错误,保护错误,非法指令,特权指令错误,运行超时,等待超时,算术运算错误,I/O故障。

3.1.3、外界干预

  进程应外界的请求而终止运行;被操作员或操作系统终结;被其他有终止权的进程(父进程)所终结。

3.2、进程终止过程

  系统中发生终止进程事件,OS调用进程终止原语,终止指定进程。

  2.1、根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态。

  2.2、若终止进程正处于执行状态,立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度。

  2.3、若要终止的进程有子孙进程,将所有子孙进程终止。

  2.4、将被终止进程拥有的全部资源,归还给父进程或系 统;

  2.5、将被终止进程(PCB)从所在队列(或链表)中移出,等待其他程序来搜集信息。

4、进程的阻塞与唤醒

4.1、引起进程阻塞和唤醒的事件

  请求系统服务:等待OS分配打印机服务

  启动某种操作:等待I/O操作完成

  新数据尚未到达:B进程等待A进程的数据输入

  无新工作可做:进程空闲,等待新任务到来

4.2、进程阻塞过程

调用阻塞原语block()把自己阻塞:进程的阻塞是一种主动行为

  1、立即停止执行

  2、进程状态由执行状态(Running)改为阻塞状态(Blocked)

  3、将PCB插入阻塞队列

  4、因不同事件进行阻塞的进程可能会形成多个阻塞队列,直到调度程序进行重新调度它们

4.3、进程唤醒过程

有关进程调用唤醒原语wakeup( ), 将等待该事件的进程唤醒;

  1、把被阻塞的进程从等待该事件的阻塞队列中移出;

  2、将其PCB中的现行状态改为就绪,再将该PCB插入到就绪队列中;

  3、被唤醒的进程进入就绪状态(Ready),而非执行状态(Running);

  4、被阻塞进程必须由其它进程唤醒,否则,将一直处于阻塞状态,从而再无机会继续运行。

5、进程的挂起与激活

5.1、进程的挂起

  OS利用挂起原语 suspend()将指定进程或处于阻塞状态的进程挂起。执行过程如下:

  检查被挂起进程的状态, 若处于活动就绪状态, 便将其改为静止就绪;

  对于活动阻塞状态的进程,则将之改为静止阻塞;

  若被挂起的进程正在执行,则转向调度程序重新调度;

  把该进程的PCB复制到某指定的内存区域,方便用户或父进程考查该进程的运行情况。

5.2、进程的激活

  OS利用激活原语 active() 将指定进程激活。

  激活原因:父进程或用户进程请求激活

  激活过程:激活原语先将进程从外存调入内存;检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞,便将之改为活动阻塞。

  激活后需要根据处理机调度策略和进程优先级等条件决定该进程是否执行。

 

标签:控制,阻塞,PCB,原语,进程,就绪,OS,终止
From: https://www.cnblogs.com/RunningSnails/p/17647065.html

相关文章

  • Nacos源码 (4) 配置中心
    本文阅读nacos-2.0.2的config源码,编写示例,分析推送配置、监听配置的原理。客户端创建NacosConfigService对象Propertiesproperties=newProperties();properties.setProperty(PropertyKeyConst.SERVER_ADDR,NACOS_HOST);NacosConfigServiceconfigService=newNacosCon......
  • OS(二):进程管理的基本概念
    进程是资源分配和独立运行的基本单位。引入进程的目的在于,使多道程序并发执行,提高系统的资源利用率和吞吐量;而引入线程,是为了减少程序在并发时的时空开销,提高系统的并发性,线程相对于进程,大大降低了创建、撤销和切换可执行实体的成本和难度。1、进程的定义与特征1.1、定......
  • 逆向 | 简单调试器检测&调试器进程检测、虚拟机进程检测、启动路径检测、计算机名检测
    逆向|简单调试器进程检测、虚拟机进程检测、启动路径检测、计算机名检测写在自己书里的代码,丢一份到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......