• Главная
  • Статьи
  • Блоги
  • Поиск
  • Гостевая
  • Контакты

Оазис

...место, выделяющееся на общем мрачном фоне (Словопедия)

Основное

  • Главная
  • Новости
  • Поиск
  • Архив

Статьи

  • Автомобиль
  • Программирование
    • Windows изнутри
    • Литература
  • Вебстроительство
  • Отдых и путешествия
  • Животный мир
  • Компьютер

Полезное

  • Кулинария
  • Ссылки

Личное

  • Блоги

Связь

  • Гостевая
  • Контакты

Designed by:
SiteGround web hosting Joomla Templates
Как Windows запускает приложение
Рейтинг пользователей: / 2
ХудшийЛучший 
Автор: Coldy   
02.02.2010 23:05
Страница 3 из 3

При инициализации первичного потока нового процесса подсистема Win32 указывает в качестве стартового адреса свою внутреннюю функцию, которая должна выполняться в пользовательском режиме, она же держит пользовательский код под контролем. Однако, ядро, при создании потока заменяет этот адрес, адресом функции, которая будет выполняться в режиме ядра, а адрес указанной функции сохраняется во внутренних структурах, для дальнейшего использования. Эта функция является стартовой функцией для всех пользовательских потоков и проводит  окончательную инициализацию запущенного потока. Когда новый поток получает управление (пока еще в режиме ядра) в нем происходят настройки для инициализации подуровня Ldr – загрузчика образов, таким образом, чтобы при переходе в пользовательский режим поток начал выполнение загрузки DLL, необходимых для выполнения нового процесса. Здесь, выполнение потока прерывается и далее он ждет выполнения в пользовательском режиме.

Подуровень Ldr

С этого момента выполнение потока происходит уже в режиме пользователя. После того как поток попадает в функцию инициализации загрузчика здесь проводятся необходимые приготовления собственных структур – они необходимы для того чтобы сохранять данные об уже загруженных DLL, при повторном обращении, а не загружать их каждый раз заново. Если загрузчик инициализируется впервые, он анализирует внутренние структуры загруженного приложения, чтобы определить, какие DLL и функции из них необходимы для выполнения процесса, далее он заполняет необходимые таблицы внутри образа загруженного приложения, настраивая их так, чтобы обращения к этим функциям проходило напрямую для приложения. Также, проводятся некоторые другие операции по подготовке образа к выполнению – более подробно о работе загрузчика я расскажу в другой статье. По окончании первичной инициализации для всех только что загруженных библиотек вызывается их внутренние функции стартовые функции, с уведомлением о том, что они присоединены к новому процессу, а при создании новых потоков – к новому потоку. Эти уведомления позволяют загруженным DLL проводить необходимые внутренние инициализации. После того, как все необходимые операции выполнены, загруженный и проинициализированный образ, наконец, получает самостоятельное управление.

Поехали!

Наконец то, наша программа выполняется, и мы можем видеть результат ее деятельности. А когда программа завершается, она возвращается управления операционной системе, которая проводит все необходимые действия для освобождения занятых ресурсов при создании и работы данной программе, но это тоже тема для отдельной статьи.

 

 


<< Первая < Предыдущая 1 2 3 Следующая > Последняя >>

 
Добавить комментарий
JComments

Вход

Пожалуйста, представьтесь!



  • Забыли пароль?
  • Забыли логин?

Погода

GISMETEO: Погода по г.Москва

На сайте

Сейчас 21 гостей онлайн
Rambler's Top100 Рейтинг@Mail.ru Хостинг «Джино»
© 2009-2023 "Оазис" Продвижение сайта, поддержка и дизайн