HQLA. Выпуск #1.

Категории: hqla
Тэги: , ,

Первый выпуск ответов на вопросы HQLA.

В этом выпуске:

Раздел: Каждый кто пишет код.

  1. Вопрос #1: Опишите разницу между Нитью и Процессом.
  2. Вопрос #2: Что такое Сервис Windows и чем его жизненный цикл отличается от жизненного цикла обычного EXE файла?
  3. Вопрос #3: Каков максимальный объем памяти адресуемой одним процессом в Windows? Отличается ли этот объем от общего объема виртуальной памяти выделяемой системой? Как это отражается на архитектуре системы?

Вопрос #1: Опишите разницу между Нитью и Процессом.

Ответ: По сути основная разница в том, что нить и процесс в данном случае сущности разного уровня абстракции. Начнем сверху. Исполняемый модуль состоит из процессов, одного или нескольких. Грубо говоря процесс – суть выполняемая программа. Каждый процесс состоит из одной или нескольких нитей. Нить же – последовательность команд непосредственно под которую система выделяет процессорное время. Однако, как мне кажется, основная цель данного вопроса завести разговор о ресурсах.

Процесс имеет в своем распоряжении ресурсы необходимые для выполнения программы: виртуальное адресное пространство, исполняемый код, открытые указатели на системные объекты, набор настроек и атрибутов безопасности, уникальный идентификатор, переменные окружения, приоритеты классов, максимальный и минимальный размер области, в которой происходит исполнение процесса и как минимум одну нить для исполнения. Каждый процесс стартует с нити, называемой начальной, и далее в процессе исполнения может порождать дополнительные нити.

Нить – внутренняя сущность процесса, которая может быть выполнена в соответствии с некоторым расписанием или событием. Все нити процесса разделяют его виртуальное адресное пространство и системные ресурсы. Но у нити есть и собственное окружение, которое включает обработку исключительных ситуаций, приоритет исполнения, локальная область памяти (TLS), уникальный идентификатор нити и набор сущностей, хранящих ее контекст во время ожидания исполнения. Контекст нити включает значения машинных регистров, используемых нитью, стеки как системный так и пользовательский, и переменные окружения. Так же нить может иметь свой контекст безопасности для обезличенных (в плане принадлежности пользователю) клиентов.(http://msdn2.microsoft.com/en-us/library/ms681917(VS.85).aspx)

Вопрос #2: Что такое Сервис Windows и чем его жизненный цикл отличается от жизненного цикла обычного EXE файла?

Ответ: Под Сервисом Windows понимается приложение, реализующее программный интерфейс для управления посредством Диспетчера Управления Сервисами (Service Control Manager, SCM). Существует несколько способов запуска сервисов: автоматически при старте операционной системы, с помощью Диспетчера Управления Сервисами, программно, вызывая функции, описанные в интерфейсе Сервиса.

Одна из основных особенностей жизненного цикла Сервиса, отличающего его от обыкновенного EXE файла состоит в том, что он может работать при отсутствии инициированной пользовательской сессии локальной или удаленной консоли. Про функции которые должен реализовывать сервис подробнее можно почитать тут (http://msdn2.microsoft.com/en-us/library/ms685942.aspx).

Вопрос #3: Каков максимальный объем памяти адресуемой одним процессом в Windows? Отличается ли этот объем от общего объема виртуальной памяти выделяемой системой? Как это отражается на архитектуре системы?

Ответ: Виртуальная память в Windows имеет плоскую страничную архитектуру, операционная система создает процессам иллюзию того, что он работают в закрытом адресном пространстве. Логическая организация страниц памяти, вообще говоря, может не соответствовать физической организации памяти. Отображение или мэпирование адресов логического представления в адреса физического происходят на аппаратном уровне силами диспетчера памяти. Объем физической памяти зачастую отличается, в меньшую сторону, от объема виртуальной памяти и для обеспечения хранения всех страниц виртуальной памяти системой используется механизм подкачки. Суть механизма состоит в том, что мало используемые страницы выгружаются из оперативной памяти на диск, а при необходимости обращения к данным записанным на диск, требуемая виртуальная страница подкачивается обратно в оперативную память.

Далее я приведу небольшую таблицу, описывающую размер виртуального адресного пространства выделяемого одному процессу, в зависимости от архитектуры системы:

Архитектура Размер виртуального адресного пространства
x86 Всего 4 GB из них 2 GB системе 2 GB процессу
x86 со спец. ключами /3GB и /USERVA d boot.ini для ос Win2K (Server/Client), Win2K3, WinXP Всего 4 GB из них 1 GB системе 3 GB процессу
x86 с системой Address Windowing Extension Всего 64 Gb но используется механизм проецирования на 2Gb виртуальное адресное пространство.
x64 В связи с реализационными ограничениями 6657 GB системе и 8192 GB процессу. Адресное пространство меньше теоретически возможного.
Itanium В связи с реализационными ограничениями 6144 GB системе и 7152 GB процессу. Адресное пространство меньше теоретически возможного.

(http://msdn2.microsoft.com/en-us/library/aa366912.aspx)



Комментариев: 5 to “HQLA. Выпуск #1.”

  1. Евгений | July 14th, 2008 at 7:41 pm

    Класс! Хорошие, развернутые ответы :)
    Но, мне кажется, эти вопросы – для проверки себя, но для проведения интервью с кандидатами…

  2. EatchMan | July 15th, 2008 at 11:08 pm

    Где то я это уже видел

  3. Darth Bender | July 16th, 2008 at 3:36 pm

    Если речь о ресурсе “Sketch in .NET” на просторах Live Space, то я его постепенно сворачиваю, перенося контент сюда.

  4. Leibonik | July 23rd, 2008 at 1:53 pm

    Давайте еще, всё очень интересно и доходно!

  5. | Technogeek | July 25th, 2008 at 11:13 am

    [...] при наличии соответствующих символов и т.д. Подробнее о процессах можно почитать в ответе на первый вопрос и по ссылке на [...]

Оставить комментарий

Please input following word "D6G9S" from RIGHT to LEFT:

- this is neccessary(spam filter).