Урок 3


Как выполняются приложения для Windows NT и Windows 95?
Диспетчер задач
Как выполняются прикладные программы для DOS и Windows?
Сервисы
Функции системных процессов, отображаемых в окне диспетчера задач

Не будем забывать, что операционная система, даже такая мощная, как Windows NT, является всего лишь средством, средой, в которой работают прикладные программы, предназначенные для решения разнообразных задач пользователя. Операционная система тем лучше, чем больше в ее среде может выполняться различных прикладных программ, не мешая друг другу. С этой точки зрения Windows NT - не просто хорошая, а очень хорошая операционная система. Установив ее на компьютере, вы получаете возможность запускать программы, созданные для работы в Windows NT, Windows 95, Windows 3.x, DOS, OS/2 2.x, Unix. Разработанные для разных систем, прикладные программы не только выполняются независимо друг от друга, но и могут взаимодействовать, обмениваясь информацией.

Как выполняются приложения для Windows NT и Windows 95?

При запуске прикладной программы на экране появляются окна, с помощью которых пользователь управляет программой. Однако с точки зрения операционной системы пользователь запускает так называемые процессы (processes). Каждому процессу операционная система выделяет часть памяти компьютера, дает доступ к центральному процессору, исполняет различные запросы процесса, например на доступ к файлу. Таким образом, основным предназначением Windows NT является обслуживание процессов. И все-таки NT - не пассивный исполнитель, система активно вмешивается в то, что происходит на компьютере, управляя очередностью исполнения процессов (вытесняющая многозадачность) и регулируя доступ к различным устройствам компьютера (защита от несанкционированного доступа).

Давайте сначала разберемся с понятием многозадачности - способности одновременно исполнять множество задач - на конкретном примере. Создайте файл TEST.CMD, содержащий простейшую бесконечную программу для командного процессора:

@echo off
:loop
echo *
echo ***
echo ****
echo ***
echo *
goto loop

Запустите созданную программу: в меню "Пуск" (Start) выберите пункт "Выполнить" (Run), наберите в окне название программы TEST. Если все сделано правильно, должно появиться окно, в котором непрерывным потоком пойдет вывод результатов выполнения только что созданной программы. Подайте ту же команду два раза и расположите появившиеся окна так, чтобы видеть их все одновременно, для чего щелкните правой кнопкой на свободном месте Панели задач (Taskbar) и выберите пункт "Сверху вниз" (Tile Windows Vertically). Все три программы работают одновременно! Как это возможно, ведь в нашем компьютере только один процессор?

Действительно, процессор всегда выполняет только одну программу, поэтому наблюдаемая нами одновременность кажущаяся*.

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

Время исполнения на центральном процессоре - это не единственный ресурс компьютера, который операционная система распределяет между процессами. Так же строго она следит за памятью. За каждым процессом закрепляется определенный объем памяти, и ни один процесс не может напрямую получить или изменить информацию, записанную в памяти другого процесса, как будто между ними глухая стена. Единственным посредником между ними является ядро операционной системы.

Столь же жестко ограничены возможности процессов, которые запускают пользователи, и в отношении внешних устройств компьютера: клавиатуры и монитора, жестких и гибких дисков, принтеров и модемов. Обращение к ним допустимо только посредством запросов к ОС. Таким образом, все процессы в Windows NT строго разделены. Кажется, что подобные драконовские порядки должны быть совершенно невыносимы. Но вспомните, что подчас некоторое ограничение свободы лишь помогает сосредоточиться на основной работе.

Диспетчер задач

Увидеть, какие процессы исполняются в данный момент, можно с помощью Диспетчера задач (Task Manager). Вызвать эту программу можно, щелкнув правой кнопкой по свободному месту на панели задач и выбрав в появившемся меню соответствующий пункт. Другой способ: нажмите ++ и в окне Windows NT Security щелкните по кнопке Task Manager.

Окно Task Manager имеет три закладки; сейчас для нас представляют интерес две из них: Applications и Processes. Если вы только что зарегистрировались в системе, первая закладка Task Manager скорее всего пуста. Но переключитесь теперь на вторую закладку. Вы еще не начали работать, а в системе уже исполняется полтора десятка процессов! В самом деле, кто-то ведь должен запросить у пользователя пароль, изобразить на экране рабочий стол и панель задач с кнопкой Start, переключить используемый язык и раскладку клавиатуры, наконец, показать список процессов в окне Task Manager. Глядя на список процессов, далеко не всегда легко понять, какие функции исполняет процесс с тем или иным названием (см. таблицу). Более того, далеко не всегда можно установить однозначное соответствие между процессами и приложениями. Например, запустите интерпретатор команд Windows NT (в меню Start выберите пункт Programs, MS-DOS Command Prompt) и подайте команду:

tree  | more

Обратите внимание - Task Manager зафиксировал появление только одного приложения Command Prompt на первой закладке и три взаимодействующих между собой процесса cmd, tree и more на второй закладке. Все три указанных процесса исполняются в рамках одного приложения, и если завершить это приложение, нажав кнопку End Task в Task Manager, то будут сброшены все три процесса.

