系统调用参考
OpenOS 采用 Channel/Handle 模型,共实现 44 个系统调用。以下是完整的系统调用表。
系统调用编号
Section titled “系统调用编号”来自 kernel/src/syscall/number.rs:
Channel (5)
Section titled “Channel (5)”pub const SYS_CHANNEL_CREATE: u64 = 0x01;pub const SYS_CHANNEL_SEND: u64 = 0x02;pub const SYS_CHANNEL_RECEIVE: u64 = 0x03;pub const SYS_CHANNEL_CALL: u64 = 0x04;pub const SYS_CHANNEL_REPLY: u64 = 0x05;Handle (3)
Section titled “Handle (3)”pub const SYS_HANDLE_CLOSE: u64 = 0x10;pub const SYS_HANDLE_DUPLICATE: u64 = 0x11;pub const SYS_HANDLE_TRANSFER: u64 = 0x12;Process (7)
Section titled “Process (7)”pub const SYS_PROCESS_CREATE: u64 = 0x30;pub const SYS_PROCESS_START: u64 = 0x31;pub const SYS_PROCESS_EXIT: u64 = 0x32;pub const SYS_PROCESS_WAIT: u64 = 0x33;pub const SYS_BRK: u64 = 0x34; // 设置堆边界pub const SYS_MMAP: u64 = 0x35; // 内存映射pub const SYS_MUNMAP: u64 = 0x36; // 取消映射Thread (3)
Section titled “Thread (3)”pub const SYS_THREAD_CREATE: u64 = 0x40;pub const SYS_THREAD_EXIT: u64 = 0x41;pub const SYS_THREAD_YIELD: u64 = 0x42;Socket (9)
Section titled “Socket (9)”pub const SYS_SOCKET: u64 = 0xA0; // 创建套接字pub const SYS_BIND: u64 = 0xA1; // 绑定地址pub const SYS_LISTEN: u64 = 0xA2; // 监听连接pub const SYS_ACCEPT: u64 = 0xA3; // 接受连接pub const SYS_CONNECT: u64 = 0xA4; // 连接远程pub const SYS_SENDTO: u64 = 0xA5; // 发送到指定地址pub const SYS_RECVFROM: u64 = 0xA6; // 从指定地址接收pub const SYS_CLOSE_SOCK: u64 = 0xA7; // 关闭套接字pub const SYS_DNS_RESOLVE: u64 = 0xA8; // DNS 解析硬件访问 (5)
Section titled “硬件访问 (5)”pub const SYS_PORT_IN: u64 = 0xB0; // 读取 I/O 端口pub const SYS_PORT_OUT: u64 = 0xB1; // 写入 I/O 端口pub const SYS_MMIO_MAP: u64 = 0xB2; // 映射 MMIO 内存pub const SYS_MMIO_UNMAP: u64 = 0xB3; // 取消 MMIO 映射pub const SYS_IRQ_WAIT: u64 = 0xB4; // 等待 IRQ文件系统元数据 (6)
Section titled “文件系统元数据 (6)”pub const SYS_FS_UNLINK: u64 = 0xC0; // 删除文件pub const SYS_FS_RENAME: u64 = 0xC1; // 重命名文件pub const SYS_FS_MKDIR: u64 = 0xC2; // 创建目录pub const SYS_FS_RMDIR: u64 = 0xC3; // 删除目录pub const SYS_FS_STAT: u64 = 0xC4; // 获取文件状态pub const SYS_FS_READDIR: u64 = 0xC5; // 读取目录条目事件 (4)
Section titled “事件 (4)”pub const SYS_EVENT_CREATE: u64 = 0xF2;pub const SYS_EVENT_SIGNAL: u64 = 0xF3;pub const SYS_EVENT_WAIT: u64 = 0xFB;pub const SYS_EVENT_DESTROY: u64 = 0xFC;服务发现 (2)
Section titled “服务发现 (2)”pub const SYS_ENDPOINT_REGISTER: u64 = 0xF5;pub const SYS_ENDPOINT_DISCOVER: u64 = 0xF6;文件系统 I/O (5)
Section titled “文件系统 I/O (5)”pub const SYS_FS_OPEN: u64 = 0xF7;pub const SYS_FS_READ: u64 = 0xF8;pub const SYS_FS_WRITE: u64 = 0xF9;pub const SYS_FS_CLOSE: u64 = 0xFA;pub const SYS_FS_SEEK: u64 = 0xFF; // 文件定位网络 (2)
Section titled “网络 (2)”pub const SYS_NET_SEND: u64 = 0xFD;pub const SYS_NET_RECEIVE: u64 = 0xFE;调试 (3)
Section titled “调试 (3)”pub const SYS_CONSOLE_WRITE: u64 = 0xF0;pub const SYS_CONSOLE_READ: u64 = 0xF4;pub const SYS_SLEEP: u64 = 0xF1;RAX = 系统调用号RDI = 参数 1RSI = 参数 2RDX = 参数 3R10 = 参数 4R8 = 参数 5R9 = 参数 6
返回值: RAX = 结果(正数)或错误码(负数)错误码:
-1 = EINVAL(无效参数) -2 = ENOENT(未找到) -3 = EPERM(权限不足) -4 = ENOMEM(内存不足) -5 = EBUSY(资源忙) -6 = EPIPE(Channel 已关闭) -7 = EAGAIN(会阻塞) -8 = ETIME(超时) -9 = EFAULT(错误指针)-10 = ENOSYS(未知系统调用)| 类别 | 数量 | 状态 |
|---|---|---|
| Channel | 5 | 已完成 |
| Handle | 3 | 已完成 |
| Process | 7 | 已完成 |
| Thread | 3 | 已完成 |
| Socket | 9 | 已完成 |
| 硬件访问 | 5 | 已完成 |
| 文件系统元数据 | 6 | 已完成 |
| 事件 | 4 | 已完成 |
| 服务发现 | 2 | 已完成 |
| 文件系统 I/O | 5 | 已完成 |
| 网络 | 2 | 已完成 |
| 调试 | 3 | 已完成 |
| 总计 | 54 |
- Handle 与 Rights - 能力系统实现
- Channel IPC - Channel 通信机制
- 架构概览 - 系统整体设计