
アプリケーションをDouble Clickすると起動・・・その時にOS内部で何が行われてるの?
日常的にPCを利用していると、気にする必要もないですが、WindowsアプリケーションをDouble Clickして起動(実行)すると、OS(Operating Sytem)はどのような動き&ステップ踏んでいるのか?ちょびっと気になりますね。簡単に参考まで。
ChatGPT4と会話しながら作成。
Windowsでアプリケーションをダブルクリックして起動するプロセスは非常に複雑で、多くの低レベルのステップを含みます。以下に、より詳細な技術的な説明を提供します。
ユーザーの操作の検出:
ユーザーがアプリケーションのアイコンをダブルクリックすると、Windows OSのユーザーインターフェースコンポーネントがこのイベントを検出します。この検出は、マウスデバイスドライバが生成する割り込みと、それに続くイベントメッセージを介して行われます。
イベントのシェルへの伝達:
イベントメッセージはWindowsのメッセージキューに送られ、シェル(通常はExplorer.exe)によって処理されます。シェルは、ダブルクリックされたアイコンに対応するファイルパスを確認し、関連付けられたアプリケーションを識別します。
CreateProcess関数の実行:
シェルはCreateProcessAPIを呼び出します。このAPIは新しいプロセスの作成、実行ファイルのメモリへの読み込み、初期スレッドの作成を行います。この際、実行ファイルのパス、コマンドライン引数、プロセスの優先順位クラスなどが指定されます。
プロセス環境のセットアップ:
OSはプロセスの環境ブロックをセットアップし、プロセスアドレス空間内に必要な実行ファイルとライブラリをマッピングします。このプロセスには、環境変数、レジストリ設定の読み込み、必要なシステムリソースの確保が含まれます。
実行ファイルのロードと初期化:
実行ファイルがメモリにロードされると、OSはファイルのPE(Portable Executable)ヘッダを解析し、エントリポイント(通常はmainまたはWinMain)への制御を移します。初期化コードが実行され、さらなるライブラリやリソースの読み込みが行われます。
メッセージループの処理:
アプリケーションが初期化を完了すると、メインスレッドはメッセージループに入ります。このループは、OSからのメッセージ(ユーザー入力、システムイベントなど)を取得し、適切なハンドラ関数で処理します。
アプリケーションの実行:
アプリケーションは実行を続け、ユーザーからの入力に応じて、データの処理、画面の更新、ファイルの読み書きなどの操作を行います。
プロセスのクリーンアップと終了:
ユーザーがアプリケーションを終了させると、メッセージループが終了し、アプリケーションはクリーンアップを行います。開かれていたリソースの解放、オープンされていたファイルのクローズ、確保されたメモリの解放などが含まれます。最終的にExitProcessが呼ばれ、プロセスが終了します。
このプロセスは、実際のアプリケーションやOSの環境によって、さらに多くの詳細や例外処理を含む可能性があります。