Linux外部设备与处理器的联络方式
扫描二维码
随时随地手机看文章
为了进行有效的信息传递,计算机处理器与外部设备之间必须要有一个有效的联络方式.例如,磁盘设各每次接收一个命令“移动读磁头到软盘的第42扇区”,为了知道这个命令是否完成,处理器有两种选择:一是处理器通过设备驱动程序不断地检测这个设各的状态寄存器; 二是把联络的权力交给设各,即当外部设各完成命令时向处理器发出一个中断请求信号。
检测一个设各就意味着处理器通过设各驱动程序频繁地读取状态寄存器,直到状态寄存 器值的变化显示该设各已经完成命令。如果一个设各驱动程序是内核的一部分,那么上述行为将是灾难性的,因为内核在设备完成命令的这个期间其他什么事情也不能做了。也就是说,其他进程全部会被阻塞而不能运行。
显然,更有效的方法是使用中断。即当某个设各需要被处理时,该设各会向处理器发出一个中断请求,处理器响应这个中断之后,会在中断服务程序中对这个请求进行正确的处理。例如,每当一个Ethernet网卡控制器从网络上接收一个Ethernet数据包时,网卡控制器会发出 一个中断请求;当系统接收到这个请求之后,就会在中断服务程序中来处理这个数据包。
综上所述,处理器与外部设各之间的工作方式为:处理器通过向外部设各控制寄存器发送命令的方式使外部设备进行工作;当外部设备工作完毕需要与处理器传递数据时,由外部设备向处理器发出中断请求,并在中断服务程序中完成数据的传递及其他相关工作。