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