ホームページ >Java >&#&チュートリアル >平均?さらに詳しい内容を提供してください。
プロセスはロジックの抽象化であり、オペレーティング システムの書籍からプロセスについてはよく理解していますが、プロセスの実装についてはあまり知らないかもしれません。この記事では、プロセス実装の一般原則を説明します。
処理の実装は実際には普段コードを書くときと同じで、例えば何かを表現したい場合にはデータ構造を定義します。プロセスも例外ではありません。したがって、プロセスの本質は、一連のデータを保存するデータ構造です。オペレーティング システムは、すべてのプロセスを配列またはリンク リストの形式で管理します。プロセスは 2 種類に分けられると言えます。
1 システム初期化時の最初のプロセスと
2 最初のプロセスを除く他のプロセスは、fork または forkexecute システムコールによって生成されます。
まず、プロセス構造内の情報を見てみましょう。
システムがプロセスを作成すると、cs:ip レジスタの値が設定されます。フォークの場合、ip はfork 関数の後のステートメント IP アドレス。実行の場合、IP アドレスはコンパイラによって指定されます。何があっても、プロセスの実行が開始されると、CPU は cs:ip を解析し、実行する命令を取得します。では、cs:ip はどのように解析されるのでしょうか?
プロセスが実行されると、tss セレクター (GDT インデックス) が tss レジスターにロードされ、その後 tss 内のコンテキストも、cr3、ldt セレクターなどの対応するレジスターにロードされます。 tss 情報の ldt インデックスに従って、まず GDT からプロセス ldt 構造データの最初のアドレスを見つけ、次にコード セグメントなどの現在のセグメントの属性に従って cs からセレクターを取得します。システムは次の結果を取得します。 ldt テーブルからのプロセス線形空間の最初のアドレス、アドレス、長さ制限、権限、その他の情報。リニア アドレスの最初のアドレスと IP 内のオフセットを使用してリニア アドレスを取得し、ページ ディレクトリとページ テーブルを通じて物理アドレスを取得します。物理アドレスが割り当てられていない場合、ページ フォルト例外やその他の処理が発生します。実行される。
プロセスの一時停止、ブロック、および複数のプロセス。これらの概念はよく耳にしますが、次にそれらがどのように実装されるかを見てみましょう。プロセスの一時停止またはブロックには 2 つのタイプがあります。 ###1積極的に一時停止します。スリープ中にプロセスを断続的にハングさせます。睡眠の原理については以前に分析したことがありますので、改めて分析するつもりはありません。一般原則は、タイマーを設定し、期限切れ後にプロセスを起動することです。
パッシブな一時停止のシナリオは数多くあります。主に、プロセスがリソースを申請したが、リソースが条件を満たさず、プロセスがオペレーティング システムによって一時停止される場合です。たとえば、パイプを読み取るとき。パイプから読み取るデータがない場合、プロセスは一時停止されます。パイプの待機キューに挿入します。
パイプにコンテンツが書き込まれると、プロセスが起動されます。プロセスの中断(シグナルで覚醒できるものとシグナルで覚醒できないものの2種類に分けられる)とウェイクアップの実施。
以上が平均?さらに詳しい内容を提供してください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。