UNIX系统中的设备文件与进程管理
1. 设备与特殊设备文件
在计算机系统里,设备是提供特定功能的专用硬件,可位于内部或外部,同一类别的设备会得到平等对待。设备驱动程序负责管理系统与特定设备的交互,它提供必要的接口,在设备能理解的硬件命令和内核之间进行转换,这种系统结构让UNIX在很大程度上实现了硬件独立性。
设备驱动程序是内核的一部分,并非用户进程,但可从内核内部和用户空间访问。用户层面通过特殊设备文件来访问,内核会把对这些特殊文件的操作转换为对驱动代码的调用。特殊设备文件也叫设备特殊文件,它们和普通文件不同,在UNIX范式中有特殊使命。
特殊设备文件通过主设备号和次设备号这两个指针映射到设备,这两个数字存储在特定特殊文件的inode中。主设备号标识特定类别的设备驱动程序(一个驱动程序可用于多个同类型设备),次设备号是指定设备驱动程序内的参数。
每个设备驱动程序都有与设备交互时执行必要功能的例程,像探测、附加、打开、关闭、读取、重置、停止、选择、策略、转储、大小、写入、超时、中断处理和I/O控制(ioctl)等。每个驱动程序这些功能的地址存储在内核的跳转表中,主设备号用于索引跳转表,这通过设备开关表来实现。简单来说,主设备号指向设备开关表中的对应条目,次设备号作为参数传递给设备驱动程序中的相关函数。设备驱动程序可按自身需求解释次设备号,多数情况下将其用作端口号。一旦内核捕获引用,就会在驱动程序的跳转表中查找合适的函数名并转移控制权。对于文件系统模型中无直接对应操作的设备特定操作(如弹出软盘),会使用ioctl系统调用直接向驱动程序传递请求。
以文件方式处理设备是UNIX强大的基本设计元素之一。和文件的所有权、模式、访问权限及保护的成熟解决
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



