400电话网络推广商城网站,排名软件,住建蓉e办官网,百度seo不正当竞争秒收CPU 里面的内存接口#xff0c;直接和系统总线通信#xff0c;然后系统总线再接入一个 I/O 桥接器#xff0c;这个 I/O 桥接器#xff0c;另一边接入了内存总线#xff0c;使得 CPU 和内存通信。再另一边#xff0c;又接入了一个 I/O 总线#xff0c;用来连接 I/O 设备直接和系统总线通信然后系统总线再接入一个 I/O 桥接器这个 I/O 桥接器另一边接入了内存总线使得 CPU 和内存通信。再另一边又接入了一个 I/O 总线用来连接 I/O 设备比如键盘、显示器等。
那当用户输入了键盘字符键盘控制器就会产生扫描码数据并将其缓冲在键盘控制器的寄存器中紧接着键盘控制器通过总线给 CPU 发送中断请求。
CPU 收到中断请求后操作系统会保存被中断进程的 CPU 上下文然后调用键盘的中断处理程序。
键盘的中断处理程序是在键盘驱动程序初始化时注册的那键盘中断处理函数的功能就是从键盘控制器的寄存器的缓冲区读取扫描码再根据扫描码找到用户在键盘输入的字符如果输入的字符是显示字符那就会把扫描码翻译成对应显示字符的 ASCII 码比如用户在键盘输入的是字母 A是显示字符于是就会把扫描码翻译成 A 字符的 ASCII 码。
得到了显示字符的 ASCII 码后就会把 ASCII 码放到「读缓冲区队列」接下来就是要把显示字符显示屏幕了显示设备的驱动程序会定时从「读缓冲区队列」读取数据放到「写缓冲区队列」最后把「写缓冲区队列」的数据一个一个写入到显示设备的控制器的寄存器中的数据缓冲区最后将这些数据显示在屏幕里。
显示出结果后恢复被中断进程的上下文。 Linux 存储系统的 I/O 设备控制器
为了屏蔽设备之间的差异每个设备都有一个叫设备控制器Device Control 的组件比如硬盘有硬盘控制器、显示器有视频控制器等。控制器是有三类寄存器它们分别是状态寄存器Status Register、 命令寄存器Command Register以及数据寄存器Data Register 数据寄存器CPU 向 I/O 设备写入需要传输的数据比如要打印的内容是「Hello」CPU 就要先发送一个 H 字符给到对应的 I/O 设备。 命令寄存器CPU 发送一个命令告诉 I/O 设备要进行输入/输出操作于是就会交给 I/O 设备去工作任务完成后会把状态寄存器里面的状态标记为完成。 状态寄存器目的是告诉 CPU 现在已经在工作或工作已经完成如果已经在工作状态CPU 再发送数据或者命令过来都是没有用的直到前面的工作已经完成状态寄存标记成已完成CPU 才能发送下一个字符和命令。
那 CPU 是如何与设备的控制寄存器和数据缓冲区进行通信的存在两个方法 端口 I/O每个控制寄存器被分配一个 I/O 端口可以通过特殊的汇编指令操作这些寄存器比如 in/out 类似的指令。 内存映射 I/O将所有控制寄存器映射到内存空间中这样就可以像读写内存一样读写数据缓冲区。
设备驱动程序 驱动程序主要是用来相应该设备的中断程序。 在 I/O 时设备控制器如果已经准备好数据则会通过中断控制器向 CPU 发送中断请求 保护被中断进程的 CPU 上下文 转入相应的设备中断处理函数 进行中断处理 设备驱动程序 恢复被中断进程的上下文