仮想メモリの観点から実行可能ファイルをロードする

仮想メモリの観点から実行可能ファイルをロードする

[[373936]]

この記事はWeChatの公開アカウント「Linux Bathhouse」から転載したもので、著者はLengmianbulelengです。この記事を転載する場合はLinux Bathhouse公式アカウントまでご連絡ください。

実行可能ファイルをダブルクリックして開くと、コンピューターは具体的に何を実行するのでしょうか?ディスク上の実行可能ファイルはどのようにメモリにロードされるのでしょうか?多くのプログラマーにとって、これはまだ答えるのが容易ではない質問です。

今回は、実行ファイルの読み込みプロセスを仮想メモリの観点から見て、実行ファイルの読み込みが開始されてから最初の命令が実行されるまでの間に何が起こるかを詳しく分析してみましょう。

この記事では、プロセスの概念、ELF ファイル構造、仮想メモリの定義、ページングの概念、およびデマンド ページングの動作原理については詳しく説明しません。以前の記事でそれらについて説明しました。興味のある友人は自分で検索することができます。

読み込みは、おおまかに次の手順に分けられます。

  1. プロセスの作成
  2. 仮想アドレス空間の作成
  3. 実行可能ファイルのヘッダーを読み取り、仮想アドレス空間と実行可能ファイル間のマッピング関係を確立する
  4. CPU命令レジスタを実行可能ファイルのエントリアドレスに設定する
  5. 実行し、ページフォールト割り込みをトリガーする

プロセスの作成

言うまでもなく、プロセスを作成すると、このときにプロセス識別子やプロセス優先度などの情報も作成されます。この時点では実行可能ファイルは含まれていないことに注意してください。

仮想アドレス空間の作成

このステップは、実際にはプロセス作成の一部としてカウントされる必要があります。実際には、物理​​メモリとの接続を確立するためにページ テーブル (マルチレベル ページ テーブル) を作成します。この時点ではページ テーブルは空です。この時点では、実行可能ファイルはまだ存在しません。

実行ファイルヘッダーの読み取り

これは重要なステップです。プロセスは、実行可能ファイル ヘッダー、つまり ELF ファイルのヘッダーの読み取りを開始します。この時点では、プロセスは ELF ファイル ヘッダーのみを読み取り、他のセグメントは読み取りません。 ELF ファイル ヘッダーには、実行可能ファイルの各セグメントの開始アドレスと長さ、実行可能ファイルのエントリ アドレスなどの情報が含まれています。ここでの「アドレス」は仮想メモリ アドレスを指すことに注意してください。

ここで強調しておきたいのは、ロード プロセス全体では ELF ヘッダーのみが読み取られ、それ以上は読み取られないということです。 ELF ヘッダーには実行ファイル全体のリズムが記録されるため、ELF ヘッダーに基づいて実行ファイル全体のフレームワークを確立できます。したがって、この手順ではディスクとの接続を確立します。簡単な例を挙げると、ページ フォールトが発生した場合、オペレーティング システムは不足しているページを物理メモリのどこにロードすればよいでしょうか。これがこのステップの重要なポイントです。仮想メモリ アドレスとディスク アドレス間の接続を確立し、ページが欠落している場合に、対応するディスク アドレスを見つけて物理メモリにロードできるようにします。

強調する必要があるもう 1 つの点は、プロセスのこの時点では、実際には関数マッピング関係のみを保存することと同じであるということです。次の図はより直感的に理解しやすいでしょう。

この写真を覚えておいてください。後でメモリ管理について説明するときに、プロセスとメモリを組み合わせます。そうすれば、カーネルを俯瞰でき、カーネルを制御しているように感じられます。

CPU命令レジスタを設定する

上記の 2 つの手順により、仮想アドレス空間と物理メモリおよびディスク間のマッピング関係が確立されました。これでこのプログラムを実行する準備が整いました。最初に実行される命令のアドレスはどこですか? ELF ヘッダー内。 CPU 命令レジスタの値を最初の命令のアドレスに設定するだけです。

実行し、ページフォールト割り込みをトリガーする

