当一个进程当前在cpu中运行时突然不得不等待I \ O, 然后调度程序将其状态(程序计数器,寄存器..)保存到PCB中,然后将其添加到进程等待I \ O的设备队列中。
当进程知道从等待(设备)队列移动到就绪队列时? 如果我在代码中执行Thread.Sleep(50000)会使进程移动到等待队列吗?
谢谢!
答案 0 :(得分:0)
使用的术语都是教学法。如何完成这完全取决于操作系统。
由于挂起的I / O而导致从不可执行转到执行状态读取的过程因系统而异。
如果您正在执行阻塞(同步)I / O,则每个进程(或线程)只能有一个阻塞I / O调用挂起。完成后,该过程应该是可执行的。这将发生在I / O请求完成的中断处理程序中。
在某些系统上,I / O的完成将提升进程(或线程)的优先级。在这样的系统中,进程将超过正在等待的其他进程,因为它们耗尽了CPU量(而不是自愿产生CPU)。
在定时器中断服务期间发生许多过程状态变化。操作系统将在CPU上安排定期中断。定时器中断处理程序通常会查找需要唤醒的休眠进程,已排队等待竞争的I / O请求以及进程切换。