Open supergem3000 opened 6 months ago
27. 设备驱动程序与文件系统 (jyywiki.cn)
回顾I/O 设备的抽象:一个能与 CPU 交换数据的接口/控制器。
操作系统:设备也是操作系统中的对象。
设备驱动程序:把系统调用“翻译”成与设备寄存器的交互。(就是一段普通的内核代码)
Linux 内核中最多也是质量最低的代码就是驱动程序。
字节流/字节序列抽象的缺点:设备不仅仅是数据,还有控制。设备的所有额外功能全部依赖ioctl,ioctl非常复杂。
Linux驱动程序 更多的File Operations,如:mmap, flush, fsync等
mmap
flush
fsync
有两个ioctl,历史兼容性问题
存储设备的抽象 磁盘的访问特性:以数据块(block)为单位访问、大吞吐量、应用程序不直接访问(访问者通常是文件系统)。 Linux Block I/O Layer:文件系统和磁盘设备之间的接口。bread, bwrite, bflush...
bread
bwrite
bflush
磁盘中存储的数据:程序数据、用户数据、系统数据。。。 字节序列并不是磁盘的好抽象。让所有应用共享磁盘?一个程序 bug 操作系统就没了
文件系统:磁盘的虚拟化 提供合理的 API 使多个应用程序能共享数据;提供一定的隔离,使恶意/出错程序的伤害不能任意扩大。 文件:虚拟的磁盘(字节序列,支持读写操作)。文件描述符:进程访问文件(操作系统对象)的指针。
信息的局部性:将虚拟磁盘 (文件) 组织成层次结构。 Windows:每个设备 (驱动器) 是一棵树。 UNIX/Linux:只有一个根。多个设备怎么办?挂载。
Filesystem Hierarchy Standard (FHS) 规定/bin, /boot等目录用途。
/bin
/boot
macOS是Unix的内核(BSD),但不遵循Linux FHS。
硬链接 允许一个文件被多个目录引用。目录中仅存储指向文件数据的指针。不能链接目录,不能垮文件系统。
软链接 在文件里存储一个 “跳转提示”。软链接也是一个文件,类似于快捷方式。 软连接带来的麻烦:允许递归、允许成环。所有处理符号链接的程序 (tree, find, ...) 都要考虑递归的情况。
设备驱动程序
回顾I/O 设备的抽象:一个能与 CPU 交换数据的接口/控制器。
操作系统:设备也是操作系统中的对象。
设备驱动程序:把系统调用“翻译”成与设备寄存器的交互。(就是一段普通的内核代码)
字节流/字节序列抽象的缺点:设备不仅仅是数据,还有控制。设备的所有额外功能全部依赖ioctl,ioctl非常复杂。
Linux驱动程序 更多的File Operations,如:
mmap
,flush
,fsync
等存储设备的抽象 磁盘的访问特性:以数据块(block)为单位访问、大吞吐量、应用程序不直接访问(访问者通常是文件系统)。 Linux Block I/O Layer:文件系统和磁盘设备之间的接口。
bread
,bwrite
,bflush
...存储设备的虚拟化
磁盘中存储的数据:程序数据、用户数据、系统数据。。。 字节序列并不是磁盘的好抽象。让所有应用共享磁盘?一个程序 bug 操作系统就没了
文件系统:磁盘的虚拟化 提供合理的 API 使多个应用程序能共享数据;提供一定的隔离,使恶意/出错程序的伤害不能任意扩大。 文件:虚拟的磁盘(字节序列,支持读写操作)。文件描述符:进程访问文件(操作系统对象)的指针。
目录树管理
信息的局部性:将虚拟磁盘 (文件) 组织成层次结构。 Windows:每个设备 (驱动器) 是一棵树。 UNIX/Linux:只有一个根。多个设备怎么办?挂载。
Filesystem Hierarchy Standard (FHS) 规定
/bin
,/boot
等目录用途。硬链接 允许一个文件被多个目录引用。目录中仅存储指向文件数据的指针。不能链接目录,不能垮文件系统。
软链接 在文件里存储一个 “跳转提示”。软链接也是一个文件,类似于快捷方式。 软连接带来的麻烦:允许递归、允许成环。所有处理符号链接的程序 (tree, find, ...) 都要考虑递归的情况。