Программамы        06.03.2024   

Управление процессами в Windows. Управление задачами и процессами Управление процессами и потоками в ОС Windows с помощью утилиты Process Explorer фирмы SysInternals

Цель работы : практическое знакомство с методикой управления процессами ОС MS Windows XP с помощью диспетчера задач

1 КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

1.1 Процессы и потоки

В отличие от MS DOS, процессы в Win32 инертны, т. е. В Win32 процесс ничего не выполняет.

Процесс владеет:

4 Гб адресным пространством (при выполнении на 32-х разрядном ЦП);

Файлами;

Модулями (например, загруженными в адресное пространство DLL);

Одним или несколькими потоками.

Процесс обладает:

Идентификатором процесса (PID);

Базовым классом приоритета;

Маркером доступа (access token);

Идентификатором родительского процесса;

Набором используемых описателей (Handles) системных объектов;

Рабочим множеством страниц оперативной памяти и т.д.

Процесс (Пр) может породить другой процесс- см. рис.1.

Рисунок 1 – порождение процессов.

Процесс Пр1 породил процесс Пр2, который породил процессы Пр3 и Пр4.

Различают системные и пользовательские процессы. Системные процессы – это процессы операционной системы, выполняющиеся в привилегированном режиме работы процессора (режиме ядра). Большинство системных процессов создается при загрузке ОС.

В каждой системе Windows выполняются следующие системные процессы:

Процесс Idle (включает по одному потоку на процессор для учета времени простоя процессора);

Процесс System (содержащий большинство системных потоков режима ядра);

Диспетчер сеансов (Smss.exe);

Подсистема Windows (Csrss.exe);

Процесс входа в систему (Winlogon.exe);

Диспетчер управления сервисами (Services.exe) и создаваемые им дочерние процессы сервисов (например, универсальный процесс для хостинга сервисов, Svchost.exe);

Серверный процесс локальной аутентификации (Lsass.exe).

Два из указанных процессов, Idle – бездействие системы и System, не являются процессами в строгом смысле этого слова, поскольку они не выполняют какой-либо код пользовательского режима.

Диспетчер сеансов (Session Manager) Smss.exe является первым процессом пользовательского режима, создаваемым в системе. Он порождается системным потоком режима ядра и запускает процессы подсистем Csrss.exe и Winlogon, который в свою очередь создает остальные системные процессы.

Процесс входа в Windows - Winlogon.exe обрабатывает интерактивный вход пользователя в систему и выход из нее. При нажатии комбинации клавиш Alt+Ctrl+Del Winlogon получает уведомление о запросе пользователя на вход в систему.

После ввода имя и пароль пользователя посылаются для проверки серверному процессу локальной аутентификации LSASS. После успешной аутентификации LSASS вызывает какую-либо функцию в мониторе состояния защиты, чтобы сгенерировать объект «маркер доступа» (access token object), содержащий профиль безопасности пользователя. Впоследствии Winlogon использует его для создания начального процесса оболочки. Информация о начальном процессе хранится в параметре Userinit в разделе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon.

По умолчанию начальным процессом считается Userinit.exe, который выполняет некоторые действия по инициализации пользовательской среды, а затем ищет в реестре параметр Shell и создает процесс для запуска определенной системной оболочки – по умолчанию Explorer.exe. После этого процесс Userinit.exe завершается и не показывается в списке выполняющихся процессов. Процесс Explorer.exe является «внучатым» процессом Winlogon. Процесс Explorer.exe – предок всех запущенных прикладных (пользовательских) процессов.

Чтобы понять взаимоотношения этих процессов, полезно просмотреть «дерево» процессов, отражающее связи между родительскими и дочерними процессами. Увидев, кем создается тот или иной процесс, легче понять, откуда берется каждый процесс.

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

Чтобы процесс что-нибудь выполнил, в нем нужно создать поток (Thread). В принципе, один процесс может содержать несколько потоков и они одновременно используют код в адресном пространстве процесса. Для этого каждый поток должен поток располагать собственным набором регистров процессора, а каждый процесс – как минимум – одним потоком. Чтобы все эти потоки работали, ОС отводит каждому из них определенное процессорное время (квант времени). Время выдается потокам квантами по кругу (см. рис. 2) в соответствии с их приоритетами:

Рисунок 2 - схема выделения квантов времени потокам (П)

При создании процесса первичный поток создается системой автоматически, далее первичный поток может создавать дополнительные потоки, используя функцию CreateThread.

Потоки также могут создаваться драйверами режима ядра.

В WinNT, 2000, XP Windows Server - за потоком может быть закреплен отдельный процессор (процессоров может быть до 32), тогда потоки действительно выполняются параллельно.

1.2 Инструменты управления процессами

В ОС Windows встроена программа Диспетчер задач (Task Manager), с помощью которой можно получить информацию о выполняющихся в системе системных и прикладных процессах, количестве используемых ими потоков и потребляемых ресурсах, управлять выполнением процессов, изменять приоритеты процессов. Для запуска диспетчера задач можно использовать комбинацию Alt+Ctrl+Del или нажатие правой кнопкой мыши на панель задач. Окно диспетчера задач показано на рис. 3.

Рисунок 3 - Окно диспетчера задач (закладка Процессы)

В окне Процессы можно видеть список всех выполняемых в системе процессов и их параметры – на рис.3 это идентификаторы процессов, загрузка ЦП каждым процессом и количество потоков. Заметьте, что количество потоков, равное 0 не говорит о том, что их действительно нет (это процесс такой).

