文件系统I/O与路径名管理详解
1. 文件系统I/O
文件系统I/O有两种不同的方法:
-read()、write()及相关系统调用
- 将文件内存映射到进程的地址空间
这两种方法的实现方式相同:先将文件映射到一个地址空间,然后对映射地址空间内的页面执行分页I/O。虽然将文件内存映射到进程地址空间时进行了内存映射很明显,但read()和write()系统调用在读写文件之前也会进行文件映射,这一点不太明显。这两种方法的主要区别在于文件映射的位置和执行映射的主体;进程调用mmap()将文件映射到其地址空间以进行内存映射I/O,而内核将文件映射到内核地址空间以进行读写操作。这两种方法的对比图如下:
graph LR classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px classDef kernel fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px A[mmap()]:::process --> B[File Segment]:::process C[write()]:::kernel --> D[Paged VNODE VM Core<br>(File System Cache and Page Cache)]:::kernel E[read()]:::kern