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

Учебное пособие 800564

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

Рис. 24. Обращение к конкретному процессу

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

Рис. 25. Результат обращения к заданному процессу

31

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

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

static void GetSpecificProcess(int pID)

{

Process theProc = null; Try

{

theProc = Process.GetProcessById(pID);

}

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

{

Console.WriteLine("-> Извините...неверный номер процесса

PID!"); // неверный PID return;

}

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

Console.WriteLine("Информация о процессе: {0}", theProc.ProcessName);

ProcessThreadCollection theThreads = theProc.Threads; foreach(ProcessThread pt in theThreads)

{

string info = string.Format("-> Поток ID: {0}\tВремя старта {1}\tПриоритет {2}", pt.Id , pt.StartTime.ToShortTimeString(),

32

pt.PriorityLevel);

Console.WriteLine(info);

}

Console.WriteLine("***********************\n");

}

После написания кода в методе Main(), позволяющего пользователю вводить номер процесса, и организации обращения к представленному в листинге методу GetSpecificProcess приложение выдаст следующий результат работы программы

(рис. 26).

Рис. 26. Информация о потоках заданного процесса

Тип ProcessThread не является сущностью, применяемой для создания, приостановки и уничтожения потоков в

.NET. Он представляет собой средство, служащее для получения диагностической информации по активным потокам Win32 внутри выполняющегося процесса.

33

4) Программная реализация изучения модулей внутри процесса

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

ступа к ProcessModuleCollection через свойство

Process.Module можно извлекать перечень всех модулей, которые обслуживаются внутри процесса: NET-, COMили традиционных основанных на С библиотек.

Создадим следующую дополнительную вспомогательную функцию, способную перечислять модули в конкретном процессе на основании предоставляемого PIDидентификатора:

static void EnumModsForPid(int pID)

{

Process theProc = null; try

{

theProc = Process.GetProcessById(pID);

}

catch

{

Console.WriteLine("-> Неверный PID!"); Console.WriteLine("***********************\n"); return;

}

Console.WriteLine("Модули для процеса: {0}", theProc.ProcessName);

try

{

34

ProcessModuleCollection theMods = theProc.Modules; foreach (ProcessModule pm in theMods)

{

string info = string.Format("-> Mod Name: {0}", pm.ModuleName);

Console.WriteLine(info);

}

Console.WriteLine(" *********************** *\n");

}

catch

{

Console.WriteLine("Модули не обнаружены!");

}

}

Результаты работы данного фрагмента программы представлены на рис. 27.

Рис. 27. Перечень модулей в конкретном процессе

35

Листинг всей программы представлен на рис. 28, продолжение листинга - рис. 29.

Рис. 28. Листинг всей программы

36

Рис. 29. Продолжение листинга всей программы

Задание 2. Разработать программу, реализующую работу диспетчера задач ОС в части получения информации о процессах, на основе программной реализации задания 1.

Вопросы по теме:

1.Многозадачность: понятие и эффект мультипрограммирования на примере двух процессов.

2.ОС мультипроцессорной обработки: ассиметричная и симметричная.

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

ми.

4.Понятие процесса и его дискретные состояния, переход процесса из одного состояния в другое.

37

ЛАБОРАТОРНАЯ РАБОТА № 3. ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ ПОТОКОВ. СОЗДАНИЕ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ

Цель работы: приобретение навыков создания многопоточных приложений.

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

Краткие теоретические сведения

Потоки и их модели

ОС генерирует описатель потока - информационную структуру, содержащую:

идентификатор потока,

данные о правах доступа и приоритете,

о состоянии потока,

и т.д.

Описатель потока можно разделить на две части:

атрибуты блока управления,

контекст потока.

Модель 1 - потоки в пространстве пользователя представлена на рис. 30.

38

Рис. 30. Потоки в пространстве пользователя

Модель 2 - потоки в пространстве ядра представлена на рис. 31.

Рис. 31. Потоки в пространстве ядра

39

Текстовый редактор с тремя потоками представлен на рис. 32.

Рис. 32. Текстовый редактор с тремя потоками

Совместные элементы процесса и индивидуальные элементы потока представлены в табл. 3.

Таблица 3 Совместные элементы процесса и индивидуальные

элементы потока

Элементы процесса

 

Элементы потока

 

 

 

 

 

1.

Адресное пространство

 

1.

Счетчик команд

 

 

 

 

 

2.

Глобальные переменные

 

2.

Регистры

 

 

 

 

 

3.

Открытые файлы

 

3.

Стек

 

 

 

 

 

4.

Дочерние процессы

 

4.

Состояние

 

 

 

 

 

 

 

40