С помощью меню Вид можно удалить из списка показанные на рис.3 параметры или добавить новые.

Закладка Быстродействие (см. рис.4) дает возможность вывести графики суммарной загрузки ЦП, использования файла подкачки, а также получить сведения о суммарном потреблении ресурсов ПК.

Диспетчер задач – очень простой инструмент, его возможностей недостаточно для решения даже несложных задач анализа и управления системой. ПРИМЕР – постройте дерево выполняемых в системе процессов на основе полученной с помощью диспетчера задач информации.

Фирмой Sysinternals разработана программа Process Explorer, обладающая значительно большими возможностями, чем диспетчер задач от Microsoft, а также ряд других программ для управления ПК и анализа информационной безопасности. Однако все эти программы бесплатны только для личного использования и на современном этапе без лицензии не могут использоваться в учебном процессе кафедры.

Рисунок 4 - Окно диспетчера задач (закладка Быстродействие)

2. МЕТОДИКА ВЫПОЛНЕНИЯ

1. Запустить диспетчер задач, ознакомиться с перечнем параметров процессов (меню вид закладки Процессы).

2. Ознакомиться с возможностями диспетчера задач по управлению процессами (создание процесса и завершение процесса). Изменение приоритета выбранного процесса с помощью контекстного меню.

3. Ознакомиться с возможностями диспетчера по управлению выводом информации на экран (упорядочивание списка по возрастанию и убыванию значений выбранного параметра).

4. Построить график изменения загрузки ЦП при перемещении мыши, изменении размеров окна диспетчера, запуске приложений Open Office.

5. Построить график изменения размера выделенной в файле подкачки памяти при запуске приложений (Open Office, Visual Studio).

6. Получить список выполняющихся процессов в соответствии с индивидуальными заданиями для бригад

Таблица 1 Индивидуальные задания

Таблица 2 - Параметры процессов

3. ОТЧЕТ О РАБОТЕ

Готовится в письменном виде с помощью Open Office один на бригаду.

1. Титульный лист с номером и названием работы, номером группы, бригады, фамилиями студентов и преподавателя

2. Перечень использованных при выполнении работы параметров процессов

3. Результаты, полученные при выполнении индивидуального задания.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Дать определение процесса, потока, системного и прикладного процесса

2. Какая информация необходима для построения перечня выполняющихся в системе процессов в виде дерева. Можно ли получить такую информацию в MS Windows, используя диспетчер задач?

Для каждого приложения, запускаемого под управлением Microsoft Windows, операционная система создает собственную задачу, иными словами, отводит определенный объем оперативной памяти для выполнения этой программы и контролирует работу загруженного в память приложения с ресурсами компьютера. Помимо задач в Windows XP имеются также процессы - виртуальное адресное пространство памяти, отведенное для выполнения программой или самой операционной системой каких-либо процедур. Одна задача может активизировать в Windows несколько различных процессов: например, web-браузер может одновременно обращаться к порту модема для получения и отправки каких-либо данных и отображать на экране результат работы встроенного в web-страницу апплета Java. Каждому процессу автоматически назначается индивидуальный опознавательный номер, так называемый Process ID или PID, предназначенный для однозначной идентификации процесса в системе.
Если запущенная вами программа неожиданно вызвала «зависание» компьютера, в большинстве случаев нет необходимости прибегать к аварийной перезагрузке: вполне достаточно отыскать в памяти вызвавшую сбой задачу и снять ее, то есть принудительно прекратить ее дальнейшее выполнение. Возможна и другая ситуация: закрыв неожиданно «зависшую» программу путем снятия задачи, вы не сможете продолжить прерванную работу с каким-либо файлом или документом. Например, удалив из памяти компьютера Microsoft Word, вы не сможете снова загрузить в него текст, который только что редактировали, поскольку операционная система считает, что этот документ уже используется другой программой. Подобные явления происходят потому, что после снятия задачи в памяти все еще остался инициированный этой задачей процесс - в нашем случае это процесс обработки документа Word. Прекратив выполнение вызывающего сбои процесса, вы сможете продолжить работу с Windows XP в обычном режиме.

Для управления задачами и процессами в Microsoft Windows XP предусмотрена специальная системная утилита, называемая Диспетчер задач (Windows Task Manager), окно которой появляется на экране при нажатии сочетания клавиш Ctrl+Alt+Del

Окно утилиты Диспетчер задач Windows XP имеет пять функциональных вкладок.
Вкладка Приложения (Applications) содержит список всех запущенных в системе задач: в поле Задача (Task) отображается название задачи, в поле Состояние (Status) - ее текущее состояние. Нормальным статусом задачи является состояние Работает (Running). Если задача «зависла» и не отвечает на системные запросы, ее состояние будет определено как Не отвечает (Not responding).
Чтобы снять одну из задач, выделите ее щелчком мыши в меню Задача (Task) и нажмите на кнопку Снять задачу (End Task).
Чтобы переключиться к какой-либо задаче, то есть открыть на экране ее окно, выделите в списке нужную задачу и щелкните мышью на кнопке Переключиться (Switch To).
Вы можете инициировать новую задачу, нажав на кнопку Новая задача (New Task) и указав полное имя и путь к запускаемой программе в соответствующем поле открывшегося окна либо определив эту программу визуально при помощи кнопки Обзор (Browse).