Другой пример. Открыв окно Мой компьютер (My Computer), вы обнаружите его в списке приложений, однако новых процессов запущено не будет. Этим окном управляет уже работающий процесс - explorer. Таким образом, некоторые процессы могут обслуживать несколько различных приложений. Все подобные приложения используют одну область памяти, выделенную данному процессу, но каждое из них является отдельной нитью исполнения (execution thread). Кстати, запуск нескольких нитей исполнения в рамках одного процесса полезен не только в описанном выше случае, но и для параллельного выполнения нескольких функций одним приложением. Например, Microsoft Word for Windows 95 использует отдельные нити для проверки правописания параллельно с набором текста, для фоновой печати документа и т.п.

Как выполняются прикладные программы для DOS и Windows?

Вполне закономерно, что все прикладные программы, созданные для Windows NT, будут корректно работать под управлением этой ОС. Понятно, что и программы для Windows 95 - не чужие родственники. Однако в начале статьи мы упомянули, что в среде операционной системы Windows NT могут исполняться приложения, разработанные для DOS. Запустив командную строку, а из нее одну из программ для DOS - QBASIC, посмотрим в Task Manager на список процессов операционной системы. Мы обнаружим работающий интерпретатор командной строки CMD.EXE, но и намека нет на QBASIC.EXE. Вместо этого появился процесс с непонятным названием NTVDM.EXE. Запустим еще одну командную строку, а из нее другую программу для DOS - DEBUG. Опять в списке задач появилось по экземпляру CMD и ntvdm.

Название этого загадочного процесса расшифровывается как NT Virtual DOS Machine (виртуальная машина с DOS). Это программа, которая берется выполнять функции, закрепленные ранее за DOS. Она загружает в свою память исполняемый файл, например QBASIC.EXE или DEBUG.EXE, и запускает его. Программа для DOS делает то, что обычно: вызывает через прерывания функции операционной системы DOS, работает с информацией по адресу, отведенному для видеоадаптера, следит за состоянием регистров ввода с клавиатуры для мгновенной реакции на нажатие клавиш. Однако все подобные действия перехватывает ntvdm, который, обращаясь к операционной системе Windows NT, делает все возможное для того, чтобы создать у выполняющейся программы впечатление работы "отдельного" 486-го компьютера.

В большинстве случаев ей это удается, и программа для DOS работает совершенно нормально. Внутри ntvdm есть своя "верхняя память", свой интерпретатор команд COMMAND.COM, в ней могут запускаться резидентные драйверы и программы. При запуске ntvdm, как и при запуске любой машины с DOS, выполняется начальное конфигурирование системы. Только вместо CONFIG.SYS и AUTOEXEC.BAT используются файлы CONFIG.NT и AUTOEXEC.NT, расположенные в системном каталоге Windows NT. Более того, в различных экземплярах ntvdm начальная загрузка DOS может идти по-разному (имена файлов инициализации можно указать в свойствах программы для DOS, если на закладке Program нажать кнопку Windows NT).

Но не обходится и без проблем. Отечественных пользователей больше всего раздражает переключение раскладки клавиатуры, которое для DOS-программ практически не работает. Частичным решением может служить добавление в файл AUTOEXEC.NT строк, осуществляющих загрузку какого-либо резидентного русификатора для DOS.

А как выполняются приложения для Windows? Думаю, вы еще не забыли, что старая добрая Windows запускалась поверх операционной системы DOS и использовала многие ее функции? Тогда у вас не вызовет удивления то, что приложения, разработанные для Windows 3.x (их еще называют приложениями для Win16 в отличие от приложений для Win32, т. е. Windows 95 и Windows NT) выполняются внутри ntvdm. Есть и особенности. Запустите, например, программу SYSEDIT, доставшуюся Windows NT по наследству от старой версии Windows. В Task Manager на закладке процессов при этом появились три новых строки. Но не дайте себя обмануть - все три строки обозначают один процесс ntvdm, а идущие следом с небольшим отступом wowexec и sysedit находятся внутри того же адресного пространства. Когда запускается очередное приложение для Win16, оно попадает в то же адресное пространство, и новый процесс при этом не образуется. Так сделано для того, чтобы обеспечить высокую степень совместимости. Дело в том, что многие программисты ранее применяли в своих программах для Windows нестандартные средства взаимодействия приложений, когда, например, две программы использовали общую область памяти компьютера. Так как в Windows NT память, отведенная одному процессу, недоступна для другого процесса, все Win16-приложения по умолчанию работают в одном адресном пространстве.

Итак, разработчики Microsoft добились высокой степени совместимости Windows NT и Windows 3.x. Но у этой схемы есть оборотная сторона. Так же как и в Windows 3.x, старые 16-разрядные приложения могут нарушать работу друг друга. В тех случаях, когда необходимо избавиться от этого недостатка, приложение для Win16 запускают в отдельном адресном пространстве. Для этого в окне запуска программ, а также в свойствах "ярлыка" (Shortcut), имеется флажок Запустить (Run in Separate Memory Space) в отдельном адресном пространстве . В нормальном состоянии этот флажок установлен и неактивен, снять его нельзя. Но если в командной строке указана программа для Windows 3.x, флажок автоматически снимается и становится активен, так что пользователь может его при необходимости установить.

