Первый выпуск ответов на вопросы HQLA.
В этом выпуске:
Раздел: Каждый кто пишет код.
- Вопрос #1: Опишите разницу между Нитью и Процессом.
- Вопрос #2: Что такое Сервис Windows и чем его жизненный цикл отличается от жизненного цикла обычного EXE файла?
- Вопрос #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 процессу. Адресное пространство меньше теоретически возможного. |




.png)
Класс! Хорошие, развернутые ответы
Но, мне кажется, эти вопросы – для проверки себя, но для проведения интервью с кандидатами…
Где то я это уже видел
Если речь о ресурсе “Sketch in .NET” на просторах Live Space, то я его постепенно сворачиваю, перенося контент сюда.
Давайте еще, всё очень интересно и доходно!
[...] при наличии соответствующих символов и т.д. Подробнее о процессах можно почитать в ответе на первый вопрос и по ссылке на [...]