Вкладка Процессы (Processes) дает возможность управлять запущенными в системе процессами.

В меню на данной вкладке отображаются названия процессов - Имя образа (Image Name), определители инициаторов процессов - Имя пользователя (User Name), характеристики аппаратной обработки процессов - ЦП (CPU) и занимаемый процессами объем оперативной памяти - Память (Memory Usage). Вы можете включить отображение других характеристик процессов (например, PID, диапазон ввода-вывода, объем используемого процессом кэша и т. д.), воспользовавшись функцией Выбрать столбцы (Select Columns) командного меню Вид (View). Чтобы прекратить выполнение процесса, выделите его заголовок щелчком мыши и нажмите на кнопку Завершить процесс (End Process).
Если вы хотите, чтобы в данном меню отображались процессы, инициированные всеми пользователями вашей системы, установите флажок рядом с пунктом Отображать процессы всех пользователей (Show processes from all users). Вы можете также установить приоритет процесса, если щелкните на его заголовке правой кнопкой мыши, выберите в появившемся меню пункт Приоритет (Set Priority) и укажете назначаемый для данного процесса режим выполнения:

Реального времени (Realtime)- режим реального времени (все инициируемые процессом запросы выполняются системой по мере поступления);
Высокий (High)- высочайший приоритет;
Выше среднего (AboveNormal)- высокий приоритет;
Средний (Normal)- стандартный приоритет;
Ниже среднего (BelowNormal)- низкий приоритет;
Низкий (Low)- наиболее низкий приоритет.

Чем выше приоритет процесса, тем быстрее выполняются инициированные им запросы. Процессам с высоким приоритетом система предоставляет аппаратные и программные ресурсы в первую очередь. При перераспределении приоритетов процессов следует помнить, что если вы установите высокий приоритет какому-либо второстепенному процессу, приоритет одного из жизненно важных для Windows системных процессов может автоматически стать низким, в результате чего скорость работы системы в целом заметно снизится или выполнение этого процесса будет полностью блокировано, что приведет к «зависанию» компьютера. Устанавливать высокий приоритет одному из процессов следует только в том случае, если его выполнение с «нормальным» приоритетом по каким-то причинам затруднено или невозможно.

Вкладка Быстродействие (Performance) окна Диспетчера задач Windows содержит информацию о загрузке процессора, оперативной памяти и об использовании других аппаратных ресурсов компьютера.

(CPU Usage) и Хронология загрузки ЦП (CPU Usage History) показывают нагрузку на процессор вашего компьютера, индикаторы Файл подкачки (PF Usage) и Хронология использования файла подкачки (PF Usage History) - использование файла подкачки при системном кэшировании данных, индикатор Физическая память (Physical Memory) - степень загрузки оперативной памяти в килобайтах.

Аналогичным образом вкладка Сеть (Networking) демонстрирует нагрузку на вашу локальную сеть.
И наконец, если вы хотите просмотреть список всех работающих в настоящее время с вашей системой пользователей, перейдите ко вкладке Пользователи (Users).


Если вы зарегистрированы в системе как администратор данного компьютера, то можете отключить одного из пользователей, выделив в меню название его сеанса работы с Windows щелчком мыши и нажав на кнопку Отключить (Disconnect). Помимо этого вы можете отправить ему сообщение нажатием на кнопку Отправить сообщение (Send Message). Чтобы завершить текущий сеанс работы с Windows, щелкните мышью на кнопке Выйти из системы (Logoff).

Как известно, любым компьютером управляет операционная система. От нее зависит и удобство работы, и функциональные возможности, и надежность, и быстродействие. С другой стороны ОС не воспринимается обывателями как некая отдельная часть компьютера – она «была там всегда». И в большинстве случаев у неквалифицированных пользователей даже не возникает вопрос «Какая ОС работает на моем компьютером?»

Освоить управление процессами cпомощью командами tasklist и taskkill и через диспетчер задач.

Скачать:


Предварительный просмотр:

Управление процессами в ОС Windows

Цель:

освоить управление процессами c помощью командами tasklist и taskkill

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

Ход выполнения работы:

Для того чтобы просмотреть количество запущенных программ в операционной системе windows xp/seven можно использовать программу

“Диспетчер задач”.

Диспетчер задач можно запустить двумя способами.

1.Способ:

Нажав комбинацию кнопок Contr+Alt+Del.

В появившемся окне нажать вкладку процессы .

2.Способ:

Запустить интепритатор командной строки нажав горячие клавиши Win+R или запустить программу через меню пуск – выполнить.

В появившимся окне написать CMD и нажать Enter

После чего запустится командная строка.

В ней написать команду Tasklist и нажать Enter.

Запустится “Диспетчер задач”

В нём мы можем увидеть сколько запущено процессов а также на сколько загружен процессор и задействована ОЗУ нажав на вкладку быстродействие .

Удалить процесс можно набрав команду taskkill/?

Taskkill

Завершает одно или несколько заданий или процессов. Процессы могут быть уничтожены кодом процесса или именем образа. Синтаксис taskkill ]] | Параметры

/s компьютер

Указывает имя или IP-адрес удаленного компьютера (не используйте обратную косую черту). По умолчанию используется локальный компьютер.

/u домен\пользователь

