回顾IO方式
基于 fd 的阻塞式 I/O:read()/write()
非阻塞式 I/O:select()/poll()/epoll()
线程池方式
Direct I/O(数据库软件):绕过 page cache
异步 IO(AIO)
相关数据结构
io_uring有三个相关的系统调用API:
io_uring_setup(2)
io_uring_register(2)
io_uring_enter(2)
io_uring的相关数据结构主要有两个单向环形队列:
在内核当中使用 io_uring
结构体来保存单个环形队列的 head 与 tail,head 用于出队而 tail 用于入队,head == tail
时队列为空:
syscall
io_uring_setup
用于创建io_uring上下文,模板如下:
|
编译命令:(不要忘记加-luring编译选项)
gcc -fno-stack-protector -o test e2.c --static -masm=intel -luring |
io_uring_register()
操作用于异步 I/O 的缓冲区;