gem-universe / blog

0 stars 0 forks source link

[操作系统]27. 设备驱动程序与文件系统 #31

Open supergem3000 opened 6 months ago

supergem3000 commented 6 months ago

27. 设备驱动程序与文件系统 (jyywiki.cn)

设备驱动程序

回顾I/O 设备的抽象:一个能与 CPU 交换数据的接口/控制器。

操作系统:设备也是操作系统中的对象。

设备驱动程序:把系统调用“翻译”成与设备寄存器的交互。(就是一段普通的内核代码)

Linux 内核中最多也是质量最低的代码就是驱动程序。

字节流/字节序列抽象的缺点:设备不仅仅是数据,还有控制。设备的所有额外功能全部依赖ioctl,ioctl非常复杂。

Linux驱动程序 更多的File Operations,如:mmap, flush, fsync

有两个ioctl,历史兼容性问题

存储设备的抽象 磁盘的访问特性:以数据块(block)为单位访问、大吞吐量、应用程序不直接访问(访问者通常是文件系统)。 Linux Block I/O Layer:文件系统和磁盘设备之间的接口。bread, bwrite, bflush...

存储设备的虚拟化

磁盘中存储的数据:程序数据、用户数据、系统数据。。。 字节序列并不是磁盘的好抽象。让所有应用共享磁盘?一个程序 bug 操作系统就没了

文件系统:磁盘的虚拟化 提供合理的 API 使多个应用程序能共享数据;提供一定的隔离,使恶意/出错程序的伤害不能任意扩大。 文件:虚拟的磁盘(字节序列,支持读写操作)。文件描述符:进程访问文件(操作系统对象)的指针。

目录树管理

信息的局部性:将虚拟磁盘 (文件) 组织成层次结构。 Windows:每个设备 (驱动器) 是一棵树。 UNIX/Linux:只有一个根。多个设备怎么办?挂载。

Filesystem Hierarchy Standard (FHS) 规定/bin, /boot等目录用途。

macOS是Unix的内核(BSD),但不遵循Linux FHS。

硬链接 允许一个文件被多个目录引用。目录中仅存储指向文件数据的指针。不能链接目录,不能垮文件系统。

软链接 在文件里存储一个 “跳转提示”。软链接也是一个文件,类似于快捷方式。 软连接带来的麻烦:允许递归、允许成环。所有处理符号链接的程序 (tree, find, ...) 都要考虑递归的情况。