文件系统I/O与路径名管理全解析
1. 文件系统I/O方法
文件系统I/O有两种不同的方法:
-read()、write()等相关系统调用
- 将文件内存映射到进程的地址空间
这两种方法的实现方式本质相同,都是先将文件映射到地址空间,然后对映射地址空间内的页面进行分页I/O操作。不过,read()和write()系统调用在读写文件前也会进行文件映射,这一点不如内存映射那么直观。主要区别在于文件映射的位置和执行者:进程通过mmap()将文件映射到自己的地址空间进行内存映射I/O,而内核在执行read()和write()时将文件映射到内核地址空间。
2. 内存映射I/O
- 映射请求处理:将文件内存映射到地址空间的请求由文件系统的
vnode方法vop_map()和seg_vn内存段驱动处理。进程请求将文件映射到其地址空间,映射建立后,文件所代表的地址空间就像普通内存一样,文件系统可以通过访问该内存来执行I/O操作。 - I/O执行机制:内存映射隐藏了文件读写的实际工作,
seg_vn内存段驱动与文件系统协同工作,无需进程发起系统调用即可执行I/O。I/O以页面为单位进