Разработка программного кода. Анализ набора функций, необходимых для реализации приложения. Создание компонента Timer. Получение списка имен процессов запущенных на локальном компьютере. Проверка правильности работы программы и соответствия требованиям.
Аннотация к работе
Процессы существуют в операционной системе и соответствуют тому, что пользователи видят как программы или приложения. На многопроцессорном компьютере процессы или потоки могут работать на разных процессорах. Кроме этого, операционной системе для реализации планирования процессов требуется дополнительная информация: идентификатор процесса, состояние процесса, данные о степени привилегированности процесса, место нахождения кодового сегмента и другая информация. Для получения информации о процессах в курсовом проекте были использованы две бибилиотеки: Tool Help Library(THL) и Performance Data Helper (PDH). Поэтому с помощью библиотеки THL будем извлекать только имя процесса, всю остальную информацию о процессах будем получать с помощью библиотеки PDH (информация извлекаемая с помощью библиотеки THL плюс загруженность процесса, виртуальная память, память подкачки).В рамках выполнения курсового проекта по дисциплине «Операционные системы» была изучена и проанализирована учебно-методическая документация, учебная литература и интернет - источники по выбранной теме дисциплины Были рассмотрены различные методы решения этой задачи и выбран наиболее удобный вариант или алгоритм. Приложение позволяет получать подробную информацию о всех процесса, запущенных на локальном компьютере, при желании пользователя возможность завершения выбранного им процесса. Для достижения цели были выполнены следующие задачи: § изучена и проанализирована учебно-методическая документация, учебная литература и интернет - источники по выбранной теме дисциплины;#include #include #include #include #includeКод программы: #include #include #include "Unit1.h" {procnames->Strings[j]= procnames->Strings[j].SUBSTRING(1,procnames->Strings[j].Length()-4); } procnames->Strings[i]= procnames->Strings[i].SUBSTRING(1,procnames->Strings[i].
План
Содержание
Введение
Анализ
Проектирование
Кодирование и отладка
Тестирование
Сопровождение
Заключение
Список использованной литературы
Приложения
Введение
Целью проекта является приобретение практических навыков и умений реализовывать поставленные задачи, с помощью языка программирования, а также ознакомление с правилами составления и оформления проектных документов.
В ходе проектирования необходимо рассмотреть все возможные подходы и методы решения поставленной задачи и выбрать оптимальный.
Цель курсовой работы - разработать электронное приложение «инспектор процессов и потоков».
Для достижения цели нам нужно выполнить следующие задачи: § изучить и проанализировать учебно-методическую документацию, учебную литературу и интернет - источники по выбранной теме дисциплины;
§ выбрать наиболее оптимальный способ реализации поставленной цели;
§ определить набор функций, необходимых для реализации приложения;
-разработать и протестировать приложение «инспектор процессов и потоков». Конечным результатом данного проекта является программа «инспектор процессов и потоков».
Конструктивно курсовая работа состоит из 4 разделов.
В первом разделе работы проведен анализ предметной области, а также найдены существующие решения задачи. Описан способ его реализации с помощью библиотек Tool Help Library(THL) и Performance Data Helper (PDH).
Во втором разделе представлен план реализации приложения.
Третий раздел содержит функции и их параметры, по средствам которых производится решение задачи.
В последнем разделе тестирования приведен результат разработанной программы и оценена правильность его функционирования.
Сопровождение содержит описание работы приложения.
При написании было использовано 3 источника литературы. Основным был Таненбаум Э. «Современные Операционные системы».
Анализ
Потоки и процессы - это связанные понятия в вычислительной технике. Оба представляют из себя последовательность инструкций, которые должны выполняться в определенном порядке. Инструкции в отдельных потоках или процессах, однако, могут выполняться параллельно.
Процессы существуют в операционной системе и соответствуют тому, что пользователи видят как программы или приложения. Поток, с другой стороны, существует внутри процесса. По этой причине потоки иногда называются "облегченные процессы". Каждый процесс состоит из одного или более потоков.
Существование нескольких процессов позволяет компьютеру "одновременно" выполнять несколько задач. Существование нескольких потоков позволяет процессу разделять работу для параллельного выполнения. На многопроцессорном компьютере процессы или потоки могут работать на разных процессорах. Это позволяет выполнять реально параллельную работу.
Кроме этого, операционной системе для реализации планирования процессов требуется дополнительная информация: идентификатор процесса, состояние процесса, данные о степени привилегированности процесса, место нахождения кодового сегмента и другая информация. Информацию такого рода, используемую ОС для планирования процессов, называют дескриптором процесса.
Для получения информации о процессах в курсовом проекте были использованы две бибилиотеки: Tool Help Library(THL) и Performance Data Helper (PDH). С помощью библиотеки THL можно извлечь информацию о запущенных процессах: имя процесса, идентификатор процесса (PID), приоритет процесса, количество потоков, идентификатор процесса (PID) родителя. Этой информации не достаточно для решения поставленной задачи. Поэтому с помощью библиотеки THL будем извлекать только имя процесса, всю остальную информацию о процессах будем получать с помощью библиотеки PDH (информация извлекаемая с помощью библиотеки THL плюс загруженность процесса, виртуальная память, память подкачки). Для создания приложения будем использовать среду разработки С Builder 6.0.
Проектирование программный код локальный компьютер
Задача проектирования была разбита на несколько этапов: 1. Получение имени локального компьютера, на котором запущено приложение и создание запроса, который будет управлять собранными данными производительности процессов
2. Создание компонента Timer. В его обработчик события помещается основной код программы
3. Получение списка имен процессов запущенных на локальном компьютере
4. Удаление в имени процесса разрешения «exe»
5. Добавление порядкового номера к повторяющемуся имени процесса
6. Собрание необработанных значений данных для всех счетчиков в указанном запросе
После двух срабатываний таймера приложение заново составит список имен запушенных процессов и далее будет работать по вышеописанному алгоритму, но перед этим очистит список.
Для реализации выше описанного алгоритма необходимо создать на главной форме поле с использованием компонента STRINGGRID, которое представляет собой таблицу, содержащую строки. Это поле будет автоматически заполняться полученной информацией о счетчиках процессов и именами процессов локального компьютера. Также необходимо, чтобы эта информация постоянно обновлялась.
Так же на поле формы помещаем две кнопки с именами «Button1» и «Button2».
Кнопка «Button1» нужна для завершения выбранного пользователем процесса, а кнопка «Button2» для выхода и завершения работы приложения.
Помимо на форму помещается компонент класса TTIMER с именем «Timer1»: Этот компонент нужен для организации обновления значения счетчиков.
Рис.1.1 Главная форма приложения (Form1)
Кодировка и отладка
Целью данного этапа является программная реализация проектных решений, полученных на этапе проектирования, т.е. создание работоспособного программного продукта. Для реализации проекта выбран язык С Builder 6.0, а так же воспользуемся функциями библиотек Tool Help Library (THL) и Performance Data Helper (PDH)
Рассмотрим подробно каждый этап: 1. Получение снимка всех процессов
Для получения списка запущенных процессов необходимо инициализировать структуру PROCESSENTRY32: typedef struct TAGPROCESSENTRY32 {
DWORD DWSIZE; Размер струтуры в байтах
DWORD CNTUSAGE;
DWORD th32PROCESSID; Идентификатор процесса
DWORD th32DEFAULTHEAPID;
DWORD th32MODULEID;
DWORD CNTTHREADS; Число потоков в процессе
DWORD th32PARENTPROCESSID; Идентификатор родительского процесса
LONG PCPRICLASSBASE; Базовый приоритет какого-либо потока процесса
DWORD DWFLAGS;
TCHAR SZEXEFILE[MAX_PATH]; Имя исполняемого процесса
DWORD th32MEMORYBASE;
DWORD th32ACCESSKEY;
PROCESSENTRY32;
typedef PROCESSENTRY32* PPROCESSENTRY32;
Для использования данной функции необходимо подключить библиотеку tlhelp32.
Первый параметр DWFLAGS - определяет тип моментального снимка и указывает, какая именно информация интересует пользователя. В курсовом проекте используется значение TH32CS_SNAPPROCESS позволяющее получить список запущенных на локальном компьютере процессов.
Второй параметр th32PROCESSID , указывает идентификатор процесса, для которого будет создаваться моментальный снимок Этот параметр в курсовом проекте устанавливаем NULL.
2. Извлечение информации о первом процессе, записанном в снимок
Данная функция возвращает TRUE, в случае успеха получения информации о первом процессе из снимка процессов и FALSE в обратном случае. Заполняет структуру lppe необходимой информацией о первом процессе из снимка, сделанного функцией CREATETOOLHELP32Snapshot.
3. Извлечение информации о других процессах, записанных в снимок
Данная функция извлекает информацию о следующем процессе.
Первый параметр HSNAPSHOT - дескриптор снимка, возвращаемый от предыдущего вызова функции CREATETOOLHELP32Snapshot.
Второй параметр lppe - адрес структуры PROCESSENTRY32.
Перед вызовом функции Process32First необходимо установить в поле DWSIZE структуры PROCESSENTRY32 значение, которое равно размеру самой структуры sizeof(PROCESSENTRY32), иначе функция возвращает ошибку.
4. Сортировка полученного списка
На данном этапе отслеживается появление разрешения «exe» в имени процесса, а затем удаляется.
5. Получение порядкового номера для процессов с одинаковыми именами
В списке попадаются процессы с одинаковым именем, к повторяющемуся имени добавляется «#порядковый номер».
Первый параметр SZDATASOURCE - строка, которая определяет имя файла журнала, из которого извлекаются данные о производительности. If NULL, performance data is collected from a real-time data source. Если NULL, данные о производительности собираются из источника данных в реальном времени.
Второй параметр DWUSERDATA - определяемое пользователем значение, связанное с этим запросом. В нашем случае NULL.
8. Добавление счетчика к запросу
При помощи функции PDHADDCOUNTER добавляется счетчик к запросу, сделанному с помощью функции PDHOPENQUERY.
Функция возвращает дескриптор существующего процесса.
Первый параметр DWDESIREDACCESS - флаг определяющий доступ к процессу. В курсовой работе будем использовать флаг PROCESS_TERMINATE необходимый для завершения работы процесса с использованием функции TERMINATEPROCESS.
Второй параметр BIN-HERITHANDLE - флаг, указывающий, является ли создаваемый дескриптор наследуемым. Он установлен в значение TRUE это означает, что дескриптор наследуемый.
Третий параметр DWPROCESSID - идентификатор процесса.
И вторая функция (строка 180) завершает работу заданного процесса и всех его потоков: BOOL TERMINATEPROCESS(HANDLE HPROCESS,UINT UEXITCODE).
Первый параметр HPROCESS - дескриптор процесса.
Второй параметр UEXITCODE - код завершения процесса. Этот параметр в курсовом проекте устанавливаем NULL.
Функция используется для закрытия открытого дескриптора объекта
BOOL CLOSEHANDLE (HANDLE HOBJECT).
Параметр HOBJECT - дескриптор объекта.
Для определения выделенной строки в данный момент времени воспользуемся обработчиком события таблицы ONSELECTCELL где переменная с получает номер выделенной строки.
Следующая переменная b получает идентификатор процесса (PID), но перед этим извлеченный идентификатор из таблицы переведем из типа ANSISTRING в тип int .
Тестирование
На данном этапе разработки необходимо проверить правильность работы программы и соответствие требованиям. При запуске приложение компилируется без ошибок и предупреждений. В поле отображаются имена запущенных процессов на данном локальном компьютере и все значения счетчиков. Таблица периодически обновляется.
Для тестирования данного приложения открывались программы «Блокнот» и «Word».В таблице отобразились запущенные процессы. При выделении пользователем одного из запущенных процессов после нажатия кнопки «Завершение процесса» процесс завершался.
Рис 2.1 Главное окно приложения
Рис 2.2 Вторичное окно приложения
Рис 2.3 Вторичное окно приложения
Для проверки правильность отображения информации воспользуемся средствами ОС. Запустим диспетчер задач и откроем вкладку процессы, где хранится информация о процессах.
Рис 2.4 Диспетчер задач Windows
Как видно на рис 2.1-2.4 все имена процессов, их число, соответствующие идентификаторы и количество потоков в процессе полностью совпадают.
Проверим динамичность работы данного приложения. Для этого завершим несколько процессов. Для этого попробуем завершить процесс «Блокнот»
Рис 2.5 Вторичное окно приложения
Рис 2.6 Вторичное окно приложения
Как мы видим из рис 2.6 завершение процесса блокнот прошло успешно.
Сопровождение
Для запуска приложения необходимо запустить исполняемый файл «Инспектор процессов». При запуске выводится список процессов, действующих в настоящий момент и информация о них. При нажатии кнопки «Завершение процесса» выделенный процесс в списке завершается, а при нажатии кнопки «Выход» приложение закрывается.
Но в процессе разработки приложения была выявлена одна проблема. Данное приложение не работает эффективно на компьютерах, у которых стоит англоязычная версия ОС Windows. Для устранения этой проблемы было создано два пакета программ как для русскоязычной версии Windows так и англоязычной. Для того, чтобы разработать приложение для англоязычной версии ОС была выбрана среда разработки Embarcadero C Builder XE3.(Код программы представлен в приложении С). Но полностью решить возникшую проблему не удалось, так как функция PDHADDENGLISHCOUNTER, которая была использована для разработки приложения для англоязычных версий ОС, поддерживается лишь с версии ОС Vista и выше. На версиях ниже ОС Vista приложение с использованием этой функции работать не будет.
Вывод
В рамках выполнения курсового проекта по дисциплине «Операционные системы» была изучена и проанализирована учебно-методическая документация, учебная литература и интернет - источники по выбранной теме дисциплины
Были рассмотрены различные методы решения этой задачи и выбран наиболее удобный вариант или алгоритм.
Был определен набор функций, необходимых для реализации поставленной цели.
Разработан программный код и произведена его отладка.
Итогом данного курсового проектирования является приложение «Инспектор процессов и потоков». Приложение позволяет получать подробную информацию о всех процесса, запущенных на локальном компьютере, при желании пользователя возможность завершения выбранного им процесса. Для проверки корректности работы программы было произведено несколько тестов, результаты которых не было выявлено явных ошибок в работе программы.
Для достижения цели были выполнены следующие задачи: § изучена и проанализирована учебно-методическая документация, учебная литература и интернет - источники по выбранной теме дисциплины;
§ выбран наиболее оптимальный способ реализации поставленной цели;
§ определен набор функций, необходимых для реализации поставленной цели;
§ разработано и протестировано приложение «Инспектор процессов и потоков»;
В результате выполнения курсового проекта цель достигнута, задачи полностью реализованы.
В качестве расширения возможностей приложения можно добавить новые функции или ряд счетчиков, а так же попробовать найти решение, которое поможет устранить проблему работы приложения на англоязычный версий ОС.
Список литературы
1. Пахомов Б.И. Самоучитель С\С и С Builder 2007. - СПБ.: БХВ-Петербург, 2008. - 672 с.: ил. Дистрибутив (на DVD)
2. П.В. Гришмановский, И.Н. Даниленко. - Курсовое проектирование. Разработка программного обеспечения. Методические указания к выполнению курсовых проектов для студентов специальностей 210100 «Управление и информатика в технических системах» и 220400 «Программное обеспечение вычислительной техники и автоматизированных систем». Сургут: Издательство СУРГУ, 2004. - 23с
3. Таненбаум Э. «Современные Операционные системы»