Выполнение команды с разрешениями учетной записи пользователя, который указан как пользователь или домен\пользователь. По умолчанию используются разрешения текущего вошедшего пользователя компьютера, с которого поступила эта команда.

/p пароль

Определяет пароль учетной записи пользователя, заданной параметром /u.

/fi имя_фильтра

Задает типы процессов, которые следует завершить и не следует.

/pid код_процесса

Указывает код процесса, который необходимо завершить.

/im имя_образа

Указывает имя образа процесса, который необходимо завершить. Используйте подстановочный знак (*) для указания всех имен образа.

Указывает, что процесс(ы) должен быть принудительно завершен. Этот параметр не действует для удаленных процессов, все удаленные процессы завершаются принудительно.

Задает завершение всех дочерних процессов вместе с родительским, такое действие обычно известно как уничтожение дерева.

Примечания

Подстановочный символ (*) принимается только при указании вместе с фильтрами.

Завершение удаленных процессов всегда выполняется принудительно независимо от указания параметра /f.

Указание имени компьютера в качестве фильтра HOSTNAME приведет к завершению работы и остановке всех процессов.

Используйте команду tasklist для определения кода завершаемого процесса.

Команда taskkill является заменой средству Kill.

taskkill /f /fi "USERNAME eq NT AUTHORITY\SYSTEM" /im notepad.exe

taskkill /s srvmain /f /im notepad.exe

taskkill /s srvmain /u maindom\hiropln /p p@ssW23 /fi "IMAGENAME eq note*" /im *

taskkill /s srvmain /u maindom\hiropln /fi "USERNAME ne NT*" /im *

taskkill /f /fi "PID ge 1000" /im *

Команда запуска быстродействия сразу taskmgr.exe

Завершения процесса

Tskill {код_процесса | имя_процесса} [{/id:код_сеанса | /a}]

Параметры:

код_процесса

Отображает код завершаемого сеанса.

имя_процесса

Отображает имя завершаемого сеанса. Для задания этого аргумента можно использовать подстановочные символы.

/server:имя_сервера

Определяет сервер терминалов, содержащий завершаемый процесс. В противном случае используется текущий сервер терминалов.

/id:код_сеанса

Завершает процесс, запущенный в выбранном сеансе.

Завершает процесс, запущенный во всех сеансах.

Отображает сведения о выполненных действиях.

Отображает справку в командной строке.

Примечания

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

При завершении всех запущенных процессов в сеансе он тоже завершается.

Список различных процессов

CSRSS.EXE

Процесс отвечает за окна консоли, за создание и удаление потоков, а также частично за работу 16-битной среды MS-DOS. Он относиться к подсистеме Win32 пользовательского режима (WIN32.SYS же относиться к ядру Kernel) и должен всегда выполняться.

EXPLORER.EXE

Пользовательская среда, содержащая такие компоненты, как Панель задач, Рабочий стол и тому подобное. Его практически всегда можно закрывать и снова открывать без каких-либо последствий.

INTERNAT.EXE

Загружает различные выбранные пользователем языки ввода, показывает на панели задач значок >, который позволяет переключать языки ввода. С помощью панели управления возможно без использования данного процесса безо всяких проблем переключать раскладку клавиатуры.

LSASS.EXE

Этот локальный сервер авторизации отвечает за IP-директивы безопасности (интернет- протоколы) и загружает драйвер безопасности. Он запускает процесс, отвечающий за авторизацию пользователей. При успешной авторизации пользователя приложение создаёт и присваивает ему специальный протокол. Все запущенные далее процессы используют этот протокол.

MSTASK.EXE

Отвечает за службу планирования Schedule, которая предназначена для запуска различных приложений в определённое пользователем время.

SMSS.EXE

Диспетчер сеансов запускает высокоуровневые подсистемы и сервисы. Процесс отвечает за различные действия, например запуск Winlogon и Win32 процессов, а также за операции с системными переменными. Когда Smss определяет, что Winlogon или Csrss закрыты, он автоматически выключает систему.

SPOOLSV.EXE

Обеспечивает создание очереди на печать, временно сохраняя документы и факсы в памяти.

SVCHOST.EXE

Этот всеобъемлющий процесс служит хостингом для других процессов, запускаемых с помощью DLL. Поэтому иногда работают одновременно несколько Svhost. С помощью команды > можно вывести на экран все процессы, использующие Svchost.

SERVICES.EXE

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

SYSTEM

Выполняет все потоки ядра Kernel.

SYSTEM IDLE PROCESS

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

TASKMGR.EXE

Процесс диспетчера задач, закрывать который крайне не рекомендуется.

WINLOGON.EXE

WINMGTM.EXE

Основной компонент клиентской службы Windows. Процесс запускается одновременно с первыми клиентскими приложениями и выполняется при любом запросе служб. В Windows XP процесс запускается как клиент процесса Svchost.

по материалам журнала NetWork

Их можно просмотреть следующим способ:

1.Нажмите на панели задач Windows кнопку Пуск и выберите пункт Выполнить.

2.В поле Открыть введите команду CMD и нажмите клавишу ВВОД.

3.Введите команду Tasklist /SVC и нажмите клавишу ВВОД.

Команда Tasklist выводит список активных процессов. Параметр /SVC используется для вывода списка активных служб в каждом процессе. Для получения дополнительных сведений о процессе введите следующую команду и нажмите клавишу ВВОД:

Tasklist /FI "PID eq идентификатор_процесса" (кавычки обязательны)

