进程控制以及相关原语的使用(创建,终止,阻塞,唤醒,切换)

news2024/12/23 8:47:02

1.基本概念

1.进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。

进程控制就是要实现进程状态转换。

2.实现进程控制(原语)
1.原语

原语是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可中断。

如果不能“一气呵成”,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。
在这里插入图片描述

2.原语的原子性

原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。可以用“关中断指令”和“开中断指令”这两个特权指令实现原子性.

  1. 正常情况:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程序。
  2. CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查。
  3. 这样,关中断、开中断之间的这些指令序列就是不可被中断的,这就实现了“原子性”.

2.进程控制相关的原语

1.进程的创建

操作系统创建一个进程时使用的原语

1.创建原语
  1. 申请空白PCB
  2. 为新进程分配所需资源
  3. 初始化PCB
  4. 将PCB插入就绪队列(创建态到就绪态)
2.引起进程创建的事件
  1. 用户登录:分时系统中,用户登录成功,系统会建立为其建立一个新的进程
  2. 作业调度:多道批处理系统中,有新的作业放入内存时,会为其建立一个新的进程
  3. 提供服务:用户向操作系统提出某些请求时,会新建一个进程处理该请求
  4. 应用请求:由用户进程主动请求创建一个子进程

2.进程的终止

要终止一个进程时使用,从就绪态,阻塞态或者运行态直接到终止态。

1.撤销原语
  1. 从PCB集合中找到终止进程的PCB
  2. 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
  3. 终止其所有子进程(进程间的关系是树形结构)
  4. 将该进程拥有的所有资源归还给父进程或操作系统
  5. 删除PCB
2.引起进程终止的事件
  1. 正常结束:进程自己请求终止(exit系统调用)
  2. 异常结束:整数除以0、非法使用特权指令,然后被操作系统强行杀掉
  3. 外界干预:Ctrl+Alt+delete,用户选择杀掉进程

3.进程的阻塞

运行态到阻塞态

1.阻塞原语
  1. 找到要阻塞的进程对应的PCB
  2. 保护进程运行现场,将PCB状态信息设置为“阻塞态",暂时停止进程运行
  3. 将PCB插入相应事件的等待队列
2.引起进程阻塞的事件
  1. 需要等待系统分配某种资源
  2. 需要等待相互合作的其他进程完成工作

4.进程的唤醒

阻塞态到就绪态

1.唤醒原语
  1. 在事件等待队列中找到PCB
  2. 将PCB从等待队列移除,设置进程为就绪态
  3. 将PCB插入就绪队列,等待被调度
2.引起进程唤醒的事件

等待的事件发生。(因何事阻塞,就应由何事唤醒)
因此阻塞原语唤醒原语必须成对使用

5.进程的切换

运行态到就绪态,就绪态到运行态。

1.切换原语
  1. 将运行环境信息存入PCB
  2. PCB移入相应队列
  3. 选择另一个进程执行,并更新其PCB
  4. 根据PCB恢复新进程所需的运行环境
2.切换进程的事件
  1. 当前进程时间片到
  2. 有更高优先级的进程到达
  3. 当前进程主动阻塞
  4. 当前进程终止

3.进程的运行环境

CPU中会设置很多“寄存器”,用来存放程序运行过程中所需的某些数据。

  • PSW:程序状态字寄存器
  • PC:程序计数器,存放下一条指令的地址
  • IR:指令寄存器,存放当前正在执行的指令
  • 通用寄存器:其他一些必要信息

在这里插入图片描述
当一个进程要下CPU时,在进程切换时先在PCB中保存这个进程的运行环境(保存一些必要的寄存器信息)
当原来的进程再次投入运行时,可以通过PCB恢复它的运行环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初阶数据结构(四)带头双向链表

💓博主csdn个人主页:小小unicorn ⏩专栏分类:数据结构 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 带头双向链表 链表的相关介绍初始化链表销毁链…

一文带你搞懂Redis持久化

Redis持久化 Redis的数据是存储在内存的,当程序崩溃或者服务器宕机,那么内存里的数据就会丢失。所以避免数据丢失的情况,需要将数据保存到其他的存储设备中。 Redis提供两种方式来持久化,分别是 RDB(Redis Database)&#xff1a…

格拉姆角场GAF将时序数据转换为图像并应用于凯斯西储大学轴承故障诊断(Python代码,CNN模型)

1.运行效果: 格拉姆角场GAF将时序数据转换为图像并应用于凯斯西储大学轴承故障诊断(Python代码)_哔哩哔哩_bilibili 环境库 只要tensorflow版本大于等于2.4.0即可运行 同样的模型应用于东南大学轴承数据集:格拉姆角场GAF将时序…

ios telegram iOS telegram二次开发

二次开发方案 一、方案的确定及要实现的效果 首先,最多的信息获取还是官方文档:https://lw.microstrategy.com/msdz/MobileUpdates/941_iOSU5/docs/mergedProjects/mobile_sdk/mobilesdk.htm 在本项目的一小部分,项目需求也是改来改去…

虚拟机中对已经存在的磁盘扩容

