当前位置: 首页 > article >正文

进程控制与原语

 一、 进程的五种状态

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

  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):

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

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

 


http://www.kler.cn/a/162667.html

相关文章:

  • 想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)
  • CLion配置QT开发环境
  • 2-UML概念模型测试
  • yolov7论文翻译
  • Java-Redisson分布式锁+自定义注解+AOP的方式来实现后台防止重复请求扩展
  • scala的练习题
  • Termux+Hexo结合内网穿透轻松实现安卓手机搭建博客网站发布公网访问
  • 这把养生局~
  • Vue 子路由页面发消息给主路由页面 ,实现主页面显示子页面的信息
  • [架构之路-258]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构与软件框架的详细比较
  • 倒计时模块复习
  • 一篇文章带你快速入门 Vue 核心语法
  • chfs,简单好用的局域网共享网盘
  • 设计并实现一个多线程图书馆管理系统,涉及数据库操作
  • python圣诞树代码编程
  • HarmonyOS
  • JVM GUI可视化监控及诊断工具
  • Python语言基础知识(二)
  • 【S32DS报错】-2-提示Error while launching command:arm-none-eabi-gdb –version错误
  • DeepIn,UOS统信专业版安装运行Java,JavaFx程序
  • LeetCode-496. 下一个更大元素 I【栈 数组 哈希表 单调栈】
  • pip的常用命令
  • 获取系统固件类型和Windows固件API学习
  • 行云海CMS SQL注入漏洞复现
  • GO -- 设计模式
  • 如何使用技术 SEO 优化 Pinterest 富图钉