Linux の深い働きについて質問がありました。
CPUでマルチスレッドプロセスが実行されているとしましょう。このような場合、CPU 上で実行されているスレッドがあります。より広い視野で、実行のためにRAMにロードされているプロセスに属する対応するページがあります。
スレッドがシステムコールを行うとしましょう。この後の仕組みはちょっとわかりません。割り込みは呼び出しを生成します。私の質問の 1 つは、誰がこの電話に応答するかということです。
システムに m:n ユーザー レベル スレッドからカーネル レベル スレッドへのマッピングがあるとします。対応するカーネル レベル スレッドがこの呼び出しに応答すると想定しています。
そのため、カーネルは割り込みベクター テーブルを検索し、実行する必要があるルーチンを取得します。次の質問は、割り込みの実行にどのスタックが使用されるかということです。カーネル スレッドのスタックですか、それともユーザー レベルのスレッドのスタックですか? (カーネルスレッドのスタックになると思います。)
プログラムの流れに戻って、操作が を使用してファイルを開くとしましょうfopen
。次の質問は、ISR からシステム コールへのジャンプがどのように行われるかということです。それとも、ISR はシステム コールにマップされていますか?
また、カーネルスレッドが実行されているときのより広い図では、システムコールを実行しているページを格納するために RAM 上の「OS 領域」が使用されると想定しています。
もう一度別の角度から見てください (あなたがまだ私と一緒にいることを願っています) 最後に、対応するカーネル スレッドが CPU スケジューラによって処理されていると想定しています。コンテキスト スイッチでは、ユーザー レベル スレッドから対応するカーネル レベル スレッドへの切り替えが発生します。fopen
システムコールが応答されたとき。
私は多くの仮定を立てましたが、誰かが疑問を解消するか、少なくとも私を正しい方向に導くことができれば、それは絶対に素晴らしいことです.