I/O 缓冲区管理算法:从 Unix 到新算法的演进
1. 异步写入与物理块设备 I/O
1.1 异步写入函数awrite
异步写入函数awrite用于启动对缓冲区的异步 I/O 操作,其代码如下:
awrite(BUFFER *bp) { bp->opcode = ASYNC; // for ASYNC write; start_io(bp); }awrite调用start_io函数来启动对缓冲区的 I/O 操作,但不会等待操作完成。当异步写入操作完成时,磁盘中断处理程序将释放该缓冲区。
1.2 物理块设备 I/O 操作
每个设备都有一个 I/O 队列,其中包含待处理 I/O 的缓冲区。start_io函数用于处理缓冲区的 I/O 操作,代码如下:
start_io(BUFFER *bp) { enter bp into device I/O queue; if (bp is first buffer in I/O queue) issue I/O command for bp to device; }当 I/O 操作完成时,设备中断处理程序将完成当前缓冲区的 I/O 操作,并在 I/O 队列非空时启动下一