【发布时间】:2016-07-13 15:22:17
【问题描述】:
当一个进程正在cpu中运行,突然要等待I\O, 然后调度程序将其状态(程序计数器,寄存器..)保存到PCB中,然后将他添加到进程等待I\O的设备队列中。
什么时候进程知道从等待(设备)队列移动到就绪队列? 如果我在代码中执行 Thread.Sleep(50000),进程是否会移至等待队列?
谢谢!
【问题讨论】:
标签: process operating-system readystate
当一个进程正在cpu中运行,突然要等待I\O, 然后调度程序将其状态(程序计数器,寄存器..)保存到PCB中,然后将他添加到进程等待I\O的设备队列中。
什么时候进程知道从等待(设备)队列移动到就绪队列? 如果我在代码中执行 Thread.Sleep(50000),进程是否会移至等待队列?
谢谢!
【问题讨论】:
标签: process operating-system readystate
使用的术语都是教学性的。这是如何完成的完全取决于操作系统。
从由于挂起的 I/O 导致无法执行到进入读取执行状态的过程因系统而异。
如果您正在执行阻塞(同步)I/O,则每个进程(或线程)只能有一个待处理的阻塞 I/O 调用。完成后,该过程应该是可执行的。这将发生在 I/O 请求完成的中断处理程序中。
在某些系统上,完成 I/O 会提高进程(或线程)的优先级。在这样的系统中,进程将领先于其他正在等待的进程,因为它们耗尽了自己的 CPU 量(而不是自愿让出 CPU)。
许多进程状态变化发生在定时器中断服务期间。 O/S 将在 CPU 上安排定期中断。定时器中断处理程序通常会查找需要唤醒的休眠进程、已排队等待完成的 I/O 请求以及进程切换。
【讨论】: