3

私はおもちゃの OS システムを変更しようとしていますが、コードの一部とそれが何をするのかを学ぼうとしています。メンバーとして「pcb」構造を持つ「スレッド」構造が与えられました。これは、スレッドを基盤となる物理ハードウェアにインターフェースするプロセス制御ブロックです。

とにかく、この「pcb」構造には、新しく作成されたスレッドの pcb を初期化する初期化関数があります。関数定義は次のとおりです。

void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
    void (*func)(void *, unsigned long));

コードに関して、最後の引数の意味は何ですか? それはコードまたは指示に関連していますか

概念的に、物事が全体像にどのように適合するかについて、私は混乱しています。私の知る限り、スレッドはコードの実行単位です。たとえば、ユーザープログラムに関連している可能性があるため、スレッドをすばやく切り替えると、プロセスが並行して実行されているように見えます。よし、このスレッドには独自のスタック、レジスタ (理解できない)、およびいくつかの制御 (pcb) が必要です。

これがいたるところにある場合は申し訳ありません。参考までに、私はOS161プロジェクトを開始しています。

ありがとう。

4

2 に答える 2

7

関数ポインタです。void を返し、void ポインターと unsigned long を受け取る関数のアドレスを渡します。

したがって、たとえば、関数がある場合:

void myfunc(void *data, unsigned long number);

次に、それを の 4 番目の引数として渡すことができますmd_initpcb

この関数は、作成中のスレッドが実行するコードです。それが終わると、スレッドも終わります。

于 2012-01-18T23:09:03.413 に答える
2

void (*func)(void *, unsigned long)とを受け取り、 を返すfunc関数へのポインタであることを意味します。このパラメーターは新しいスレッドが実行する関数であり、data1 と data2 は新しいスレッドがこの関数に渡すパラメーターであると思います。void*unsigned longvoid

于 2012-01-18T23:12:37.340 に答える