进程控制与原语

 一、 进程的五种状态

在操作系统中,一个进程可以经历五种基本状态,这被称为进程的五种基本状态模型。这包括:

  1. 创建状态(Create/New):

    • 进程刚刚被创建,但还未被执行。在这个状态下,操作系统正在为进程分配资源,设置进程的初始状态,并进行初始化工作。
  2. 就绪状态(Ready):

    • 进程已经准备好运行,但还没有被调度执行。在这个状态下,进程等待分配到CPU时间,一旦获得CPU,它将进入运行状态。
  3. 运行状态(Running):

    • 进程正在执行指令,占用CPU时间。在运行状态下,进程的代码正在被处理器执行,执行完当前的指令后,可能会继续执行下一条指令。
  4. 阻塞状态(Blocked/Waiting):

    • 进程因等待某个事件而暂时停止执行。在阻塞状态下,进程可能在等待外部输入、等待I/O操作完成等。一旦等待的事件发生,进程将转移到就绪状态。
  5. 终止状态(Terminated/Exit):

    • 进程已经执行完成,或者被手动终止。在这个状态下,操作系统会释放进程占用的资源,清理进程的数据结构,然后将其从系统中移除。

这五种状态构成了进程的基本生命周期。在实际系统中,进程可以在这些状态之间转换,形成进程的状态转换图。操作系统通过调度算法来管理进程的状态转换,使得系统能够高效地利用CPU资源,同时满足各个进程的执行需求

二、 进程控制 (用原语实现)

进程控制是操作系统中用于管理和控制进程的一系列操作。这些操作涵盖了进程的创建、终止、调度、同步、通信等方面

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

 2.1 进程创建

进程创建原语是操作系统提供的一组原始的指令或函数,用于创建新的进程。这些原语通常由操作系统的内核提供,可以通过系统调用的形式供应用程序使用。

2.2 进程终止

计算机科学和操作系统领域,并没有通用的"撤销原语"(Undo Primitive)用于撤销一般的系统操作。通常,系统设计的原则之一是确保不可逆的操作能够被谨慎地执行,因为撤销操作本身也可能引入复杂性和不一致性。

2.3 进程的阻塞和唤醒 
  1. 阻塞原语(Blocking Primitives):

    • 阻塞是指将一个进程置于等待某个事件完成的状态。阻塞原语的目的是使进程暂时停止执行,直到满足某个条件。这样可以有效地避免进程的忙等待,提高系统的效率。

    • 通常,阻塞原语由系统调用提供,例如:

      • wait() 进程调用该原语等待某个条件的满足,当条件满足时,进程被唤醒。
      • sleep() 进程主动调用该原语来进入睡眠状态,直到被唤醒。
      • semaphore_wait() 在使用信号量进行进程同步时,等待信号量的操作可以将进程阻塞。
  2. 唤醒原语(Wakeup Primitives):

    • 唤醒是指从阻塞状态唤醒一个或多个进程,使其继续执行。唤醒原语用于通知系统某个事件已经发生,需要唤醒一个或多个等待该事件的进程。

    • 通常,唤醒原语也由系统调用提供,例如:

      • signal() 用于向等待某个条件的进程发送信号,唤醒其中一个或所有等待的进程。
      • notify() 在某些同步机制中,用于通知一个等待的进程。

这两个原语通常用于解决生产者-消费者问题、进程同步、资源共享等场景。通过使用阻塞和唤醒原语,操作系统能够有效地管理进程的状态转换,确保在合适的时机唤醒等待中的进程,提高系统的效率和性能。

2.4 进程的切换 

上下文切换原语是一组操作或指令,用于执行上下文切换。这是操作系统中的一个关键机制,因为它允许多个进程共享 CPU 时间,实现多任务处理。以下是与上下文切换相关的一些原语:

  1. 保存上下文(Save Context):

    • 在切换到新的进程之前,操作系统需要保存当前运行进程的上下文信息,包括寄存器的状态、程序计数器、内存映射等。这确保了在将来切换回该进程时,它可以继续执行。
  2. 加载上下文(Load Context):

    • 在切换到新的进程时,操作系统需要加载新进程的上下文信息,将保存的状态还原到寄存器、内存等位置。这是为了确保新进程可以继续执行。
  3. 调度(Scheduler):

    • 在上下文切换时,调度器负责选择下一个要运行的进程。这通常涉及到进程队列、进程优先级、时间片等调度策略。
  4. 原子操作(Atomic Operation):

    • 上下文切换通常涉及多个步骤,为了确保操作的原子性,可能需要使用原子操作,如禁用中断或其他同步机制,以防止在切换过程中出现竞态条件。
  5. 切换栈(Switch Stacks):

    • 在一些系统中,为每个进程分配一个独立的栈。在切换进程时,操作系统可能需要切换栈,以确保正确的执行环境。

上下文切换的成本较高,因为它需要保存和加载大量的信息。因此,操作系统的设计会尽量减小上下文切换的频率。在多核系统中,可以通过并行执行多个进程来减小上下文切换的影响。上下文切换原语是操作系统内核提供的一组底层机制,对于应用程序开发者来说,这些细节通常是由操作系统自动处理的。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 锁

乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出…

CGAL的多边形曲面重建

