设备
http://docs.linuxtone.org/ebooks/C&CPP/c/ch17s03.html
访问设备还有一点和访问内存不同。内存只是保存数据而不会产生新的数据,如果CPU不去读它,它也不需要主动提供数据给CPU,所以内存总是被动地等待被读或被写。而设备往往会自己产生数据,并且需要主动通知CPU来读这些数据,例如敲键盘产生一个输入字符,用户希望计算机马上响应自己的输入,这就要求键盘设备主动通知CPU来读这个字符并做相应处理,给用户响应。这是由中断(Interrupt)机制实现的,每个设备都有一条中断线,通过中断控制器连接到CPU,当设备需要主动通知CPU时就引发一个中断信号,CPU正在执行的指令将被打断,程序计数器会设置成某个固定的地址(这个地址由体系结构定义),于是CPU从这个地址开始取指令(或者说跳转到这个地址),执行中断服务程序(ISR,Interrupt Service Routine),完成中断处理之后再返回先前被打断的地方执行后续指令。比如某种体系结构规定发生中断时跳转到地址0x0000 0010执行,那么就要事先把一段ISR程序加载到这个地址,ISR程序是由内核代码提供的,中断处理的步骤通常是先判断哪个设备引发了中断,然后调用该设备驱动程序提供的中断处理函数(Interrupt Handler)做进一步处理。
由于各种设备的用途各不相同,设备寄存器中每个位的定义和操作方法也各不相同,所以每种设备都需要专门的设备驱动程序(Device Driver),一个操作系统为了支持广泛的设备就需要有大量的设备驱动程序,事实上,Linux内核源代码中绝大部分是设备驱动程序。设备驱动程序通常是操作系统内核里的一组函数,主要是通过对设备寄存器的读写实现对设备的初始化、读、写等操作,有些设备还要提供一个中断处理函数供ISR调用。
相关文章
- 网络安全设备主要有什么
- 设备如何使用go sdk轻松连接华为云IoT平台?
- 【Linux开发】【Qt开发】配置tslibs触摸屏库环境设置调试对应的设备挂载点
- EPLAN插入设备时无法打开mdb文件处理方法
- Linux设备驱动开发详解-Note(5)---Linux 内核及内核编程(1)
- 《社交网站界面设计(原书第2版)》——1.10 一个任务,多个设备
- Python 自动化运维实现ssh 远程登录管理设备
- 生产环境实战spark (6)分布式集群 5台设备 Scala安装
- 【BLE MIDI】开发 BLE MIDI 硬件电子乐器设备需要遵循的相关规范 ( 资料收集 )
- 项目中遇到的direct3d问题,设备丢失
- 如何 判断 设备 是否 连接 上 了 wifi
- A40i使用笔记:第一个实物驱动HX711(传统方式,非设备树)