cs-os について
cs-os は、OS の学習やシステムプログラミング向けに、OS の基礎知識を説明しコードを生成するスキルです。POSIX のプロセス、スレッド、メモリ、ファイルシステム、IPC、システムコールを扱います。
主な機能
- 01プロセス管理コードの生成
- 02スレッドと同期の説明
- 03仮想メモリ API の利用
- 04ファイルシステムとディレクトリ操作
- 05IPC メカニズムの例示
- 06POSIX システムコールと規格の解説
活用シーン
- 01POSIX の子プロセスを作成
- 02スレッド同期やメモリの問題を調査
- 03パイプやソケットで IPC を実装
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill cs-osインストール後、Claude Code で/cs-osを入力して読み込まれたか確認します。
詳細
目的
このスキルは、プロセス、スレッド、ファイバー、完全公平スケジューラ(CFS)、仮想メモリ、ファイルシステム、プロセス間通信(IPC)、システムコール、POSIX 標準を中心に、オペレーティングシステムの基礎に関するコードの生成、概念の説明、タスクの処理を AI が行えるようにします。OS 関連の質問に対して、正確で実行可能なコードスニペットや詳細な説明を提供するために使用します。
使用するタイミング
プロセス管理(プロセスのフォークなど)、スレッドの同期、仮想メモリ API によるメモリ割り当て、ファイルシステムのマウントやディレクトリ読み取りなどの操作、パイプやソケットなどの IPC メカニズム、POSIX 準拠のシステムコールに関するユーザーの質問に、このスキルを適用してください。マルチスレッドサーバーの構築やメモリリークのデバッグなど、コーディングのシナリオで使用します。
主な機能
- プロセス:fork() による作成、waitpid() による終了処理、EXEC_ENV などのフラグを指定した exec() ファミリー関数による管理を行います。
- スレッド/ファイバー:pthread_attr_t などの属性を指定して pthread_create() でスレッドを作成し、Boost.Context などのユーザー空間ライブラリでファイバーを作成します。
- CFS スケジューリング:公平性を保つために仮想実行時間(vruntime)を使用する方法など、CFS アルゴリズムを説明します。sleep() や getpriority() を使用してスケジューリングをシミュレートするコードを生成します。
- 仮想メモリ:MAP_PRIVATE などのフラグを指定して mmap() でマッピングを管理し、munmap() でマッピングを解除します。mprotect() と PROT_NONE でページフォールトを処理します。
- ファイルシステム:O_CREAT|O_EXCL フラグを指定した open()、特定のオフセットでの読み書き、opendir()/readdir() によるディレクトリ走査などの操作を行います。
- IPC:pipe() 配列でパイプを実装し、msgget()/msgsnd() でメッセージキューを使用し、socket(AF_INET, SOCK_STREAM, 0) でソケットを作成します。
- システムコール:getpid() や kill() などの POSIX システムコールを C コードでラップし、errno によるエラーチェックを行います。
- POSIX:スレッドやファイル I/O に POSIX.1 などの標準を使用して準拠を確保し、リアルタイム拡張に準拠するコードを作成します。
使用パターン
クエリの先頭にスキル ID を付けて、このスキルを呼び出します。例:「cs-os: プロセスをフォークするコードを書いて」。必ず「cs-os: C のシミュレーションを使って CFS を説明して」のように、コンテキストを指定してください。コード生成では、POSIX ヘッダーを使った C または C++ での出力を依頼します。パターン:クエリ → 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 呼び出し用に$OS_API_KEYなどの環境変数を設定します。ただし、POSIX システムコールでは通常、認証は必要ありません。
統合に関する注意事項
レスポンスハンドラーでスキル ID を呼び出して、このスキルを AI ワークフローに統合します。たとえば、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 -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"); }。コード生成では、上位レベルのラッパーには try-catch を含めるよう AI に指示するか、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(スケジューリングシミュレーション経由)