Сервисы

Некоторые системные программы Windows NT работают независимо от того, зарегистрирован в системе пользователь или еще нет, и получили название сервисов (services). Можно сказать, что Windows NT как бы "живет своей жизнью", и "жизнь" заключается в работе сервисов. Сервисы занимаются выполнением функций, которые обычно не требуют вмешательства оператора, например вывод информации на печатающее устройство или выполнение запросов, пришедших из компьютерной сети.

Управление сервисами осуществляется совсем не так, как обычными процессами. Во-первых, в реестр (registry) Windows NT должна быть помещена специальная регистрационная информация о каждом сервисе. Во-вторых, настройка, запуск и останов сервисов производится c помощью Control Panel (Панели управления). Выбрав в меню Start пункт Settings, а в нем Control Panel и щелкнув кнопкой на Services, вы откроете окно со списком всех зарегистрированных в системе сервисов.

Те из них, которые помечены словом Started, работают в данный момент. В последней колонке указан способ запуска сервиса. Признак Automatic означает, что операционная система попытается автоматически запустить сервис сразу после включения компьютера, а Manual - что сервис может быть запущен позже по требованию какой-либо программы или при нажатии кнопки Start в окне Services.

Заметим, что нет прямого соответствия между сервисами и процессами. Одни сервисы (например, Server, отвечающий за доступ к файлам компьютера по сети) являются частью ядра операционной системы. Другие (скажем, EventLog, ведущий системный журнал, своего рода летопись наиболее важных событий в системе) запускаются как нити исполнения в рамках процесса services. Третьи образуют при запуске отдельный процесс (такому сервису, как Spooler, обслуживающему Control Panel очереди принтеров, соответствует процесс spoolss).

И в заключение - конкретный пример: работа сервиса, организующего периодическое резервное копирование важных данных. Наиболее пытливые пользователи наверняка уже обнаружили команду at, c помощью которой можно запустить любые программы в определенное время. Однако для того, чтобы ею воспользоваться, необходимо, во-первых, обладать правами администратора, а во-вторых, должен быть запущен сервис Schedule. Поэтому прежде всего следует вызвать окно управления сервисами в Control Panel; выбрать Services; выделить строку сервиса Schedule; нажав на кнопку Startup, установить автоматический запуск сервиса при включении компьютера и, наконец, кнопкой Start в окне Services запустить этот сервис в текущем сеансе работы.

Далее следует подготовить командный файл, осуществляющий создание резервной копии каталога. Он может выглядеть, например, так:

d:
cd ackup
deltree /y *.*
xcopy c:docs*.* /s>..ackup.log

Осталось только подать команду:

at 16:00 /every:M,T,W,Th,F,S,Su backup_docs.cmd

Теперь каждый день в 16 часов система сама будет создавать копии всех файлов каталога docs. Вам остается лишь периодически просматривать файл BACKUP.LOG для того, чтобы убедиться, что копирование происходит нормально и без ошибок.

(Окончание в # 3/97)


Василий Сергеевич Люцарев - научный руководитель учебного центра компании "Весть". Контактный тел.: (095)115-60-01.

*Если компьютер, на котором работает Windows NT, имеет несколько центральных процессоров, то отдельные задачи исполняются действительно одновременно на разных процессорах. Однако и в этом случае количество одновременно исполняемых задач всегда может быть больше числа центральных процессоров.


Функции системных процессов, отображаемых в окне диспетчера задач

System Idle Process
Процесс-"лентяй". Он работает только для того, чтобы занять процессор в то время, когда больше нет готовых к исполнению процессов.
System
Системный процесс, в задачу которого входит сброс информации из файлового кэша, обслуживание виртуальной памяти и т.п.
smss
Session Manager Subsystem - диспетчер сессии
csrss
Client Server Runtime Subsystem - подсистема Win32 (согласно документам Microsoft).
winlogon
Процесс, осуществляющий регистрацию (Logon) и завершение работы (logoff) пользователя.
services
Диспетчер сервисов, запускающий все сервисы операционной системы; при этом одни сервисы (например, Spooler) запускаются в виде отдельного процесса, а другие (например, EventLog) работают "внутри" процесса services.
lsass
Local Security Administration Subsystem координирует работу системы безопасности Windows NT.
spoolss
Spooler Subsystem осуществляет вывод данных на печатающее устройство.
taskmgr
Это собственно Task Manager - Диспетчер задач.
rpcss
Remote Procedure Call (RPC subsystem) - подсистема удаленного вызова процедур.
nddeagnt
Network DDE Agent обеспечивает обмен информацией между некоторыми сетевыми программами.
explorer
Windows NT Explorer обеспечивает изображение на экране рабочего стола, панели задач, окон папок.
systray
Этот процесс обеспечивает изображение на панели задач значков, в частности значка регулятора громкости.
internat
Переключатель клавиатуры.
ntvdm
NT Virtual DOS Machine - виртуальная машина c DOS.