mcpField
C
cs-os

cs-os

github.com/alphaonedev開発45 回インストール
リポジトリ

cs-os について

cs-os は、OS の学習やシステムプログラミング向けに、OS の基礎知識を説明しコードを生成するスキルです。POSIX のプロセス、スレッド、メモリ、ファイルシステム、IPC、システムコールを扱います。

主な機能

  1. 01プロセス管理コードの生成
  2. 02スレッドと同期の説明
  3. 03仮想メモリ API の利用
  4. 04ファイルシステムとディレクトリ操作
  5. 05IPC メカニズムの例示
  6. 06POSIX システムコールと規格の解説

活用シーン

  1. 01POSIX の子プロセスを作成
  2. 02スレッド同期やメモリの問題を調査
  3. 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, &param);
  • 仮想メモリ: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 では正常に終了するよう指示します。

具体的な使用例

  1. 使用例:ユーザーがログ記録用のプロセス管理を依頼します。呼び出し:「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 を使ってテストするよう案内します。
  2. 使用例:ユーザーがキャッシュ用の仮想メモリについて質問します。呼び出し:「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(スケジューリングシミュレーション経由)

コメント