В приведенном ниже примере показан вывод команды Tasklist для двух экземпляров процесса Svchost.exe.

Задание:

  1. Запустить Калькулятор
  2. Посмотреть командой tasklist появился ли процесс calc.exe
  3. Запустить Regedit(пуск>выполнить>regedit)
  4. Посмотреть командой tasklist появился ли процесс regedit.exe
  5. “Убить” процесс regedit.exe(командой taskkill)
  6. Посмотреть реакцию системы

В отличие от «полуторазадачной» MS-DOS, которая оставляет прикладному программисту всю работу (и весь риск) организации параллельного функционирования процессов, многозадачные ОС предоставляют программисту более или менее удобный и богатый набор системных функций, позволяющих запустить несколько параллельных процессов и организовать их взаимодействие (синхронизацию процессов, обмен данными, взаимное исключение и т.п.). При этом ОС обязана гарантировать корректную и эффективную организацию переключения процессов, разделения между ними процессорного времени, памяти и других ресурсов.

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

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

Все версии Windows от 1.0 до 3.11 представляли собой достаточно мощные многозадачные системы с невытесняющей диспетчеризацией. Версии, начиная с Windows NT и Windows 95, используют вытесняющую диспетчеризацию.

Понятие объекта в Windows

В ОС Windows широко используется понятие системного объекта . По сути, любой объект представляет собой некоторую структуру данных, расположенную в адресном пространстве системы. Поскольку приложения не могут иметь доступа к этой памяти, то для работы с объектом приложение должно получить хэндл объекта – некоторое условное число, которое будет представлять данный объект при обращении к API-функциям. Процесс получает хэндл, как правило, при вызове функции CreateXxx (здесь Xxx – название объекта), которая может либо создать новый объект, либо открыть существующий объект, созданный другим процессом. Функции вида OpenXxx позволяют только открыть существующий объект.

Объекты Windows делятся на объекты ядра (KERNEL), позволяющие управлять процессами, объекты USER, описывающие работу с окнами, и объекты GDI, задающие графические ресурсы Windows. В данном курсе рассматриваются только объекты ядра. Процессы, нити и открытые файлы являются примерами объектов ядра.

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

Хэндл объекта может быть использован только тем процессом, который создал или открыл этот объект. Нельзя просто переслать значение хэндла другому процессу, оно не будет действовать в другом контексте. Имеется, однако, функция DuplicateHandle, которая создает корректную копию хэндла, требуя указать для этого, какой процесс создает копию, какого именно хэндла и для какого процесса предназначена копия.

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

Объект существует до тех пор, пока не будут закрыты все хэндлы, указывающие на него.

Процессы и нити

Общее понятие процесса, рассмотренное выше в п. 4.2.1, для ОС Windows как бы распадается на два понятия: собственно процесса и нити (thread; в некоторых книгах используется термин поток ). При этом нить является единицей работы, она участвует в конкуренции за процессорное время, изменяет свое состояние и приоритет, как было описано выше для процесса. Что же касается процесса в Windows, то он может состоять из нескольких нитей, использующих общую память, открытые файлы и другие ресурсы, принадлежащие процессу. В двух словах: процесс – владеет (памятью, файлами), нити – работают, при этом совместно используя ресурсы своего процесса. Правда, нить тоже кое-чем владеет: окнами, очередью сообщений, стеком.

Процесс создается при запуске программы (EXE-файла). Одновременно создается одна нить процесса (должен же кто-то работать!). Создание процесса выполняется с помощью API-функции CreateProcess. Основными параметрами при вызове этой функции являются следующие.

· Имя файла запускаемой программы.

· Командная строка, передаваемая процессу при запуске.

· Атрибуты защиты для создаваемых процесса и нити. И процесс, и нить являются объектами ядра Windows и в этом качестве могут быть защищены от несанкционированного доступа (например, от попыток других процессов вмешаться в работу данного процесса).

· Различные флаги, уточняющие режим создания процесса. Среди них следует отметить класс приоритета процесса, флаг отладочного режима (при этом система будет уведомлять процесс-родитель о действиях порожденного процесса), а также флаг создания приостановленного процесса, который не начнет работать, пока не будет вызвана функция возобновления работы.

· Блок среды процесса.

· Текущий каталог процесса.

· Параметры первого окна, которое будет открыто при запуске процесса.

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

Если процесс успешно создан, функция CreateProcess возвращает ненулевое значение.

Класс приоритета процесса используется при определении приоритетов его нитей. Подробнее об этом в п. 4.5.3.

Хэндл объекта ядра Windows (в данном случае процесса или нити) позволяет выполнять различные операции с этим объектом. Подробнее о хэндлах и идентификаторах см. п. 4.5.4.

После создания процесса его единственная нить начинает выполнять программу процесса, работая параллельно с нитями других запущенных процессов. Если логика работы программы предполагает параллельное выполнение каких-либо действий в рамках одного процесса, то могут быть созданы дополнительные нити. Для этого используется функция CreateThread. Ее основные параметры следующие:

· атрибуты защиты для создаваемой нити;

· размер стека нити;

· стартовый адрес нити (обычно нить связывается с выполнением одной из функций, описанных в программе процесса, при этом в качестве стартового адреса указывается имя функции);

· параметр-указатель, позволяющий передать нити при запуске некоторое значение в качестве аргумента;

· флаг создания нити в приостановленном состоянии;

