![]() |
連載
|
|
Page1
Page2
|
|
Back Issue
|
||
|
前回は、パソコン上でWindows OSやアプリケーション・ソフトウェアなどのプログラムがどのようにして動作しているのかを、PCというハードウェア環境の観点で説明した。今回は、アプリケーションが起動する仕組みについて、Windows OSというソフトウェア実行環境の視点で解説する。
ただし、今回説明するのは、.NETアプリケーション(以降、.NETアプリ)が.NET Frameworkの実行環境(「CLR:Common Language Runtime」と呼ばれる)の上で動作を開始するまでの処理過程の話である。実際に.NETアプリケーションがCLRにより実行される仕組みついては次回で解説する予定だ。
前置きはこれくらいにして、さっそく「.NETアプリケーションが起動する仕組み(Windowsローダーの働き)」について説明していこう。なお本稿で提示されている図版などは、説明を簡略化するために、すべての詳細を正確に明記してはいないことをあらかじめお断りしておく。
Windows OSという視点から見た場合のプログラム実行の仕組み
まずはWindows OSを利用するユーザーの視点で、Windows OS上でアプリケーションが起動する際の処理プロセスについて考えてみよう。
●Windows OS上でアプリケーションが起動する際の処理プロセス
ここで前提知識として、次のことを知っておいてほしい。
それは、.NETアプリケーションであろうと、Win32アプリケーションであろうと、それらのプログラムがWindows OSから最初に起動される処理過程は、基本的に同じであるということだ(なお、「.NETアプリケーション」と「Win32アプリケーション」の違いについては、前回の説明を参照してほしい)。
従って本稿では、.NETアプリケーションの起動例を取り上げることで、Windows OS上でのアプリケーション起動の仕組みを説明することにした。例に用いる.NETアプリケーションとして、本稿では「WindowsApplication1.exe」というシンプルなWindowsアプリケーションを用意した。
次の画面は、そのアプリケーションをダブルクリックして起動したときの、処理の流れを図示したものである。
![]() |
||||||||||||
| Windows OS上でアプリケーションが起動する際の処理の流れ図 | ||||||||||||
| ディレクトリ(この例では「C:\fdotnet\WindowsApplication1\bin\Release」)の中にあるWindowsアプリケーション「WindowsApplication1.exe」をダブルクリックして実行したときの処理プロセスを図示したもの。なお、 |
||||||||||||
|
それでは、ここで図示されている一連の処理の流れを、1つずつ、もう少し詳しく説明していこう。
●
ユーザーがファイル「WindowsApplication1.exe」をダブルクリックする
この一連の処理プロセスの中で特に注目すべきは、これまで「プログラム」や「アプリケーション」と呼んでいたものの正体が、実は単なる<ファイル>に過ぎなかったということである。なるほど、ファイルの種類には、例えば「テキスト・ファイル」「Word文書ファイル」などなど、いろいろなものがあるが、プログラムもそれらのファイルと本質的には何ら変わらないわけである。
しかしよく考えてみると、Windows OSにとってこれが1つの課題・障壁となるのではないだろうか。もしそれらがすべて「ファイル」という同じものであるのならば、Windows OSはそのファイルが一体どのようなものか、つまり「ファイルの種類」(以降、ファイル・タイプ)を認識しなければならないはずだ。このファイル・タイプが分からなければ、そのファイルに対する適切な操作方法(例えば「Windows OS上でプログラムとして直接実行する(Execute)」のか、「アプリケーションでそのファイルを開く(Open)」のかなど)も分からないはずだからである。
当然ながらWindows OSはこの課題をクリアしている。例えば、ユーザーが「memo.txt」というテキスト・ファイルをダブルクリックすると、Windows OSは、そのファイルのファイル・タイプを正確に判定して(この例では、「テキスト・ファイルである」と判定される)、ユーザーが要求するアクション(この例では、「アプリケーションでそのファイルを開くこと」)を適切に開始する。これによりWindows OSは、ユーザーが意図するアプリケーションを、正しく起動できるわけである(この例では、「メモ帳(notepad.exe)」などのテキスト・エディタ・アプリケーションで実際に開かれる)。
●
Windows OSが「WindowsApplication1.exe」がプログラムかどうかを判定する
このように、OSによるプログラムの起動では、「ファイル・タイプの判定」作業が肝心である。ファイル・タイプの判定方法は、OSごとに異なるが*1、Windows OSでは、「拡張子の名前」(この例では「.exe」)によって行われている(これは「拡張子とファイル・タイプの関連付け」と呼ばれるWindows OSが持つ機能の上に成り立っている)。つまり、先ほどの課題に対するWindows OSの場合の解決方法は、「拡張子」なのである。
| *1 ちなみにMac OSは、基本的にファイル・タイプを「拡張子」では判定しない。その代わりに、Mac OS専用のファイル・フォーマット(「Mac OS拡張フォーマット」または「HFS Plusフォーマット」と呼ばれる)のヘッダ部分(=多くの場合、ファイルの先頭部分に配置されるファイル自体の構成内容に関する情報を格納するための領域)にあるファイル情報(「Finder情報」と呼ばれる)を用いて、ファイル・タイプを判別している。ただし最新のMac OS Xなどでは、Windows OSと同じように(Finder情報を使わずに)「拡張子」で判定されるケースも多いらしい。 |
Windows OSでは、ファイルの拡張子が「.exe」である場合、そのファイルのファイル・タイプは「実行可能ファイル(Executable File)だ」と識別される。つまり、「Windows OS上で実行可能なプログラムである」と判定されるわけだ。
従って、本稿の例の「WindowsApplication1.exe」というファイルには、「.exe」という拡張子が付けられているために、実行可能ファイルとして取り扱われて、実際にプログラムとして実行が開始されることになる。
●
Windows OSは「WindowsApplication1.exe」をプログラムとして実行する
プログラムの実行開始を受け持つWindows OSの機能は、「Windowsローダー(Windows Loader)」と呼ばれている。Windowsローダーは、「実行可能ファイル」と判定されたファイルを、「Microsoft Portable Executeフォーマット」*2(以降、「PEフォーマット」)と呼ばれるプログラム実行用(主にWin32アプリケーション)のファイル・フォーマット(=ファイル形式)で作成されたファイルとして取り扱う。
つまり、すべての実行可能ファイル(.exeファイル)は、PEフォーマットで作成されている必要があるわけだ。これについても、Win32アプリケーションであろうが、.NETアプリケーションであろうが、等しく同じ条件である。すなわち、.NETアプリケーションといえども、Windows OSからは「実行プログラムの1つである」と見えているのだ*3。
| *2 PEフォーマットは、Win32アプリケーションの基本フォーマットで、.NETアプリケーションやWin64アプリケーションでも用いられるフォーマットである。 |
| *3 厳密にいえば、Windows XPやWindows Server 2003以降のOSは、.NETアプリケーションの存在を知っており、.NETアプリケーションを「Win32アプリケーション」ではなく、きちんと「.NETアプリケーション」として認識している(詳細後述)。 |
実行可能ファイルが正しくPEフォーマットで作成されていれば、Windowsローダーは、そのファイルを<Win32アプリケーション>のプログラムとして取り扱い始め、実際にプログラムとして起動する。その際の処理過程は次の図のとおりだ。
![]() |
| Windowsローダーによるアプリケーションの起動プロセス |
| Windowsローダーは、PEフォーマットで作成された実行可能ファイルを、<Win32アプリケーション>のプログラムとして起動する。具体的な手順の内容は以下の記述を参照。 |
Windowsローダーは、PEフォーマットに基づいて、実行可能ファイルの先頭部分に格納されている情報(以降、「PEヘッダ」)を解析する
Windowsローダーは、解析結果に基づき、実行に必要なプログラム・コードをメイン・メモリ上にロードする
Windowsローダーは、解析結果に基づき、プログラムの実行開始位置(Entry Point。以降、「エントリ・ポイント」)にアクセスし、そこに記述された処理命令をCPUに実行させる
CPUが、そのエントリ・ポイントから順番に1つずつ処理命令を実行していくことで、プログラムが実行開始される
これらの一連のWindowsローダーの処理がすべて完了して、初めてプログラムが現実に実行される(本稿の例でいえば、[Form1]というWindowsアプリケーションのウィンドウが表示される)わけである。
●
Windows OSのデスクトップ画面上に、[Form1]というタイトルでアプリケーション・ウィンドウが表示される
ここまでが、.NETアプリケーションが<Win32アプリケーション>として起動するまでの流れである。そして
の処理段階からは、.NET Frameworkの実行環境「CLR」へと、その実行の舞台が移される。つまりプログラムが、<Win32アプリケーション>という存在から、<.NETアプリケーション>という存在へと変ぼうするのだ。この
の処理段階以降の話については、次回詳しく説明するので、それまでお待ちいただきたい。
以上が理解できたら、
の処理内容をもっと具体的に細かく見ていくことにしよう。次のページでは、Windowsローダーが処理する手順で、プログラムの内部を1つずつ追っていくことにする。
| INDEX | ||
| .NETの動作原理を基礎から理解する! | ||
| 第2回 .NETアプリケーションが起動する仕組み | ||
| 1.Windows OSという視点から見た場合のプログラム実行の仕組み | ||
| 2.Windowsローダーがアプリケーションを起動する処理プロセス | ||
| 「.NETの動作原理を基礎から理解する!」 |
ホワイトペーパー(TechTargetジャパン)
- .NET TIPS - .NET開発のテクニックとヒント集 - (2010/3/18)
− GridViewコントロールを階層表示させるには?
− Windowsフォームのボタンに画像を表示するには?
− C#でnullチェックを簡潔に行うには? - Chapter15:LINQとクエリ式 (2010/3/17)
C# 3.0の目玉機能であるLINQについて、さまざまな記述例を交えながら徹底解説。書籍『[完全版]究極のC#プログラミング』より転載 - VBラムダ式 基礎文法最速マスター (2010/3/16)
今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる - ASP.NET MVC 2がリリース (2010/3/15)
ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |









