对于到裸设备和快速I/O文件的内核异步I/O (KAIO),内核分配一个异步I/O请求数据结构并调用设备驱动其中的一个条目指针设置异步I/O请求。设备驱动器然后将物理I/O操作放入队列并返回控制给调用进程。当物理I/O操作完成时,硬件产生一个CPU中断,CPU切换到中断服务上下文并带哦用设备驱动器中断服务过程更新异步I/O请求数据结构并可能以SIGIO唤醒调用进程。如果SIGIO异步通知没有实施/启用,进程必须调用aio_error()通知请求完成。aio_return()调用用来得到和处理I/O请求的结果。
因为内核包括为异步I/O包含了具体的支持,所以成为内核异步IO;而线程异步IO实施是仅仅使用内核轻量级处理函数模仿,通过在不同的线程中实施多个同步IO请求。由于独立的I/O请求和完成,内核异步IO同时调用分段的异步I/O。
最重要的是KAIO请求完成发生在中断服务上下文中,并且完全在设备驱动器中断服务过程中实施。这就是为什么内核异步io仅在裸设备和快速io中可用,并且要求驱动器在OS内核中。一些OS同时要求额外的步骤以配置KAIO。
如下:
Solaris 不需要特别的配置;
HP-UX asynchdisk和asynchdsk驱动器必须包含在内核中;/dev/async设备文件的主号必须是101;max_async_ports必须大于所有实例中的processes参数,dba用户组必须具有MLOCK权限,在/etc/privgroup中。
AIX smit aio菜单下的state参数必须为available。
Tru64 Unix 不需要特别的配置;
Linux 在2.5内核中不可用;
Windows NT/2000 不可用;
当kaio可用时,无论何时在数据库文件上请求异步i/o,Oracle将自动使用内核异步io。
阅读(746) | 评论(0) | 转发(0) |