· указатель на переменную, в которой функция должна возвратить идентификатор созданной нити.

Возвращаемым значением функции CreateThread является хэндл созданной нити либо NULL, если создать нить не удалось.

Прекрасным примером многонитевой программы является Microsoft Word. В то время как основная нить обрабатывает ввод с клавиатуры, отдельная нить может динамически рассчитывать разбиение текста на страницы, еще одна нить может в это же время выполнять печать документа или его сохранение.

Для завершения работы нити используется вызов функции ExitThread. Для завершения работы всего процесса любая из его нитей может вызвать функцию ExitProcess. Единственным параметром каждой из этих функций является код завершения нити или процесса.

Завершение процесса приводит к освобождению всех ресурсов, которыми владел процесс: памяти, открытых файлов и т.п.

При завершении процесса завершаются все его нити. И наоборот, при завершении последней нити процесса завершается и сам процесс.

Не слишком широко известно, что нить не является самой мелкой единицей организации вычислений. На самом деле Windows позволяет создать внутри нити несколько волокон (fiber), которые в обычной терминологии могут быть описаны как сопрограммы или как задачи с невытесняющей диспетчеризацией, работающие в рамках одной и той же задачи с вытесняющей диспетчеризацией. Переключение волокон выполняется только явно, с помощью функции SwitchToFiber. Об использовании сопрограмм см. /15/.

Планировщик Windows

Задачей планировщика является выбор очередной нити для выполнения. Планировщик вызывается в трех случаях:

· если истекает квант времени, выделенный текущей нити;

· если текущая нить вызвала блокирующую функцию (например, WaitForMultipleObjects или ReadFile) и перешла в состояние ожидания;

· если нить с более высоким приоритетом пробудилась от ожидания или была только что запущена.

Для выбора нити используется алгоритм приоритетной очереди. Для каждого уровня приоритета система ведет очередь активных нитей (т.е. нитей, находящихся в состоянии готовности). Для выполнения выбирается очередная нить из непустой очереди с самым высоким приоритетом.

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

Значение кванта времени для серверных установок Windows равно обычно 120 мс, для рабочих станций – 20 мс.

Как вы думаете, почему для серверов квант времени больше?

Теперь подробнее о приоритетах. Хотя общая схема их назначения одинакова для всех версий Windows, детали могут разниться. Дальнейшее изложение ориентировано на Windows NT 4.0.

Все уровни приоритета нитей пронумерованы от 0 (самый низкий приоритет) до 31 (самый высокий). Уровни от 16 до 31 называются приоритетами реального времени , они предназначены для выполнения критичных по времени системных операций. Только сама система или пользователь с правами администратора могут использовать приоритеты из этой группы. Уровни от 0 до 15 называются динамическими приоритетами .

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

· Realtime (базовый приоритет 24) – высший класс приоритета, допустимый только для системных процессов, занимающих процессор на очень короткое время;

· High (базовый приоритет 13) – класс высокоприоритетных процессов;

· Normal (базовый приоритет 8) – обычный класс приоритета, к которому относится большая часть запускаемых прикладных процессов;

· Idle (базовый приоритет 4) – низший (буквально – «холостой» или «простаивающий») класс приоритета, характерный для экранных заставок, мониторов производительности и других программ, которые не должны мешать жить более важным программам.

Собственно приоритет связывается не с процессом, а с каждой его нитью. Приоритет нити определяется базовым приоритетом процесса, к которому прибавляется относительный приоритет нити – величина от –2 до +2. Относительный приоритет назначается нити при ее создании и может при необходимости изменяться. Имеется также возможность назначить нити критический приоритет (31 для процессов реального времени, 15 для остальных) или холостой приоритет (16 для процессов реального времени, 0 для остальных).

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

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

· Когда заблокированная нить дождалась нужного ей события, к приоритету нити прибавляется величина, зависящая от причины ожидания. Эта прибавка может достигать 6 единиц (но приоритет не должен превысить 15), если нить разблокирована вследствие нажатия клавиши или кнопки мыши. Таким способом система стремится уменьшить время реакции на действия пользователя. Всякий раз, когда нить полностью использует свой квант времени, прибавка уменьшается на 1, пока приоритет нити не вернется к своему заданному значению.

· Если нить владеет окном переднего плана (т.е. тем, с которым работает пользователь), то ради уменьшения времени реакции планировщик может увеличить квант времени для этой нити с 20 мс до 40 или 60 мс, в зависимости от настроек системы.

· Если планировщик обнаруживает, что некоторая нить пребывает в очереди более 3 с, то он повышает ее приоритет аж до 15 и удваивает ее квант. Но эта благотворительность разовая: когда Золушка-нить израсходует увеличенный квант или заблокируется, ее приоритет и квант возвращаются к прежним значениям. Смысл акции понятен: система пытается обеспечить хоть какое-то продвижение даже для низкоприоритетных нитей.

Процесс и нить как объекты

Подсистема управления процессами в Windows позволяет рассматривать процессы и нити как объекты, над которыми нити различных процессов могут выполнить целый ряд действий. Для этого требуется иметь хэндл процесса или нити. Как нам известно, такие хэндлы возвращаются как побочные результаты работы функций CreateProcess и CreateThread. Это позволяет процессу, запустившему другой процесс или нить, выполнять с ними необходимые действия. Однако в некоторых случаях желательно дать возможность управлять процессом не процессу-«родителю», а другому, совершенно постороннему процессу (например, программе администрирования системы). Проблема при этом в том, что, как уже отмечалось, хэндл в Windows имеет смысл только в пределах того процесса, который вызвал функцию Create и не может быть просто передан другому процессу.

