文件系统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
超级会员免费看
订阅专栏 解锁全文

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



