操作系统-设备管理
2024-02-28 09:18:42 0 举报
AI智能生成
操作系统-设备管理
作者其他创作
大纲/内容
键盘敲如字母时,期间发生了什么
存储系统I/O软件分层
通用块层
设备控制器
问题
电脑设备可以接非常多的输入输出设备,比如键盘、鼠标、显示器、网卡、硬盘、打印机、音响等等,每个设备的用法和功能都不同,那操作系统是如何把这些输入输出设备统一管理的呢
概念
为了屏蔽设备之间的差异,每个设备都有一个叫设备控制器(Device Control) 的组件
比如硬盘有硬盘控制器、显示器有视频控制器等
原理图
分支主题
设备控制器里有芯片,它可执行自己的逻辑,也有自己的寄存器,用来与 CPU 进行通信
通过写入这些寄存器,操作系统可以命令设备发送数据、接收数据、开启或关闭,或者执行某些其他操作
通过读取这些寄存器,操作系统可以了解设备的状态,是否准备好接收一个新的命令等
控制器是有三类寄存器
数据寄存器(Data Register)
CPU 向 I/O 设备写入需要传输的数据,比如要打印的内容是「Hello」,CPU 就要先发送一个 H 字符给到对应的 I/O 设备
状态寄存器(Status Register)
CPU 发送一个命令,告诉 I/O 设备,要进行输入/输出操作,于是就会交给 I/O 设备去工作,任务完成后,会把状态寄存器里面的状态标记为完成
命令寄存器(Command Register)
目的是告诉 CPU ,现在已经在工作或工作已经完成,如果已经在工作状态,CPU 再发送数据或者命令过来,都是没有用的,直到前面的工作已经完成,状态寄存标记成已完成,CPU 才能发送下一个字符和命令
输入输出设备可分为两大类
块设备(Block Device)
把数据存储在固定大小的块中,每个块有自己的地址,硬盘、USB 是常见的块设备
块设备通常传输的数据量会非常大,于是控制器设立了一个可读写的数据缓冲区
CPU 写入数据到控制器的缓冲区时,当缓冲区的数据囤够了一部分,才会发给设备
CPU 从控制器的缓冲区读取数据时,也需要缓冲区囤够了一部分,才拷贝到内存
字符设备(Character Device)
以字符为单位发送或接收一个字符流,字符设备是不可寻址的,也没有任何寻道操作,鼠标是常见的字符设备
CPU 是如何与设备的控制寄存器和数据缓冲区进行通信的
端口 I/O
每个控制寄存器被分配一个 I/O 端口,可以通过特殊的汇编指令操作这些寄存器,比如 in/out 类似的指令
内存映射 I/O
将所有控制寄存器映射到内存空间中,这样就可以像读写内存一样读写数据缓冲区
IO控制器
前置提问
每种设备都有一个设备控制器,控制器相当于一个小 CPU,它可以自己处理一些事情,但有个问题是,当 CPU 给设备发送了一个指令,让设备控制器去读设备的数据,它读完的时候,要怎么通知 CPU 呢
通知方式
控制器的寄存器一般会有状态标记位,用来标识输入或输出操作是否完成。
第一种
轮询等待
让 CPU 一直查寄存器的状态,直到状态标记为完成
这种方式非常的傻瓜,它会占用 CPU 的全部时间
第二种
中断
通知操作系统数据已经准备好了。我们一般会有一个硬件的中断控制器,当设备完成任务后触发中断到中断控制器,中断控制器就通知 CPU,一个中断产生了,CPU 需要停下当前手里的事情来处理中断
中断类型
软中断
代码调用 INT 指令触发
硬件中断
硬件通过中断控制器触发
中断的方式对于频繁读写数据的磁盘,并不友好,这样 CPU 容易经常被打断,会占用 CPU 大量的时间。
使用 DMA(Direct Memory Access) 功能,它可以使得设备在 CPU 不参与的情况下,能够自行完成把设备 I/O 数据放入到内存。那要实现 DMA 功能要有 「DMA 控制器」硬件的支持
分支主题
DMA工作方式
CPU 需对 DMA 控制器下发指令,告诉它想读取多少数据,读完的数据放在内存的某个地方就可以了
接下来,DMA 控制器会向磁盘控制器发出指令,通知它从磁盘读数据到其内部的缓冲区中,接着磁盘控制器将缓冲区的数据传输到内存
当磁盘控制器把数据传输到内存的操作完成后,磁盘控制器在总线上发出一个确认成功的信号到 DMA 控制器
DMA 控制器收到信号后,DMA 控制器发中断通知 CPU 指令完成,CPU 就可以直接用内存里面现成的数据了
总结回答
CPU 当要读取磁盘数据的时候,只需给 DMA 控制器发送指令,然后返回去做其他事情
当磁盘数据拷贝到内存后,DMA 控制机器通过中断的方式,告诉 CPU 数据已经准备好了,可以从内存读数据了
仅仅在传送开始和结束时需要 CPU 干预
设备驱动程序
背景
设备控制器屏蔽了设备的众多细节,但每种设备的控制器的寄存器、缓冲区等使用模式都是不同的,所以为了屏蔽「设备控制器」的差异,引入了设备驱动程序
原理图
分支主题
基本介绍
设备控制器
设备控制器不属于操作系统范畴,它是属于硬件
设备驱动程序
设备驱动程序属于操作系统的一部分,操作系统的内核代码可以像本地调用代码一样使用设备驱动程序的接口
设备驱动程序是面向设备控制器的代码,它发出操控设备控制器的指令后,才可以操作设备控制器
不同的设备控制器虽然功能不同,但是设备驱动程序会提供统一的接口给操作系统,这样不同的设备驱动程序,就可以以相同的方式接入操作系统
分支主题
操作系统处理中断
设备完成了事情,则会发送中断来通知操作系统。那操作系统就需要有一个地方来处理这个中断,这个地方也就是在设备驱动程序里
它会及时响应控制器发来的中断请求,并根据这个中断的类型调用响应的中断处理程序进行处理
设备驱动程序初始化
要先注册一个该设备的中断处理函数
中断处理流程
分支主题
1、在 I/O 时,设备控制器如果已经准备好数据,则会通过中断控制器向 CPU 发送中断请求
2、保护被中断进程的 CPU 上下文
3、转入相应的设备中断处理函数
4、进行中断处理
5、恢复被中断进程的上下文
0 条评论
下一页