Функция OpenProcess позволяет одному процессу получить хэндл любого другого процесса, указав для этого два параметра: идентификатор интересующего процесса и маску, задающую набор запрашиваемых прав по отношению к этому процессу. Если подсистема безопасности Windows, сверив маркер доступа запрашивающего процесса с дескриптором безопасности процесса-объекта (см. п. 3.8.4.1), сочтет запрос законным, то функция вернет требуемый хэндл.

А о каких, собственно, правах идет речь? Что именно один процесс может сделать с другим процессом? Основные права следующие:

· запускать новую нить процесса;

· запрашивать и изменять класс приоритета процесса;

· использовать процесс в качестве объекта синхронизации;

· принудительно прекращать выполнение процесса;

· запрашивать код завершения процесса.

Все перечисленные действия выполняются с помощью соответствующих API-функций (например, для прекращения процесса вызывается функция TerminateProcess), одним из параметров которых указывается хэндл открытого процесса-объекта.

Синхронизация нитей

Способы синхронизации

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

· Традиционной для Windows формой синхронизации является обмен сообщениями (messages). При этом, механизм сообщений предназначен не только для синхронизации, но и для обмена данными. Далее работа с сообщениями будет рассмотрена подробно.

· Разнообразные условия ожидания могут быть реализованы с помощью объектов синхронизации и функций ожидания , которые позволяют заблокировать нить до момента перехода указанного объекта в сигнальное состояние.

· Использование переменных типа CRITICAL_SECTION, в отличие от предыдущих способов, возможно только для синхронизации нитей одного и того же процесса, но зато реализуется более эффективно по времени и памяти.

Управление процессами

Важнейшей частью операционной системы, непосредственно влияющей на функ­ционирование вычислительной машины, является подсистема управления процессами.

Для каждого вновь создаваемого процесса ОС генерирует системные информа­ционные структуры, которые содержат данные о потребностях процесса в ресур­сах вычислительной системы, а также о фактически выделœенных ему ресурсах. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, процесс можно также определить как некоторую заявку на по­требление системных ресурсов.

Чтобы процесс мог быть выполнен , операционная система должна назначить ему область оперативной памяти , в которой будут размещены коды и данные процес­са, а также предоставить ему крайне важно е количество процессорного времени. Вместе с тем, процессу может понужнобиться доступ к таким ресурсам, как файлы и устройства ввода-вывода.

В информационные структуры процесса часто включаются вспомогательные данные, характеризующие историю пребывания процесса в системе, его текущее состояние (активное или заблокированное), степень привилегированности процесса (значение приоритета). Данные такого рода мо­гут учитываться операционной системой при принятии решения о предоставле­нии ресурсов процессу.

В мультипрограммной операционной системе одновременно может существо­вать несколько процессов. Часть процессов порождается по инициативе пользо­вателœей и их приложений, такие процессы обычно называют пользовательскими . Другие процессы, называемые системными , инициализируются самой операци­онной системой для выполнения своих функций.

Важной задачей операционной системы является защита ресурсов , выделœенных данному процессу, от остальных процессов. Одним из наиболее тщательно защи­щаемых ресурсов процесса являются области оперативной памяти, в которой хранятся коды и данные процесса. Совокупность всœех областей оперативной па­мяти, выделœенных операционной системой процессу, принято называть его адресным пространством. Говорят, что каждый процесс работает в своем адресном про­странстве, имея в виду защиту адресных пространств, осуществляемую ОС, За­щищаются и другие типы ресурсов, такие как файлы, внешние устройства и т. д. Операционная система может не только защищать ресурсы, выделœенные одному процессу, но и организовывать их совместное использование, к примеру разре­шать доступ к некоторой области памяти нескольким процессам.

На протяжении периода существования процесса его выполнение должна быть многократно прервано и продолжено. Для того чтобы возобновить выполнение процесса, крайне важно восстановить состояние его операционной среды. Состоя­ние операционной среды идентифицируется состоянием регистров и программного счетчика, режимов работы процессора, указателя на открытые файлы, информацией о незавершенных операциях ввода-вывода, кодами ошибок выполняемых данным процессом системных вызовов и т.д. Эта информация называет­ся контекстом процесса. Говорят, что при смене процесса происходит переклю­чение контекстов.

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

В операционной системе нет однозначного соответствия между процессами и программами. Один и тот же программный файл может породить несколько па­раллельно выполняемых процессов, а процесс может в ходе своего выполнения сменить программный файл и начать выполнять другую программу. Для реализации сложных программных комплексов полезно бывает организо­вать их работу в виде нескольких параллельных процессов, которые периодиче­ски взаимодействуют друг с другом и обмениваются некоторыми данными. Так как операционная система защищает ресурсы процессов и не позволяет одному процессу писать или читать из памяти другого процесса, то для оперативного взаимодействия процессов ОС должна предоставлять особые средства, которые называют средствами межпроцессного взаимодействия.

Таким образом , подсистема управления процессами (рис.4.) планирует выполнение про­цессов, то есть распределяет процессорное время между несколькими одновре­менно существующими в системе процессами, занимается созданием и уничто­жением процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает синхронизацию процессов, а также обеспечивает взаимодействие между процессами

