进程的阻塞与唤醒

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

1:向系统申请资源时失败。如一个进程(A)申请打印机但是此时打印机被其他进程(B)正在使用,此时A进程则处于阻塞状态。

2:等待某种操作:进程A启动了某I/O设备,如果只有完成了指定的I/o任务后进程A才能执行,则进程A启动了I/O设备后会自动进入阻塞。

3:新数据尚未到达:对于相互合作的进程,如果一个进程需要先获得另一个进程的数据后才能对该数据进行处理,只要数据尚未到达其便会进入阻塞状态。

4:等待新任务的到达:每当这种进程完成自己的任务便把自己阻塞起来,等待新任务到达,才将其唤醒。

进程阻塞的过程:

正在执行的进程,如果遇到上面阻塞的事件后,进程便调用阻塞原语block将自己阻塞,(阻塞是进程自身的一种主动行为)并将正在运行的进程立即停止运行,并把PCB中进程状态信息改为阻塞,并将PCB插入阻塞队列,如果系统设置了不同阻塞原因的队列,则应将其插入到对应原因引起的阻塞队列中。

进程唤醒的过程:

当被阻塞进程所期待的事件发生时则有关的进程会调用唤醒原语(wakeup),将等待的进程唤醒,首先把阻塞的进程从阻塞队列中移除,将其PCB插入就绪队列中

进程的挂起与激活

 

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,当一个进程执行某些操作时,可能会发生阻塞唤醒的情况。阻塞是指进程因某种原因无法继续执行而暂停,而唤醒是指一个被阻塞进程被激活以继续执行。 进程阻塞通常是由于等待某个特定的事件发生,如等待文件读取操作完成、等待用户输入等。在这种情况下,进程会被挂起,并进入阻塞状态,不再占用CPU资源。当事件发生时,操作系统会将进程状态修改为就绪状态,以便在合适的时机继续执行。 进程唤醒是由于阻塞的原因被满足,也就是等待的事件发生。一旦这个事件发生,操作系统会将进程状态修改为就绪状态,使其能够参与到CPU的调度中,继续执行下去。 在C语言中,可以使用一些函数来实现进程阻塞唤醒。例如,可以使用sleep函数来让进程挂起一段指定的时间。在这段时间内,进程将无法继续执行,从而实现了阻塞。而在等待某个事件发生时,可以使用一些I/O操作函数,如read等待文件读取事件的完成。一旦文件读取完成,进程将被唤醒,继续执行后续的操作。 此外,操作系统中还有一些更高级的机制用于实现进程阻塞唤醒,如信号量、条件变量等。这些机制可以更加灵活地控制进程的状态,实现更复杂的同步和通信操作。 综上所述,通过在C语言中使用特定的函数或操作系统提供的机制,可以实现进程阻塞唤醒,以更好地控制进程的执行顺序和实现进程间的同步与通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值