2018.04.17
IO 设备分为块设备、字符设备。
块设备:U 盘、硬盘、CD。数据存储在固定大小的块中,有地址。
字符设备:鼠标、键盘、打印机。字符流。无地址。
IO 总线:为了 CPU 与外设通信。但同一时间只能有一条通道。
IO 端口:为了 CPU 能识别出外设。
内存映射 IO 端口:把 IO 地址写入内存中,方便 CPU 访问。
轮询(程序式 IO):CPU 不断询问硬盘有没有把数据送到磁盘控制器缓冲区了。且 CPU 会一直霸占总线。
中断:CPU 有一条中断请求线,硬盘把数据送到磁盘控制器缓冲区后往这个地方发一个信号,CPU 每执行一条指令后会检查。
异步、事件驱动的思想。node.js、AJAX。
中断控制器:决定中断的优先级。
CPU 只认内存。鼠标、键盘、硬盘的数据通通得搬到内存。
磁盘控制器:把数据从硬盘搬运到内存。
把硬盘数据送到 CPU 过程是这样的:
硬盘先把数据送到磁盘控制器缓冲区,发出中断,CPU 发出指令把数据送到内存,最后才送到 CPU。
对于小数据,如键盘,鼠标产生的数据,磁盘控制器缓冲区能一次性就能缓存这些数据,只需发一次中断给 CPU,CPU 再发出指令就能把数据送到内存。
对于大数据,如硬盘上的数据,磁盘控制器缓冲区每次装满后都要向 CPU 申请中断把数据运到内存,由于数据量大,磁盘控制器缓冲区都有装多次才能装完,相应地,也要申请多次中断,这样 CPU 也要发出多次指令。
DMA 是用来解决大数据传输的。直到所有数据发送到内存后才向 CPU 发出中断。
注意没有 DMA 的小数据传输是把数据发送到磁盘控制器缓冲区,就向 CPU 发出中断,然后在 CPU 指令下把数据送到内存。
但 DMA 把数据从磁盘控制器缓冲区运到内存动用到总线,这时 CPU 就没法用了。