Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3468

.pdf
Скачиваний:
4
Добавлен:
15.11.2022
Размер:
5.57 Mб
Скачать

Типы ОС мультипроцессорной обработки и их структура построения представлены на рис. 15.

Рис. 15. Типы ОС мультипроцессорной обработки

Основные функции управления процессами и потока-

ми:

1.Создание процессов и потоков.

2.Обеспечение процессов и потоков необходимыми ре-

сурсами.

3.Изоляция процессов.

4.Планирование выполнения процессов и потоков.

5.Диспетчеризация потоков.

6.Организация межпроцессного взаимодействия.

7.Синхронизация процессов и потоков.

8.Завершение и уничтожение процессов и потоков.

21

Состояния процесса

Модель процесса представлена на рис. 16.

Рис. 16. Модель процесса

Переход процесса из одного состояния в другое представлен на рис. 17.

Рис. 17. Переход процесса из одного состояния в другое

22

Взаимодействие с процессами с помощью библиотек базовых классов .NET языка программирования C#

В пространстве имен System.Diagnostics существует ряд типов, которые позволяют программно взаимодействовать с процессами. Некоторые члены данного пространства имен представлены в табл. 1.

Таблица 1 Некоторые члены пространства имен System.Diagnostics

Название

Назначение

Process

Предоставляет доступ к локальным

 

и удаленным процессам, а также

 

позволяет запускать и останавли-

 

вать процессы программным обра-

 

зом.

ProcessModule

Позволяет представлять модуль

 

(*.dll или *.ехе), который должен

 

загружаться в определенный про-

 

цесс.

 

Этот тип может применяться для

 

представления любого модуля: на

 

базе СОМ, на базе .NET или тради-

 

ционного двоичного модуля на базе

 

С.

ProcessModuleCollection

Позволяет создавать строго типи-

 

зированную коллекцию объектов

 

ProcessModule.

ProcessStartInfo

Позволяет указывать ряд значений,

 

которые должны использоваться

 

при запуске процесса посредством

 

метода Process. Start().

 

23

Продолжение табл. 1

ProcessThread Позволяет представлять поток внутри определенного процесса. Этот тип применяется для осуществления диагностики ряда потоков в процессе, но не для ответвления внутри него новых потоков.

ProcessThreadCollection Позволяет создавать строго типизованную коллекцию объектов

ProcessThread.

Тип System.Diagnostics.Process позволяет анализировать процессы, выполняющиеся на определенной машине (как локальной, так и удаленной). Класс Process обладает членами, которые позволяют запускать и останавливать процессы программным образом, просматривать приоритет процесса, а также получать список активных потоков и/или загруженных модулей, которые выполняются в рамках конкретного процесса. В табл. 2 перечислены некоторые наиболее важные члены

System.Diagnostics.Process.

 

Таблица 2

 

Некоторые члены типа Process

Название

Назначение

Id

Представляет собой свойство и позволяет

 

получать идентификатор (PID) соответству-

 

ющего процесса.

ProcessName

Представляет собой свойство и позволяет

 

получать имя процесса, которое совпадает с

 

именем самого приложения.

GetProcesses ()

Представляет собой статический метод и

 

возвращает массив новых компонентов

 

Process, которые выполняются на текущей

 

машине.

 

24

 

Продолжение табл.2

Threads

Представляет собой свойство и позволяет

 

получать информацию о потоках, которые

 

выполняются в рамках соответствующего

 

процесса (в виде массива типов

 

ProcessThread).

StartTime

Представляет собой свойство и позволяет

 

получать информацию о времени, когда был

 

запущен соответствующий процесс (в виде

 

типа DateTime).

PriorityLevel

Позволяет получать или устанавливать уро-

 

вень приоритета потока.

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

тора (PID).

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

Выполнение задания 1:

1) Программная реализация перечисления выполняющихся процессов

25

Чтобы посмотреть, как манипулировать типами Process, создадим новый проект типа С# (рис. 18) в виде консольного приложения по имени Processi (рис. 19).

В среде программирования

Visual Studio выбрать пункт Create: Project

Рис. 18. Создание проекта в среде Visual Studio

1.Выбрать пункт «Консольное приложение»

2. Ввести имя

3. Выбрать нуж-

4. Сохранить

проекта

ную папку

проект

Рис. 19. Выбор и сохранение консольного приложения

26

Пользователю откроется окно редактора кода с заготовкой для проекта (рис. 20).

Рис. 20. Окно редактора кода проекта

Определим в проекте внутри класса Program вспомогательный статический метод ListAllRunningProcesses() (не забыв импортировать пространство имен System.Diagnostics).

Обратите внимание на то, что статический метод

Process.GetProcesses() возвращает массив типов Process, ко-

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

27

можно вызывать любой из описанных в табл. 2 член. Здесь отображается идентификатор (PID) и имя каждого процесса.

Далее надо изменить метод Main() так, чтобы он вызывал этот вспомогательный метод ListAllRunningProcesses()

(рис. 21).

Вывод списка процессов ОС, т.е. результаты работы программы, представлен на рис. 22.

Рис. 21. Листинг программы получения списка процессов

28

Рис. 22. Вывод списка процессов ОС

2) Программная реализация изучения конкретного процесса

Помимо полного перечня всех выполняющихся на конкретной машине процессов статический метод Process.GetProcessById() также позволяет получать информацию о конкретном типе Process с помощью соответствующего идентификатора (PID). В случае запроса доступа к несуществующему PID генерируется исключение ArgumentException. Например, если необходимо получить информацию об объекте Process, представляющем процесс с PID-идентификатором 987, можно написать следующий код:

//В случае отсутствия процесса с PID-идентификатором 987 //во время выполнения будет генерироваться соответствующее //исключение.

static void GetSpecificProcess ()

{

Process theProc = null;

29

try

{

theProc = Process.GetProcessById(987);

}

catch // Общий блок catch используется для простоты.

{

Console.WriteLine("-> Sorry...bad PID!"); // неверный PID

}

}

Для выполнения данного метода надо в методе Main() добавить обращение к методу (рис. 23). Листинг программы представлен на рис. 24, а результат работы программы – на рис. 25.

Рис. 23. Обращение к методу

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]