操作系统是否挂起IO上被阻止的线程

操作系统是否挂起IO上被阻止的线程,io,operating-system,blocking,suspend,Io,Operating System,Blocking,Suspend,所以当一个线程执行一个昂贵的IO操作时,我知道它被阻塞了(在IO完成之前不会处理更多的指令)。我想知道的是,操作系统是否经过优化,以实际挂起该线程,并且在IO操作完成之前不安排它 因此,本质上的问题是,IO上阻塞的线程是否继续无所事事地占用CPU周期,或者操作系统是否挂起它并在它准备就绪时将其唤醒 因此,本质上的问题是,IO上阻塞的线程是否继续无所事事地占用CPU周期,或者操作系统是否挂起它并在它准备就绪时将其唤醒 通常,当任务被阻塞(等待IO、时间、互斥或…)时,调度程序被告知找到其他任务来执

所以当一个线程执行一个昂贵的IO操作时,我知道它被阻塞了(在IO完成之前不会处理更多的指令)。我想知道的是,操作系统是否经过优化,以实际挂起该线程,并且在IO操作完成之前不安排它

因此,本质上的问题是,IO上阻塞的线程是否继续无所事事地占用CPU周期,或者操作系统是否挂起它并在它准备就绪时将其唤醒

因此,本质上的问题是,IO上阻塞的线程是否继续无所事事地占用CPU周期,或者操作系统是否挂起它并在它准备就绪时将其唤醒

通常,当任务被阻塞(等待IO、时间、互斥或…)时,调度程序被告知找到其他任务来执行,或者切换到另一个任务(如果有),或者将CPU置于某种节能状态(如果没有其他任务);调度程序不会给任务任何CPU时间,直到它被解除阻塞(直到它等待发生的任何事情)或出现异常情况(例如,取消IO的
信号

我见过的唯一不同的情况是没有调度器的单任务操作系统。在这种情况下,没有“阻塞”状态,通常唯一的任务只是忙着等待

因此,本质上的问题是,IO上阻塞的线程是否继续无所事事地占用CPU周期,或者操作系统是否挂起它并在它准备就绪时将其唤醒

通常,当任务被阻塞(等待IO、时间、互斥或…)时,调度程序被告知找到其他任务来执行,或者切换到另一个任务(如果有),或者将CPU置于某种节能状态(如果没有其他任务);调度程序不会给任务任何CPU时间,直到它被解除阻塞(直到它等待发生的任何事情)或出现异常情况(例如,取消IO的
信号


我见过的唯一不同的情况是没有调度器的单任务操作系统。在这种情况下,没有“阻塞”状态,通常唯一的任务只是忙着等待。

哪个操作系统?我想所有现代操作系统在这样一个基本问题上都会表现相同,不是吗?我不知道。在Linux中,如果试图从空管道读取,管道上的I/O和FIFO会被阻塞。我更想知道它是否会暂停?我知道它被阻塞了,但是它仍然被调度,或者线程被挂起,并且在队列中有可用的东西时被操作系统通知。就像在中一样,被阻塞的线程仍然占用CPU周期。阻塞意味着不浪费CPU周期。哪个操作系统?我想所有现代操作系统在这样一个基本问题上都会表现相同,不是吗?我不知道。在Linux中,如果试图从空管道读取,管道上的I/O和FIFO会被阻塞。我更想知道它是否会暂停?我知道它被阻塞了,但是它仍然被调度,或者线程被挂起,并且在队列中有可用的东西时被操作系统通知。如中所示,被阻塞的线程仍然占用CPU周期。阻塞意味着不浪费CPU周期。