web-dev-qa-db-ja.com

LinuxおよびWindowsのプログラムローダー

LinuxとWindowsのローダーは何と呼ばれているのでしょうか、つまり、それらのコマンド名は何ですか? Loaders 'の定義は

コンピューティングでは、ローダーは、プログラムのロードを担当するオペレーティングシステムの一部です。

4
Tim

Linuxで「ローダー」と呼べるものは少なくとも3つあります。さまざまなオブジェクト(.o)ファイルとアーカイブ(.a)ファイルを1つの実行可能ファイルにまとめるコンパイルの「ld」部分は1つです。 「ld」は、共有オブジェクト(.so)ファイルもチェックして、動的リンカーが正しく機能するかどうかを確認します。

ダイナミックリンカー(do man ld.so(詳細については)ELF形式の実行可能ファイルを起動する一環として、Linuxカーネルによって実行されます。 ELFファイルからリンク情報を読み取り、(少なくとも)共有オブジェクトファイル(.soサフィックス)にマップします。詳細はやや複雑で、少なくとも時々GOTの更新が含まれます。これは、コンパイルされた分岐先をライブラリコードの実際のロードされたアドレスにマップするメモリ内のセクションです。詳細については http://netwinder.osuosl.org/users/p/patb/public_html/elf_relocs.html を参照してください。

Linuxカーネルには、実行可能ファイルを読み込む部分もあります。これは、「ローダー」と呼ばれることもあります。 Linuxカーネルを構成するときに、これらの実行可能ファイル形式の一部(主にa.out)ローダーを含めるか除外するかを選択できます。私はlinux 2.6.20.9のコードを横にしていて、linux-2.6.20.9/fs /:binfmt_aout.c、binfmt_elf.c、binfmt_script.c、およびその他のいくつかのさまざまな実行可能形式の「ローダー」を見つけました。

私はWindowsがこの同じプロセスをどのように実行するかについてはほとんど知りませんが、同じことのほとんどまたはすべてを実行する必要があります。

6
Bruce Ediger

ローダーは kernel の一部であり、通常 システムコール の一部として呼び出されます。コマンドラインで入力する名前付きのコマンドではありません。代わりに、コマンドの後にEnterキーを押すか、アイコンをダブルクリックするなどの操作を行うと、シェル(コマンドラインまたはGUI)がそれを呼び出します。

5

厳密に答える:何もない。

プログラムをロードするコマンドは、コマンドとして存在しません。単純な理由から、通常、OSコマンドは実際にはプログラムです。次に、プログラム自体を最初にロードする必要があるときに、他のプログラムをロードすることになっているプログラムをどのようにロードできますか?

定義のセマティックスをドリルスルーした場合...最良の答えは「シェル」です。 Shellは、他のプログラム(コマンド)をロードするコマンドです。

Windowsでは、Explorer.exe、cmd.exe、debug.exeであり、他にもいくつかあります。

2
user7071

ここでのアイデアの核心は、OSがプログラムのロードを駆動していることです。 LinuxまたはWindowsのいずれかにプログラムをロードする直接コマンドはありません。これはすべてOS自体によって処理されます。このプロセスでは、OSがメモリ、スタック/ヒープスペース、必要なすべてのレジスタ、およびプログラムステータスレジスタを割り当てます。これにより、プロセスが中断または中断されたときに、これらすべてが追跡されます。これは、「保護された/ユーザー」モードがコンピュータを爆破するのを防ぐ方法です。これは、使用すべきでないコマンドを使用しているため、常に3つの障害が発生するためです(これのほとんどは、リング0で実行されます。私たちから削除されました)。

他の人が指摘している項目は、.exeの.binとgcc/asm/etcのリンカー/ローダーであり、OSがプログラムのロードを呼び出すときにのみファイルを設定しますが、これらはまだ直接ロードに影響しませんプログラム(ldを呼び出して、実際にRAMでプログラムをトスし、レジスターをセットアップすることができるため、プログラムをコンパイルしてロードするように指示するようにプログラムに指示することができるため) x、y、zを登録し、メモリ位置0x0000FFFF ....)から開始しますdiety/osそこに配置します。

1
Jeff Langemeier

@falconが述べたように、Linuxローダーは「ld」と呼ばれます。 Windowsでは、プログラムのロードと実行の詳細が実際にどの程度公開されているのかわかりません。

1
Scott C Wilson