Статьи
Полезное
Личное
Связь
Как Windows запускает приложение |
Автор: Coldy |
02.02.2010 23:05 |
Страница 1 из 3 Задумывались ли вы, что происходит, когда вы щелкаете по исполняемой программе в проводнике Windows? В любом случае, в этой статье я расскажу, как именно это происходит внутри операционной системы. Для среднего программиста, не говоря уже об обычном пользователе, такой механизм, как загрузка и выполнение исполняемой программы скрыто сложной и продуманной архитектурой самой операционной системы.
Мы так привыкли к этому и сталкиваемся с этим, каждый раз, когда работаем за компьютером, что даже не задумываемся как это происходит – щелкнув по файлу, мы видим, то или иное поведение данной программы – главное, диалоговое или консольное окно, сообщение или какое-либо иное поведение программы, например, некоторые программы, могут выполняться и вовсе без видимых эффектов, выполняя поставленную задачу, скрыто от пользователя. Давайте попробуем заглянуть за эту ширму, которую возводит для нас операционная система и посмотреть, что же скрывается за простым щелчком по исполняемой программе. Общая схема Исполняемые файлы в операционной системе Windows имеют расширение .exe, впрочем, как мы увидим далее, Windows умеет выполнять и другие типии приложений и расширений. После щелчка по файлу с таким расширением, проводник или аналогичная программа определяет путь к исполняемому файлу, анализирует командную строку (например, на случай запуска программы с параметрами) и некоторые другие факторы, влияющие на запуск программы. Далее, для самого запуска вызывается функция ShellExecute – именно эта функция является отправной точкой нашего путешествия, после выполнения которой, программа, указанная при запуске получает управление от операционной системы. На самом деле, эта функция, как и многие другие в архитектуре Windows, является лишь некой оберткой над другими, более сложными функциями, недра которых лежат в самом ядре Windows. Выполнив необходимые проверки и настройки, собрав определенные параметры, происходят обращения к более низкоуровневым (чем ближе к ядру мы подбираемся, тем ниже уровень архитектуры) сервисам операционной системы. Итак, далее, после сбора необходимой информации вызывается функция CreateProcess. В этой функции и происходит вся рутинная работа, которая заставляет программу выполняться. Но, прежде, чем мы рассмотрим, что же именно делает эта функция, необходимо обозначить некоторые уровни, так называемые подсистемы, с помощью которых осуществляется необходимая работа по запуску приложения. Самый высокий уровень Win32 – это описанные выше функции, далее идет уровень Nt - так называемых родных функций операционной системы, которые находятся в библиотеке ntdll.dll и имеют префиксы Nt/Zw. Эти функции являются своеобразным шлюзом к ядру операционной системы. В этой же библиотеке находится еще один, не менее важный подуровень Ldr – подсистема загрузчика DLL (Dynamic Link Library) – библиотек динамической компоновки. Нужно отметить, что начало подсистемы загрузчика лежит в уровне Win32. Описанные выше уровни при запуске приложения работают в режиме пользователя. И уже самые нижние уровни находятся и выполняются в ядре операционной системы. В данном случае, в решении задачи запуска приложения участвует подсистема поддержки процессов и потоков и подсистема менеджера памяти. В запуске приложений существует еще один важный уровень – подсистема CSRSs (Client-Server Runtime Subsystem). Это так называемый корневой процесс подсистемы Win32, ответственный за выполнение всех запущенных приложений. Именно через этот процесс с помощью планировщика потоков и в соответствии с приоритетами, операционная система распределяет квоты процессора между запущенными приложениями. Кроме того, для поддержки старых Win16, таких как приложения DOS и ранних версий Windows, а также не Windows приложений существует еще одна подсистема VDM (Virtual Device manager) – менеджер виртуальных машин или так называемый эмулятор. |