从CPU角度来说,访问设备就有两种方式:
(1)内存映射I/O:无论是CPU外部接总线,还是CPU内部接总线设备,都有各自的地址范围;
(2)端口I/O:访问设备寄存器时用特殊的in/out指令;
CPU通过内存映射I/O和端口IOf访问相应的总线控制器,通过总线控制器再去访问挂在总线上的设备。
操作系统本身是一段保存在磁盘上的程序,计算机在启动时执行一段固定得到启动代码(称为Bootloader)首先把操作系统
从磁盘加载到内存,让手执行操作系统中的代码把用户需要的其他程序加载到内存。
操作系统最核心的功能是管理进程调度、内存的分配使用和各种设备,做这些核心工作的是内核(kernel),计算机启动时加载到内存并常驻内存。
设备往往会产生数据,并主动通知CPU来读这些数据,这是由中断机制来实现的,每个设备都有一条中断线,通过中断控制器连接到CPU,当设备
要主动通知CPU时就会引发一个中断,CPU 正在执行的指令将被打断,程序计数器会指向某个固定的地址,于是CPU从这个地址开始取指令,执行
中断服务程序(Interrupt Service Routine,ISR),完成中断处理之后,再返回先前被打断的地方继续执行。
linux 源码代码中绝大部分是设备驱动程序,设备驱动函数是内核中的一组函数,通过读写设备寄存器实现对设备的初始化、读、写等操作,有些设备
还要提供一个中断处理函数共ISR调用。