在操作系统中对IO设备的控制方式一共有四种,按时间线依次是轮询、中断、DMA、和通道方式
轮询就是进行IO时操作系统一直问控制器数据准备好了没有。
中断就是异步的方式进行了,CPU向设备控制器发送一条IO指令后接着返回继续做原来的工作,而当设备控制器从设备中取出数据放到控制器的寄存器中后便向CPU发送中断信号,CPU在检查完数据后便向控制器发送取走数据的信号,将数据写入内存,但仍是以字节为单位的。
DMA则是CPU和设备控制器之间的引入的一层加快速度的手段,由DMA代替CPU进行数据传送,CPU将指令发送给DMA,DMA向控制器发送请求,设备控制器将数据从缓冲区将数据直接写入内存。完成后设备控制器发送一个信号给DMA,DMA重复检查数据是否传送完成,确认完成后中断让CPU知道。
DMA比起中断方式已经显著减少了CPU的干预,但是CPU每发出一条IO指令,只能去读写一个连续的数据块,当要读多个数据块并存放到不同的内存区域中去,CPU需要发送多条IO指令及进行多次中断。IO通道方式是DMA方式的发展,把对一个数据块的干预减少为对一组数据块的干预。
IO通道也有三种:
(1)字节多路通道(Byte Multiplexor Channel)
(2)数组选择多路通道(Block Selector Channel)
(3)数组多路通道(Block Multiplexor Channel)
猜想java中的channel应该就是操作系统中channel的抽象?