0

プロセスの実行中に fork() ID が呼び出されると、別のメモリ空間で同じメモリ内容を持つ新しいプロセスが作成されます。したがって、これらは異なるプロセスであるため、異なるプロセス記述ブロックを持ち、スケジューリング アルゴリズムによって与えられた機会に従って実行されます (PCB はプログラム カウンター値を保持します)。

しかし、プロセスが別のスレッドをポーンすると、そのスレッドはそのアドレス空間を共有します。私の質問は、このスレッドの実行に関するものです:-スレッドに は、異なるプログラムカウンター値を持つ個別のPCBが与えられ、スケジューリングアルゴリズムは次に実行するスレッドをスケジュールしますか? yes場合、スレッドに割り当てられた関数が実行を終了した直後に、スレッドはどのように実行を停止しますか。これは、その関数が子スレッドのスタック上にある唯一の関数であり、それが戻ったときに他の関数に移動できないためですか?

4

1 に答える 1

1

Typically, the scheduler/dispatcher handles threads. Threads are the system objects that have execution and the Thread Control Blocks, (or whatever it's called on whatever OS), will have their own stack, register save, (especially stack pointer, ie where the PC is pushed upon interrupt), thread priority, other thread-specific data and a PCB pointer to the process it belongs to. The PCB has memory management data, access-control data, permissions etc, ie. data specific to a process. Processes do not have any execution except insofar as every process must own at least one thread, (usually, but not exclusively, the one raised by the loader when the process was created).

If the thread code exits by returning from the top-level function that was used in its creation, (by no means the most common means for a thread to be terminated), it will pop off a return address that was placed on its stack at creation time and so make a 'TerminateThread', (or whatever), system call, resulting it its own suicide.

Obviously, a very broad overview of a 'typical' OS. Details are OS dependent, (and, indeed, vary with releases).

于 2012-08-25T18:43:24.510 に答える