この記事はWeChatの公開アカウント「Linux Bathhouse」から転載したもので、著者はLengmianbulelengです。この記事を転載する場合はLinux Bathhouse公式アカウントまでご連絡ください。 実行可能ファイルをダブルクリックして開くと、コンピューターは具体的に何を実行するのでしょうか?ディスク上の実行可能ファイルはどのようにメモリにロードされるのでしょうか?多くのプログラマーにとって、これはまだ答えるのが容易ではない質問です。 今回は、実行ファイルの読み込みプロセスを仮想メモリの観点から見て、実行ファイルの読み込みが開始されてから最初の命令が実行されるまでの間に何が起こるかを詳しく分析してみましょう。 この記事では、プロセスの概念、ELF ファイル構造、仮想メモリの定義、ページングの概念、およびデマンド ページングの動作原理については詳しく説明しません。以前の記事でそれらについて説明しました。興味のある友人は自分で検索することができます。 読み込みは、おおまかに次の手順に分けられます。
プロセスの作成 言うまでもなく、プロセスを作成すると、このときにプロセス識別子やプロセス優先度などの情報も作成されます。この時点では実行可能ファイルは含まれていないことに注意してください。 仮想アドレス空間の作成 このステップは、実際にはプロセス作成の一部としてカウントされる必要があります。実際には、物理メモリとの接続を確立するためにページ テーブル (マルチレベル ページ テーブル) を作成します。この時点ではページ テーブルは空です。この時点では、実行可能ファイルはまだ存在しません。 実行ファイルヘッダーの読み取り これは重要なステップです。プロセスは、実行可能ファイル ヘッダー、つまり ELF ファイルのヘッダーの読み取りを開始します。この時点では、プロセスは ELF ファイル ヘッダーのみを読み取り、他のセグメントは読み取りません。 ELF ファイル ヘッダーには、実行可能ファイルの各セグメントの開始アドレスと長さ、実行可能ファイルのエントリ アドレスなどの情報が含まれています。ここでの「アドレス」は仮想メモリ アドレスを指すことに注意してください。 ここで強調しておきたいのは、ロード プロセス全体では ELF ヘッダーのみが読み取られ、それ以上は読み取られないということです。 ELF ヘッダーには実行ファイル全体のリズムが記録されるため、ELF ヘッダーに基づいて実行ファイル全体のフレームワークを確立できます。したがって、この手順ではディスクとの接続を確立します。簡単な例を挙げると、ページ フォールトが発生した場合、オペレーティング システムは不足しているページを物理メモリのどこにロードすればよいでしょうか。これがこのステップの重要なポイントです。仮想メモリ アドレスとディスク アドレス間の接続を確立し、ページが欠落している場合に、対応するディスク アドレスを見つけて物理メモリにロードできるようにします。 強調する必要があるもう 1 つの点は、プロセスのこの時点では、実際には関数マッピング関係のみを保存することと同じであるということです。次の図はより直感的に理解しやすいでしょう。 この写真を覚えておいてください。後でメモリ管理について説明するときに、プロセスとメモリを組み合わせます。そうすれば、カーネルを俯瞰でき、カーネルを制御しているように感じられます。 CPU命令レジスタを設定する 上記の 2 つの手順により、仮想アドレス空間と物理メモリおよびディスク間のマッピング関係が確立されました。これでこのプログラムを実行する準備が整いました。最初に実行される命令のアドレスはどこですか? ELF ヘッダー内。 CPU 命令レジスタの値を最初の命令のアドレスに設定するだけです。 実行し、ページフォールト割り込みをトリガーする CPU がエントリ アドレスから命令をフェッチすると何が起こるかを考えてみましょう。エントリ アドレスが .text セグメントの先頭 (図に示すように 0x8049000) を指していると仮定します。 CPU はこの仮想アドレスを使用してページ テーブルを検索し、ページがロードされていないことを検出して、ページ フォールト割り込みをトリガーします。この時点で、オペレーティング システムが引き継ぎ、仮想アドレス空間とディスク間の以前に確立されたマッピング関係から、ディスク上のこのページのアドレスを見つけます。次に、このアドレスからページを読み取り、物理メモリにロードして、ページ フォールト割り込みが完了します。 CPU はエントリ アドレスから再度命令をフェッチし、ページ テーブルから物理アドレスを取得し、メモリから対応する命令を取得して CPU に渡します。 プロセスが実行されると、ページ フォールトが継続的に発生し、ディスク上の実行可能ファイルが徐々にメモリにロードされます。 要約する 上記は単純な実行可能ファイルの読み込みプロセスです。強調すべき最も重要な点は、実行可能ファイルのデータが要求に応じて物理メモリにロードされ、ページ フォールト割り込みによってプロセスの実行が駆動されることです。 |
<<: Cohu、統合クラウド・プラットフォームの構築にOracle Fusion Cloud Applicationsを採用
>>: パブリッククラウドにおけるDockerアプリケーション処理能力の評価
Serverfield は新しいブランドです。中国ではほとんどの人がこのビジネスに馴染みがないと思わ...
1. はじめにRedis はエンタープライズ レベルの開発では非常に一般的ですが、単一の Redi...
ブランド広告と成果広告の論争はずっと存在してきました。ブランドと成果の融合について語るのは簡単ですが...
実は、SEOerの育成や将来という話題は、多くの人から言及されています。私が今日このような話題を繰り...
[1 号につき 1 文] 人間は、勇敢になれるのは恐怖の時間の側面だけである。 (人間は、勇敢になれ...
v.ps は最近、オランダのデータセンターに定期的な国際回線を備えた Nano シリーズという新しい...
最近では、ページデザインの利便性のため、多くのウェブサイトがフレームを使用してウェブサイトをレイアウ...
Google は、データ分析、オープン インフラストラクチャ、オンライン接続の需要が高まっているアジ...
2019 年の Generation Z Insight Report を皆さんと共有したいと思いま...
会社が新しいウェブサイトを引き継ぐとき、私たちは何をすべきでしょうか? どのように始めるべきでしょう...
ウェブマスターが議論するトピックの中で最も頻繁に登場する言葉は、ウェブサイトのプロモーションです。ウ...
今日の話題はとてもシンプルです。問題に直面したとき、私たちは最も重要なことを選ぶべきでしょうか、それ...
企業は、コンテナベースのアプリケーション向けのクラウド コンピューティング アーキテクチャを選択する...
3月14日、国務院の「重大な部門改革」案が全国人民代表大会で承認された。鉄道部は廃止され、その機能は...
SaaS が 2021 年に入ると、風が再び強まります。資本市場の熱狂はそれ自体が物語っているが、そ...