リンカーとローダーの存在は、Linuxなどのオペレーティングシステムによって異なりますか?

リンカーとローダーの存在は、Linuxなどのオペレーティングシステムによって異なりますか?

リンカ(コンパイルされたリンクを実行するため)とローダ(実行ファイルを実行するため)の存在は、Linuxなどのオペレーティングシステムに依存しませんか? (私は以前は、Linuxのリンカーとローダーがオペレーティングシステムで提供されているか、他のアプリケーションと同じソフトウェアで提供されていると思いました。今では非常に特別で異なっていると思います。

リンカーとローダーは機械語(ISAレベルなど)に存在しますか? (そのレベルにはオペレーティングシステムはありません。)それともアセンブリ言語レベルですか?

プログラミングソフトウェアの観点から、オペレーティングシステムをプログラミングライブラリとして考えるのは正しいですか?

ありがとうございます。

レベル/レイヤーで、リンカーとローダーがコンピュータシステムのどこにインストールされているかを知りたいです。

コンピュータシステムのレベルの詳細については、Nisanの「コンピュータシステム要素」を参照してください。

ここに画像の説明を入力してください。

接続とロードについては、以下を参照してください。コンピュータシステム:プログラマの視点

ベストアンサー1

リンカ(コンパイルされたリンクを実行するため)とローダ(実行ファイルを実行するため)の存在は、Linuxなどのオペレーティングシステムに依存しませんか? (私はLinuxのリンカーとローダーがオペレーティングシステムで提供されているか、他のアプリケーションなどのソフトウェアで提供されていると思いました。今では非常に特別で異なっていると思います。)

他のアプリケーションと同様に、リンカーとローダーも特定の用途に使用されます。これは、静的プログラムを構築し、動的プログラムを構築およびロードするために重要ですが、「一般的な」アプリケーション(またはランタイムローダーの場合はライブラリ)です。つまり複雑ですが、オペレーティングシステムの特別なサポートに依存しないと言えます。

したがって、あるオペレーティングシステムのプログラムを別のオペレーティングシステムに接続できます(例えばLinuxでWindowsプログラムを構築し、その逆も同様です。あるシステム用に構築された動的リンカーを別のシステムにロードします(Wineを参照)。オペレーティングシステムの主な要件は、新しい実行可能コンテンツを読み込む方法を提供することです(つまり実行中のプログラムが独自に実行可能なメモリを追加できるようにし、プログラムの要件(特に実行可能ファイルとライブラリをロードするために使用されるベースアドレス)に合わせて仮想アドレス空間を十分に制御できるようにします。

リンカーとローダーは機械語(ISAレベルなど)に存在しますか? (そのレベルにはオペレーティングシステムはありません。)それともアセンブリ言語レベルですか?

これらの問題の原因は何であるかはわかりませんが、リンカーはシンボルとアドレスを使用して機能します。インポートとエクスポートのシンボルテーブルを含むオブジェクトファイルと、リンカによって計算された値で埋められた再配置エントリを使用します。

オペレーティングシステムをプログラミングライブラリとして考えるのは正しいですか?

これは非常に制限的です。オペレーティングシステムは実行中のアプリケーションにいくつかのサービスを提供しますが、非常に単純なオペレーティングシステム(8ビットマイクロプロセッサ、MS-DOSなど)の場合でもそれを実行します。たとえば、ハードウェア割り込み、予約などを処理します。プロセス(マルチタスクシステム用)、アクセス権制御(アクセス制御機能付きマルチユーザーシステム用)...

私の考えでは、あなたが言及した図は、コンピュータアーキテクチャを理解する方法よりも本の地図としてより便利です。

おすすめ記事