操作系统中的异步I/O、页框回收与文件系统详解
1. 异步I/O
POSIX 1003.1 标准定义了一组用于异步访问文件的库函数。“异步”意味着当用户模式进程调用一个库函数来读取或写入文件时,该函数在读写操作入队后就会立即终止,甚至可能在实际的 I/O 数据传输发生之前就结束。这样,调用进程可以在数据传输的同时继续执行。
以下是 POSIX 异步 I/O 的库函数:
| 函数 | 描述 |
| — | — |
| aio_read() | 从文件异步读取数据 |
| aio_write() | 向文件异步写入数据 |
| aio_fsync() | 请求对所有未完成的异步 I/O 操作进行刷新操作(不阻塞) |
| aio_error() | 获取未完成的异步 I/O 操作的错误代码 |
| aio_return() | 获取已完成的异步 I/O 操作的返回代码 |
| aio_cancel() | 取消未完成的异步 I/O 操作 |
| aio_suspend() | 挂起进程,直到几个未完成的 I/O 操作中至少有一个完成 |
使用异步 I/O 非常简单,具体步骤如下:
1. 应用程序通过通常的open()系统调用打开文件。
2. 用描述请求操作的信息填充struct aiocb类型的控制块。struct aiocb控制块最常用的字段有:
-aio_fildes:文件的文件描述符(由open()