Управление памятью

Память является для процесса таким же важным ресурсом, как и процессор, так как процесс может выполняться процессором только в том случае, в случае если его коды и данные (не обязательно всœе) находятся в оперативной памяти. Управление памятью включает распределœение имеющейся физической памяти между всœеми существующими в системе в данный момент процессами, загрузку кодов и данных процессов в отведенные им области памяти, настройку адресно-зависимых частей кодов процесса на физические адреса выделœенной области, а также защиту областей памяти каждого процесса.

Существует большое разнообразие алгоритмов распределœения памяти. Οʜᴎ мо­гут отличаться:

Количеством выделяемых процессу областей памяти (в одних случаях память выделяется процессу в виде одной непрерывной облас­ти, а в других - в виде нескольких несмежных областей),

Степенью свободы гра­ницы областей (она должна быть жестко зафиксирована на всœе время существова­ния процесса или же динамически перемещаться при выделœении процессу дополнительных объёмов памяти),

В некоторых системах распределœение памяти выполняется страницами фиксированного размера, а в других - сегментами пе­ременной длины

Одним из наиболее популярных способов управления памятью в современных операционных системах является так называемая виртуальная память .

Защита памяти - это избирательная способность предохранять выполняемую задачу от записи или чтения памяти, назначенной другому процессу (задаче). Средства защиты памяти, реализован­ные в операционной системе, должны пресекать несанкционированный доступ процессов к чужим областям памяти.

Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, функциями ОС по управлению памятью являются (рис.5) отслежива­ние свободной и занятой памяти; выделœение памяти процессам и освобождение памяти при завершении процессов; защита памяти; вытеснение процессов из оперативной памяти на диск, когда размеры основной памяти недостаточны для размещения в ней всœех процессов, и возвращение их в оперативную память, ко­гда в ней освобождается место, а также настройка адресов программы на кон­кретную область физической памяти.

Управление файлами и внешними устройствами

Опе­рационная система виртуализирует отдельный набор данных, хранящихся на внешнем накопителœе в виде файла - простой неструктурированной последова­тельности байтов, имеющей символьное имя. Для удобства работы с данными файлы группируются в каталоги. Пользователь может с помощью ОС выполнять над файлами и каталогами такие действия, как поиск по имени, удаление, вывод содержимого на внешнее устройство (к примеру, на дисплей), изменение и сохра­нение содержимого.

Чтобы представить большое количество наборов данных, разбросанных случай­ным образом по цилиндрам и поверхностям дисков различных типов, в виде хо­рошо всœем знакомой и удобной иерархической структуры файлов и каталогов, операционная система должна решить множество задач.

Файловая система ОС выполняет преобразование символьных имен файлов, с которыми работает пользователь или прикладной программист, в физические адреса данных на диске, организует совместный доступ к файлам, защищает их от несанкционированного доступа.

При выполнении своих функций файловая система тесно взаимодействует с под­системой управления внешними устройствами, которая по запросам файловой системы осуществляет передачу данных между дисками и оперативной памятью.

Подсистема управления внешними устройствами, называемая также подсисте­мой ввода-вывода , исполняет роль интерфейса ко всœем устройствам, подключен­ным к компьютеру. Спектр этих устройств очень обширен. Номенклатура вы­пускаемых накопителœей на жестких, гибких и оптических дисках, принтеров, сканеров, мониторов, плоттеров, модемов, сетевых адаптеров и более специаль­ных устройств ввода-вывода, таких как, к примеру, аналого-цифровые преобразо­ватели, может насчитывать тысячи моделœей. Эти модели могут существенно отличаться набором и последовательностью команд, с помощью которых осуще­ствляется обмен информацией с процессором и памятью компьютера, скоростью работы, кодировкой передаваемых данных, возможностью совместного исполь­зования и множеством других деталей.

Программа, управляющая конкретной моделью внешнего устройства и учиты­вающая всœе его особенности, обычно принято называть драйвером этого устройства (от английского drive - управлять, вести). Созданием драйверов устройств занимаются как разработчики конкретной ОС, так и специалисты компаний, выпускающих внешние устройства.

Поддержание высокоуровневого унифицированного интерфейса прикладного программирования к разнородным устройствам ввода-вывода является одной из наиболее важных задач ОС.

Со времени появления ОС UNIX такой унифи­цированный интерфейс в большинстве операционных систем строится на базе концепции файлового доступа. Эта концепция состоит по сути в том, что обмен с любым внешним устройством выглядит как обмен с файлом, имеющим имя и представляющим собой неструктурированную последовательность байтов. В качестве файла может выступать как реальный файл на диске, так и алфавитно-цифровой терминал, печатающее устройство или сетевой адаптер.
Размещено на реф.рф
Здесь мы опять имеем дело со свойством операционной системы подменять реальную аппаратуру удобными для пользователя и программиста абстракциями.

Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, функциями ОС по управлению файлами и внешними устройствами (рис.6) являются виртуализация отдельных наборов данных; преобразование символьных имен файлов в физические адреса данных на диске; передачу данных между внешними устройствами и оперативной памятью; управление конкретным типом периферийных внешних устройств; реализации концепции файлового доступа для обмена данными с внешними устройствами.

Управление процессами - понятие и виды. Классификация и особенности категории "Управление процессами" 2017, 2018.