use*_*237 7 architecture linux io cpu block
我对 IO 的整个概念有点困惑;我想知道 CPU 如何从磁盘(例如 SATA 磁盘)读取数据?
当带有 read()/write() 的程序符合对特定文件的引用并且 CPU 遇到此引用时,它是否直接从磁盘读取(通过内存映射的 IO 端口)?还是先写入 RAM,然后再写回磁盘?
我建议阅读: http://www.makelinux.net/books/ulk3/understandlk-CHP-13-SECT-1 补充: http://en.wikipedia.org/wiki/Direct_memory_access
关于 RAM 中的缓冲:大多数编程语言和操作系统都会将至少部分 I/O 操作(读和写)缓冲到内存中。这通常是异步完成的:即创建、填充缓冲区,然后进行处理。对于读取,CPU 将(与磁盘控制器一起工作)创建 IO 指令来获取数据和将其放入内存的位置,填充该空间,然后将其内容呈现给发出请求的程序。对于写入请求,这会将写入操作及其相关数据排队,然后将它们发送到 IO 控制器,最终发送到要执行的磁盘。缓冲可以发生在多个位置:CPU 缓存、RAM、(有时)磁盘控制器或硬盘本身。完成多少缓冲,以及如何处理我提到的抽象操作序列,根据您的硬件架构、操作系统和任务而有所不同。