昨天在整理自己的博客的时候,想到的一个问题:进程在从磁盘中读取内容的时候,CPU 在干什么???
之所以会这样问,是因为,CPU的速度比磁盘要快很多,具体有多块,看这篇文章。
磁盘寻址时间为 10ms,换算成人类时间是 10个月,刚好够人类创造一个新的生命了。如果 CPU 需要让磁盘泡杯咖啡,在它眼里,磁盘去生了个孩子,回来告诉它你让我泡的咖啡好了。
这是从文中截取的一段,可以体会一下。
那么我的问题的本质是,在这段等带的时间中,CPU 是去搞别的是事情了(执行别的线程),还是空等呢???IO 阻塞与线程遇到锁产生的阻塞是一样的吗?
经过查询资料,Linux系统下,CPU与磁盘交互时大致发生了如下事情:
-
进程调用库函数向内核发起读文件请求(切换到内核态);
-
在 Page Cache(它位于内存和文件之间缓冲区,文件IO操作实际上只和page cache交互,不直接和内存交互。) 中查询数据是否存在。
-
如果页缓存命中,那么直接返回文件内容;如果页缓存缺失,那么产生一个页缺失异常,需要从磁盘读取数据。
-
CPU向磁盘发送数据读取指令。
-
然后,发送完指令后,