1

私は freeBSD プロジェクトを行っています。要件は、4 つのシステム コールを記述することです。

1. set_containerid(int idnum, pid_t pid)
      //set given pid's container ID to idnum
      //child process should inherit parent's containerID
2.create_container(int perms, char *name)
      //perm = 0 means allowing other processes to read/write this container
3.destroy_container(char *name)
4. write_container(char *name, char *message, int len)
5.read_container(char *name, char *message, int len)

だから、私は自分のデータ構造を保持するためにリンクされたリストが必要であることを知っています

Container{
  char* name;
  char* buf;
}

すべてのプロセスがアクセスできるように、このリンクされたリストをどこに置くべきか疑問に思っています。

ところで、システムファイルの変更は許可されています。

4

1 に答える 1

0

これらは本当にシステムコールですか?包括的な回答を提供するには、さらに情報が必要ですが...

それらをカーネルに入れようとするのではなく、/usr/local/lib および /usr/local/include にユーザー ライブラリとして実装することを検討します。

カーネル モジュールのデバッグは、控えめに言っても難しいものです。新しいシステム コールを追加するということは、OS を fork することを意味します。FreeBSD カーネル チームが独自に追加のコールを追加することを決定し、あなたのシステム コールを上書きする可能性があるからです。

それらがシステムコールである必要があると仮定すると、これを作成する最も簡単な方法は、コンテナー デバイス ドライバーを作成することです。この方法では、カーネルでロード可能なモジュールとして実行でき、システムコールの番号付け/命名スキームに干渉しません。デバイス ドライバーは文字の dev エントリ (/dev/container など) を提示し、デバイスの write(2) に writer_container 関数をインターフェイスするライブラリを作成できます。同様に、作成、設定、および破棄は、デバイスで ioctl(2) を使用して実行できます。

いずれにせよ、必要なインターフェースを提供するために、最終的に /usr/local に .h と .a が作成されます。なぜ Container を大文字にしたのですか?

于 2012-08-07T17:10:24.550 に答える