1

在线程中调用磁盘操作(阻塞操作)中的 read() 时。线程中会发生什么?

1.) CPU 空闲单元数据是否传输到内存?或 Wait() 和调度程序切换到另一个线程?
2.) 如果线程处于等待状态,它是如何唤醒的?

谢谢!

4

1 回答 1

0

这是一个非常开放的问题,无法简明地回答。发生的情况在很大程度上取决于您使用的操作系统。您说的是 Linux,但即便如此,根据版本、配置和其他一系列因素,也无法说出可能(或可能不会)发生的事情。

Linux 是一个抢占式多任务内核。有很多文章、博客和其他资源介绍了此类内核的工作原理。例如,http ://en.wikipedia.org/wiki/Computer_multitasking 。

直接解决您的问题:

1.)根据硬件和驱动程序,是的,数据可能会在 CPU 空闲时传输到内存中。如果还有其他进程要运行,内核可能会在等待读取数据的同时运行它们。

2.) 磁盘控制器产生的硬件中断可以唤醒空闲的 CPU,让内核将数据返回给调用 read() 的用户级进程。

如果您对究竟发生了什么感到好奇,我可以鼓励您深入研究内核代码。每个人都可以看到,为什么不呢,对吧?;)

于 2013-01-13T22:40:54.353 回答