进程控制与原语

 一、 进程的五种状态

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

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

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

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

 

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值