1、介绍 该软件包实现了一种基于假设和选择的方法,用于从点云重建分段平面对象。该方法将从分段平面对象采样的无序点集作为输入。输出是对输入点集进行插值的紧凑且不透水的曲面网格。该方法假设提供了所有必要的主平面(或者可以使用在形状检测中描述的…

如何使用玻璃材质制作3D钻石模型

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格&#xf…

MySQL 8 update语句更新数据表里边的数据

数据重新补充 这里使用alter table Bookbought.bookuser add userage INT after userphone;为用户表bookuser在userphone列后边添加一个类型为INT的新列userage。 使用alter table Bookbought.bookuser add sex varchar(6) after userage ;为用户表bookuser在userage 列后边添…

Hibernate 框架 (2023年架构师下半年案例分析题)

Hibernate 是一种对象和关系之间映射的框架,是 Java 应用和关系数据库之间的桥梁。它可以将数据库资源映射为一个或者多个 POJO。将面向数据库资源的各种业务操作以 POLO 的属性和方法的形式实现,使人们摆脱烦琐的 JDBC 代码,将精力更多地集中…

C/C++,优化算法——双离子推销员问题(Bitonic Travelling Salesman Problem)的计算方法与源代码

1 文本格式 // C program for the above approach #include <bits/stdc.h> using namespace std; // Size of the array a[] const int mxN 1005; // Structure to store the x and // y coordinates of a point struct Coordinates { double x, y; } a[mxN]; //…

【Linux下基本指令 —— 2】

Linux下基本指令 —— 2 十.more 指令语法&#xff1a;功能&#xff1a;常用选项&#xff1a;举例&#xff1a;Xshell7展示十一.less 指令语法&#xff1a;功能&#xff1a;选项&#xff1a;Xshell7展示 十二.head 指令语法&#xff1a;功能&#xff1a;选项&#xff1a;Xshell…

智能优化算法应用:基于孔雀算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于孔雀算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于孔雀算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.孔雀算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

一. 初识数据结构和算法

数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面&#xff0c;去思考他的设计层面时&#xff0c;你就依旧已经开始初识数据结构与算法了 数据结构 什么是数据结构 对于数据结构的定义官方并没有统一的解释&#xff0c;在各个百科以及算法的书中&#xf…

Unity 自定义窗口

放在Editor文件夹下&#xff1b; #if UNITY_EDITORusing System; using UnityEditor; using UnityEngine;namespace EditorCustumTool {/// <summary>/// 自定义窗口/// </summary>public class CustomWindow : EditorWindow{public enum FlagType{Flag1 101,Fl…

基于stm32ESP8266控制并显示速度的小车

这篇博客是为了实现stm32与ESP8266通讯控制的小车&#xff0c;同时可以实现在网络助手和OLED显示屏上显示速度的功能。 一、硬件部分 名称图片功能32单片机--小车-oled显示屏显示当当前的速度&#xff0c;有需要了解如何使用的可以看看我的文章&#xff0c;http://t.csdnimg.…

MATLAB - 凸优化(Convex Optimization)

系列文章目录 前言 凸优化&#xff08;Convex optimization&#xff09;是在凸约束&#xff08;convex constraints&#xff09;条件下使凸目标函数&#xff08;convex objective function&#xff09;最小化的过程&#xff0c;或者等同于在凸约束条件下使凹目标函数最大化的过…

mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析

一、背景 同事在同一个mapper.xml &#xff08;namespace相同&#xff09;&#xff0c;复制了一个sql没有修改id&#xff0c;正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下&#xff0c;id重复&#xff0c;项目会报错无法正常启动&#xff0c;后来看代码…

算法Day26 数位统计

数位统计 Description 给你一个整数n&#xff0c;统计并返回各位数字都不同的数字x的个数&#xff0c;其中0 ≤ x < 10^n。 Input 输入整数n 0≤n≤13 Output 输出整数个数 Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] ar…

初识 pytest 及断言使用

章节目录&#xff1a; 一、pytest 相关概述二、环境搭建三、使用前提四、断言4.1 常用断言4.2 异常断言4.3 断言装饰器 五、结束语 一、pytest 相关概述 pytest 是一个基于 Python 编写的测试框架&#xff0c;用于编写和运行各种类型的软件测试。它提供了丰富的功能和灵活的语法…

CleanMyMac2024一款十分高效的mac系统清理工具

当很多人还在为电脑运行缓慢、工作问题不能快速得到解决而烦恼的时候&#xff0c;我已经使用过了多款系统清理工具&#xff0c;并找到了最适合我的那一款。我的电脑是超耐用的Mac book&#xff0c;接下来给大家介绍三种在众多苹果电脑清理软件的排名较高的软件。 一、Maintena…

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…

NLP项目实战01之电影评论分类

介绍&#xff1a; 欢迎来到本篇文章&#xff01;在这里&#xff0c;我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言&#xff0c;我们将关注情感分析任务&#xff0c;即通过分析电影评论的情感来判断评论是正面的、负面的。 展示&#xff1a; 训练展示如下…

【深度学习】一维数组的 K-Means 聚类算法理解

刚看了这个算法&#xff0c;理解如下&#xff0c;放在这里&#xff0c;备忘&#xff0c;如有错误的地方&#xff0c;请指出&#xff0c;谢谢 需要做聚类的数组我们称之为【源数组】 需要一个分组个数K变量来标记需要分多少个组&#xff0c;这个数组我们称之为【聚类中心数组】…

Kafka快速实战以及基本原理详解

文章目录 一、Kafka介绍为什么要用Kafka 二、Kafka快速上手实验环境单机服务体验 三、理解Kakfa的消息传递机制四、Kafka集群服务五、理解服务端的Topic、Partition和Broker七、Kafka集群的整体结构八、Kraft集群Kraft集群简介配置Kraft集群 一、Kafka介绍 ChatGPT对于Apache …