ホームページ  >  記事  >  運用・保守  >  Linux カーネルには main 関数はありますか?

Linux カーネルには main 関数はありますか?

百草
百草オリジナル
2023-07-10 10:09:041866ブラウズ

main 関数は Linux カーネル コードの先頭にあるため、Linux カーネルには main 関数があります。 main 関数は主に、カーネル制御ブロック (KCB) からシステムの環境変数を取得し、システムに必要なモジュールを初期化する役割を果たします。 main 関数はプログラムのエントリ ポイントであり、main はアプリケーションとオペレーティング システムの間で取り決められたインターフェイス名であるため、Linux では各アプリケーションの最初の関数は main でなければなりません。

Linux カーネルには main 関数はありますか?

この記事の動作環境: Linux 5.18.14 システム、DELL G3 コンピューター。

Linux カーネルには main 関数があります。main 関数はプログラムのエントリ ポイントです。Main はアプリケーションとオペレーティング システムの間で合意されたインターフェイス名です。 Linux の各アプリケーション A 関数は main でなければなりません。

Linux カーネルはオペレーティング システムの中核であり、ドライバーの実行、タスクの起動、エラーの処理、システムのメモリの管理、およびオペレーティング システムのその他すべての基盤機能を担当します。この記事では、Linux カーネルの重要な main 関数を紹介します。

main 関数は、Linux カーネル コードの先頭にあります。 main 関数は主に、カーネル制御ブロック (KCB) からシステムの環境変数を取得し、システムに必要なモジュール (メモリ管理、デバイス ドライバーなど) を初期化する役割を果たします。

C 言語では、main 関数は 2 つのパラメータのみを持つことができます。1 つは argc、1 つは argv、argc は整数のみであり、2 番目のパラメータは文字列へのポインタの配列でなければなりません

main関数は他の関数から呼び出すことができないため、プログラム内で実際の値を取得することはできません。では、実際のパラメータ値を main

関数の仮パラメータに割り当てるのはどこでしょうか? 実際、main 関数のパラメータ値はオペレーティング システムのコマンド ラインから取得されます。実行可能ファイルを実行する場合、

DOS プロンプトでファイル名を入力し、実際のパラメータを入力して、これらの実パラメータを main の仮パラメータに転送します。 DOS プロンプトのコマンド ラインの一般的な形式は次のとおりです:

C:>実行可能ファイル名 パラメータ パラメータ...; ただし、main の 2 つの正式なパラメータと in のパラメータには特別な注意を払う必要があります。コマンド ライン。位置に 1 対 1 の対応はありません。

argc: パラメータは、コマンド ライン内のパラメータの数を示します (テキスト名自体もパラメータであることに注意してください)。

rgc は、コマンド ライン入力時のパラメータによって決定されます。

argv は、実際のパラメータ数に基づいてシステムによって自動的に割り当てられます。パラメータは文字列ポインタの配列であり、各要素の値は、コマンド ラインの各文字列の最初のアドレスです (パラメータは文字列として処理されます)。ポインタ配列

の長さはパラメータの数です。配列要素の初期値はシステムによって自動的に割り当てられます

Linux カーネル ソース コード main 関数の分析

1. main 関数は C 言語の入り口です. この文は正しいですが、この文は単なる合意であり、永遠の鉄則ではありません。プログラムのより重要なアセンブリ コードから判断すると、アセンブリが初期化された後、「main」という名前のラベルにジャンプすることだけが合意されています。これは、このラベルの名前も変更できることを意味します。たとえば、C 言語のエントリLinux の場合は start_kernel(); このラベルアドレスから、C 言語の世界は終わります。 mainという名前はみんなの合意があるだけで、Appleの充電ケーブルなどが他のものと違うのと同じで、合意を守らないなら遊んでも大丈夫です。

2. 複数の main 関数はコンパイル中に保存されません。各アプリケーションには main 関数があります (アプリケーションの観点から見ると、アプリケーションのエントリ ポイントが main 関数です)。ただし、アプリケーションは個別にコンパイルされ、一緒にコンパイルされることはなく、オペレーティング システムのカーネルがコンパイルされる可能性はさらに低いです。アプリケーションと対話するためのものです。一緒にコンパイルされています。したがって、複数のメイン間に競合はまったくありません。 !これは、オペレーティング システムとアプリケーション プログラム間の統一インターフェイスである可能性があります。あるいは、main がプログラムのエントリ ポイントであると言う副作用かもしれません。Main は、アプリケーション プログラムとオペレーティング システムの間で合意されたインターフェイス名です。したがって、Linux のすべてのアプリケーションの最初の関数は main でなければなりません。カーネル スケジューリング インターフェイスを変更しない限り。

以上がLinux カーネルには main 関数はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。