关于 cs-os
cs-os 是面向操作系统学习和系统编程的技能,可生成代码并解释操作系统基础知识,涵盖 POSIX 进程、线程、内存、文件系统、IPC 和系统调用。
主要功能
- 01生成进程管理代码
- 02解释线程与同步机制
- 03使用虚拟内存 API
- 04处理文件系统和目录操作
- 05演示 IPC 机制
- 06讲解 POSIX 系统调用与标准
适用场景
- 01创建 POSIX 子进程
- 02排查线程同步或内存问题
- 03使用管道或套接字实现 IPC
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill cs-os安装后在 Claude Code 中输入/cs-os确认已加载。
详细介绍
用途
此技能使 AI 能够生成代码、解释概念并处理与操作系统基础知识相关的任务,重点涵盖进程、线程、纤程、完全公平调度器(CFS)、虚拟内存、文件系统、进程间通信(IPC)、系统调用和 POSIX 标准。可使用此技能为操作系统相关查询生成准确、可执行的代码片段或详细说明。
适用场景
当用户查询涉及进程管理(例如创建进程)、线程同步、通过虚拟内存 API 分配内存、挂载或读取目录等文件系统操作、管道或套接字等 IPC 机制,或符合 POSIX 标准的系统调用时,请使用此技能。在构建多线程服务器或调试内存泄漏等编码场景中也可使用。
主要能力
- 进程:使用 fork() 创建进程,通过 waitpid() 终止进程,并使用 exec() 系列函数及 EXEC_ENV 等标志进行管理。
- 线程/纤程:使用 pthread_create() 创建线程并设置 pthread_attr_t 等属性;使用 Boost.Context 等用户空间库创建纤程。
- CFS 调度:解释 CFS 算法,包括它如何使用虚拟运行时间(vruntime)实现公平调度;生成使用 sleep() 和 getpriority() 模拟调度的代码。
- 虚拟内存:使用 mmap() 和 MAP_PRIVATE 等标志管理映射,并通过 munmap() 取消映射;使用带有 PROT_NONE 的 mprotect() 处理页错误。
- 文件系统:执行 open() 等操作并使用 O_CREAT|O_EXCL 标志;按指定偏移读写;使用 opendir()/readdir() 遍历目录。
- IPC:使用 pipe() 数组实现管道;通过 msgget()/msgsnd() 使用消息队列;使用 socket(AF_INET, SOCK_STREAM, 0) 创建套接字。
- 系统调用:在 C 代码中封装 getpid() 或 kill() 等 POSIX 系统调用,并使用 errno 检查错误。
- POSIX:使用 POSIX.1 等标准处理线程和文件 I/O,并编写符合实时扩展规范的代码。
使用模式
在查询前添加技能 ID,以调用此技能,例如“cs-os:编写创建进程的代码”。请务必说明具体情境,例如“cs-os:用 C 模拟说明 CFS”。生成代码时,请指定使用 C 或 C++,并包含 POSIX 头文件。模式:查询 -> AI 生成 2-4 行代码片段 -> AI 说明用法。对于多步骤任务,可与其他技能搭配使用,例如先使用 cs-os 编写进程代码,再与网络技能结合。请在 Linux 等 POSIX 环境中测试生成的代码。
常用命令/API
- 进程:使用 fork() 创建子进程;示例:
pid_t pid = fork(); if (pid == 0) execl("/bin/echo", "echo", "Child", NULL); - 线程:使用线程函数调用 pthread_create();示例:
pthread_t thread; pthread_create(&thread, NULL, my_function, NULL); pthread_join(thread, NULL); - CFS 调度:使用 sched_setscheduler() 和 SCHED_OTHER 策略进行模拟;示例:
struct sched_param param; sched_setscheduler(0, SCHED_FIFO, ¶m); - 虚拟内存:使用 mmap() 映射内存;示例:
void *mem = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); if (mem == MAP_FAILED) exit(1); - 文件系统:使用 open() 打开文件;示例:
int fd = open("file.txt", O_RDWR|O_CREAT, 0644); write(fd, buffer, size); close(fd); - IPC:创建管道;示例:
int pipefd[2]; pipe(pipefd); write(pipefd[1], "Message", 7); read(pipefd[0], buffer, 7); - 系统调用:使用 getpid();示例:
pid_t mypid = getpid(); printf("PID: %d\n", mypid); - POSIX:在线程中使用 pthread_mutex_lock();示例:
pthread_mutex_t mutex; pthread_mutex_lock(&mutex); /* Critical section */ pthread_mutex_unlock(&mutex);如果外部操作系统工具(例如基于云的 VM)需要身份验证,请设置$OS_API_KEY等环境变量以进行 API 调用;但 POSIX 系统调用通常不需要身份验证。
集成说明
在 AI 工作流中集成此技能,可在响应处理程序中通过技能 ID 调用,例如,在 Python 脚本中:response = ai_invoke('cs-os', query='Generate fork code')。确保环境符合 POSIX 标准(例如 Ubuntu),并在生成的代码中包含 <unistd.h> 或 <pthread.h> 等必要头文件。对于配置格式,请使用 JSON 设置模拟参数,例如 {"process_count": 5, "memory_size": 1024}。如果与其他技能组合使用,请将输出作为输入传递,例如,将 cs-os 生成的代码用于 cs-networking 技能,以通过套接字实现 IPC。务必使用 gcc 编译并测试代码片段:gcc -o output.c -lpthread。
错误处理
对于系统调用,务必检查返回值并使用 errno;例如:if (fork() == -1) { perror("Fork error"); exit(errno); }。对于线程,使用 pthread_create 的返回码处理 pthread 错误:if (pthread_create(&thread, NULL, func, NULL) != 0) { fprintf(stderr, "Thread creation failed\n"); }。对于文件操作,请验证 fd:if (open("file.txt", O_RDONLY) == -1) { errno_check(); }。使用 strerror(errno) 输出错误消息。对于 IPC,请检查队列 ID:if (msgget(key, 0666) == -1) { handle_error("msgget"); }。在代码生成时,指示 AI 在较高层级的封装中加入 try-catch,或在 C 中优雅退出。
具体用法示例
- 用法:用户要求管理一个用于日志记录的进程。调用:“cs-os: Write code to fork a child process that logs to a file.” AI 响应:生成并解释:
pid_t pid = fork(); if (pid == 0) { int fd = open("log.txt", O_WRONLY|O_CREAT, 0644); write(fd, "Log entry", 9); close(fd); } else { waitpid(pid, NULL, 0); }然后建议在 Linux 上使用./program进行测试。 - 用法:用户询问缓存的虚拟内存。调用:“cs-os: Explain CFS and code for mapping memory.” AI 响应:“CFS 使用 vruntime 进行调度;以下是内存映射代码:void *cache = mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0); if (munmap(cache, 8192) == -1) perror('Unmap failed');”接着:编译并运行,以确认没有发生段错误。
图关系
- 关联集群:computer-science
- 共享标签:os、processes、memory、filesystems、cs、ipc、syscall、posix
- 关联技能:cs-networking(通过 IPC 套接字)、cs-algorithms(通过调度模拟)