如图所示,将虚拟机中已经存在的磁盘进行扩容: 扩展之后重启虚拟机,然后输入命令:lsblk进行查看虚拟机大小;发现这个盘的大小已经改变,如果想要给某个卷组或者逻辑卷进行扩容的话还需要将这个磁盘进行新建分…

osg实现鼠标框选

目录 1. 需求的提出 2. 具体实现 2.1. 禁止场景跟随鼠标转动 2.2. 矩形框前置绘制 3. 附加说明 3.1. 颜色设置说明 3.2.矩形框显示和隐藏的另一种实现 1. 需求的提出 有时需要在屏幕通过按住键盘上的某个键如Ctrl键且按住鼠标左键,拖出一个矩形,实现框…

MongoDB 2023年度纽约 MongoDB 年度大会话题 -- 企业级从传统数据库到NOSQL,你会更好...

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群&…

Android学习之路(17) Android Adapter详解

Adapter基础讲解 本节引言 从本节开始我们要讲的UI控件都是跟Adapter(适配器)打交道的,了解并学会使用这个Adapter很重要, Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合适的形式显示到view上,提供 给用户看…

读取一张图片各种颜色占比

提问之初 <small> 读取一张图片各种颜色占比 /storage/emulated/0/Pictures/Screenshots/Screenshot_20230725_195440.jpg有趣优雅热情沉着的代码与注释/每行每行 from PIL import Image # 导入PIL大法&#xff0c;这是处理图像的必备神器# 图片路径&#xff0c;此处为…

2023年哪款PDF虚拟打印机好用?

PDF文档想必大家都不陌生&#xff0c;在工作中经常会用到该格式的文档&#xff0c;那么有哪些方法能制作PDF文档呢&#xff1f;一般都是借助PDF虚拟打印机的&#xff0c;那么有哪些好用的软件呢&#xff1f; pdfFactory不仅为用户提供了丰富的PDF文档生成、打印功能&#xff0…

蓝桥杯每日一题2023.10.1

路径 - 蓝桥云课 (lanqiao.cn) 题目分析 求最短路问题&#xff0c;有多种解法&#xff0c;下面介绍两种蓝桥杯最常用到的两种解法 方法一 Floyd&#xff08;求任意两点之间的最短路&#xff09;注&#xff1a;不能有负权回路 初始化每个点到每个点的距离都为0x3f这样才能对…

00后老程序员不讲武德 偷袭 猿人学第二题解题记录 match/2

我是一个00后的老程序员&#xff0c;半夜00点有个Python群友发来一个题目&#xff0c;我以为是leetcode算法题呢&#xff0c;这不轻而易举、手到擒来、简简单单、有手就行&#xff0c;哪怕是博利叶排序我也能招架得住啊&#xff0c;结果发来一个链接。 题发出来了&#xff0…

GD32F10X ----RTC

1. RTC的简介 STM32 的实时时钟&#xff08;RTC&#xff09;是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC 模块和时钟配置…

BUUCTF-WEB-刷题记录

题目地址 https://buuoj.cn/challenges[HITCON 2017]SSRFme 代码理解 进入主页后发现是代码审计/ escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数— 抑制错误输出 mkdir — 创建目录 chdir 更改目录 shell_exec — 通过 shell 环境执行命令&#x…

第5章-宏观业务分析方法-5.3-主成分分析法

5.3.1 主成分分析简介 主成分分析是以最少的信息丢失为前提,将原有变量通过线性组合的方式综合成少数几个新变量;用新变量代替原有变量参与数据建模,这样可以大大减少分析过程中的计算工作量;主成分对新变量的选取不是对原有变量的简单取舍,而是原有变量重组后的结果,因此…

Spring注册Bean系列--方法1:@Component

原文网址&#xff1a;Spring注册Bean系列--方法1&#xff1a;Component_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;Component。 注册Bean的方法我写了一个系列&#xff0c;见&#xff1a;Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…

C++代码示例:排列数简单生成工具

文章目录 前言代码仓库内容代码&#xff08;有详细注释&#xff09;编译和运行命令结果总结参考资料作者的话 前言 C代码示例&#xff1a;排列数简单生成工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) …

PHP 数码公司运营管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 数码公司运营管理系统系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php 数码公司运营管理系统 代码 https://download.csdn.net/download/qq_41…

实战教程:如何在API监控中实现高效报警和通知

问题 因一业务需要&#xff0c;想要对API服务接口添加一些监控&#xff0c;以帮助跟踪应用程序的性能、问题和用户活动等。实现监控的方式有多种多样的方式&#xff0c;以下是一些常用的方法&#xff1a; 日志记录&#xff1a; 在应用程序中添加详细的日志记录&#xff0c;包括…

如何开发一个微信小程序

微信小程序是微信公众平台推出的一种全新的应用形态&#xff0c;它具有跨平台、小巧、高效等特点&#xff0c;深受用户喜爱。 一直想学习开发小程序&#xff0c;最近找了一个教程来看&#xff0c;发现原生小程序写起来还是挺简单的&#xff0c;主要分为以下几步。 准备开发环境…