CPU がエントリ アドレスから命令をフェッチすると何が起こるかを考えてみましょう。エントリ アドレスが .text セグメントの先頭 (図に示すように 0x8049000) を指していると仮定します。 CPU はこの仮想アドレスを使用してページ テーブルを検索し、ページがロードされていないことを検出して、ページ フォールト割り込みをトリガーします。この時点で、オペレーティング システムが引き継ぎ、仮想アドレス空間とディスク間の以前に確立されたマッピング関係から、ディスク上のこのページのアドレスを見つけます。次に、このアドレスからページを読み取り、物理メモリにロードして、ページ フォールト割り込みが完了します。 CPU はエントリ アドレスから再度命令をフェッチし、ページ テーブルから物理アドレスを取得し、メモリから対応する命令を取得して CPU に渡します。

プロセスが実行されると、ページ フォールトが継続的に発生し、ディスク上の実行可能ファイルが徐々にメモリにロードされます。

要約する

上記は単純な実行可能ファイルの読み込みプロセスです。強調すべき最も重要な点は、実行可能ファイルのデータが要求に応じて物理メモリにロードされ、ページ フォールト割り込みによってプロセスの実行が駆動されることです。

<<:  Cohu、統合クラウド・プラットフォームの構築にOracle Fusion Cloud Applicationsを採用

>>:  パブリッククラウドにおけるDockerアプリケーション処理能力の評価

推薦する

Licloud: 香港専用サーバー、15M 帯域幅、月額 29.99 ドルから、オプションで BGP\CN2\Huawei 専用ネットワーク

Licloud は現在、香港データセンターの独立サーバーを非常に低価格で提供するプロモーションを実施...

主流の検索エンジンの原則

今日は検索エンジンの原理を紹介します。まずは写真を見てみましょう…次に、階層ごとに説明します。 1....

コミュニティウェブサイトでユーザーに帰属意識を感じさせる方法

コミュニティ ウェブサイトを発展させるには、安定した忠実なユーザーが必要になることがよくあります。コ...

アマゾン ウェブ サービスのメディアおよびエンターテイメント ソリューションが『アバター: ザ ウェイ オブ ウォーター』の最高レベルの特殊効果の制作を支援

最近、13年ぶりにスクリーンに戻ってきたアバターシリーズの映画『アバター:水の軌跡』が世界各国で上映...

spearwarenetworks: 月額 2.45 ドル、帯域幅 200M、トラフィック無制限、フロリダ州、米国、メモリ 512M/コア 1 基/SSD 20g

SpearwareNetworksは2009年に米国で設立された新興企業で、主に米国南東部のフロリダ...

テンセントクラウドはバーレーンにデータセンターを設立し、海外事業展開を加速すると発表した。

3月1日、テンセントクラウドとバーレーン王国経済開発委員会は協力に関する覚書を正式に締結した。両者は...

約200のAWSサービスの中で、以下の4つは著しく過小評価されている

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

データベースをクラウドに移行する 5 つの理由

データベースの移行には、1 つ以上のソース プラットフォームから別のデータベースへのデータの移動が含...

企業は経験豊富なクラウドコンピューティングのアーキテクトとエンジニアを緊急に必要としています

サーバーレスなどの新興テクノロジーが話題になっているにもかかわらず、2019 年の多くの企業は、まず...

新しいサイトで適切なキーワードを選択すると、ウェブサイトのランキング最適化効果がすぐに得られます

ウェブサイトのランキングを最適化するには、適切なキーワードを選択することが非常に重要です。ウェブサイ...

virtovo-$3.5/Kvm/512m メモリ/50g ハードディスク/1T トラフィック/G ポート/フロリダ

ヴィルトーヴォ、これは良いですね!なぜ良いと言うのですか?なぜなら、以前誰かがトラフィック攻撃を実行...

iPhone 6について知っておくべき5つのこと

iPhone 6は約束通り中国本土には入らなかったが、最近、iPhone 6に関する議論や進展が国内...

JVMの動作原理とスタックとヒープの実装プロセスの詳細な説明

[[267906]]概要オンライン システムでは CPU 100% 問題が発生するため、トラフィッ...

タレントネットワークプロモーションチャネルの長所と短所の簡単な分析

タレントネットワークの運営者として、「良いワインには茂みは不要」という時代は過ぎ去りました。したがっ...