1   2   3   4   5   6
Ім'я файлу: Курсова.docx
Розширення: docx
Розмір: 588кб.
Дата: 25.10.2021
скачати
Пов'язані файли:
Варикозна хвороба вен нижніх кінцівок.docx
ВАРІАНТ №5.docx



ЗМІСТ



ВСТУП…………………………………………………………………………5

1. ОГЛЯД ПОСТАВЛЕНОЇ ЗАДАЧІ………………………………………...6

1.1 Аналіз важливості використання профайлерів…………………..6

1.2 Аналіз існуючих методів та засобів профілювання……………...6

1.3 Поняття процесів та потоків……………………………………….7

1.4 Вибір мови програмування та середовища розробки……………7

1.5 Вибір та розробка структур даних………………………………...8

1.6 Функції Win API та функції користувача………………………...9

2. РОЗРОБКА КОМПОНЕНТ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ……………..11

2.1 Опис алгоритму роботи програми…………………………….…11

2.2 Розробка інтерфейсу користувача…………………………….…15

3. ТЕСТУВАННЯ……………………………………………………………18

3.1 Інсрукції користувачу………………………………………….…18

3.2 Результати тестування……………………………………………18

ВИСНОВКИ………………………………………………………………….20

СПИСОК ЛІТЕРАТУРИ…………………………………………………….21

ДОДАТОК 3. Код програми………………………………………………...22

ВСТУП



Профілювання є важливим для ефективної розробки програмних продуктів. Головною метою профілювання (аналізу продуктивності) - визначити які частини програми оптимізувати, для покращення використання пам'яті або швидкодії. Профілювання є джерелом інформації про функціонування процесів операційної системи і розподіл ресурсів комп’ютера між процесами. Використання профайлерів життєво необхідне в процесі планування продуктивності.

Інструменти програмного аналізу критично важливі для розуміння поведінки програми. Комп'ютерним архітекторам потрібні такі інструменти, щоб оцінити, як програми виконуватимуться на новій архітектурі. Авторам програмного забезпечення потрібні інструменти, аби проаналізувати їх програми і ідентифікувати критичні частини коду. Автори компіляторів часто використовують такі інструменти, аби з'ясувати, як добре виконується їх планування інструкцій або алгоритм передбачення, що відлагоджується.


1. ОГЛЯД ПОСТАВЛЕНОЇ ЗАДАЧІ


    1. Аналіз важливості використання профайлерів


Аналіз продуктивності, або профілювання при розробці програмного забезпечення це – дослідження поведінки програми, використовуючи інформацію, зібрану в результаті дії програми (тобто форма динамічного аналізу програми, в протилежність статичному аналізу коду). Звичайна мета аналізу продуктивності - визначити які частини програми оптимізувати, для покращення використання пам'яті або швидкості.

Для послідовних програм, профайлу зазвичай досить, але проблеми продуктивності в паралельних програмах (очікуючи повідомлень або проблем синхронізації) часто залежать від взаємозв'язку часу подій, тому вимагають повного запису, щоб зрозуміти проблему.


    1. Аналіз існуючих методів та засобів профілювання


На даний момент існує доволі широкий спектр методів та засобів побудови профайлерів. Існують такі типи профайлерів:

  1. За способом виводу:

- Профайлери, які виводять список подій;

- Профайлери, що будують граф викликів;

2) За способом збору даних:

- Базуються, на подіях певної мови програмування. Мови Java, .NET, Python, Ruby мають вбудовані засоби профілювання;

- Статистичні – здійснюють вибірку даних через певний інтервал. Наприклад: AMD Code Analyst, Apple Inc. Shark, Intel VTune;

- Інтерпретаційні – вибірка даних здійснюється у потрібному місці коду

- Інструментальні – модифікують програму при виконанні для збору даних. Наприклад gprof, Dynlnst, Valgrind, ATOM;

- Супервізори – по-суті віртуальні машини, які імітують виконання програм і виконують профілювання: SIMMON, OLIVER.

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

1.3 Поняття процесів та потоків
Під процесом розуміють абстракцію ОС, яка об'єднує все необхідне для виконання однієї програми в певний момент часу, тобто процес представляє собою певний об’єкт ОС. Процесом називають сукупність одного або декількох потоків і захищеного адресного простору, у якому ці потоки виконуються.

Потоком (потік керування, нитка, thread) називають набір послідовно виконуваних команд процесора, які використовують загальний адресний простір процесу. Оскільки в системі може одночасно бути багато потоків, завданням ОС є організація перемикання процесора між ними і планування їхнього виконання. У багатопроцесорних системах код окремих потоків може виконуватися на окремих процесорах.

У більшості сучасних ОС (таких, як лінія Windows XP, сучасні версії UNIX) може бути багато процесів, а в адресному просторі кожного процесу – багато потоків. Ці системи підтримують багато-потоковість або реалізують модель потоків. Процес у такій системі називають багато-потоковим процесом.
1.4 Вибір мови програмування та середовища розробки
Для реалізації курсової роботи була вибрана мова програмування С++. Вона найкраще підходить для вирішення системних задач для операційної системи Windows, оскільки забезпечує високу швидкодію і ступінь взаємодії з операційною системою. С++ підтримує процедурне, об’єктно-орієнтоване, узагальнене програмування.

Середовище програмування – Microsoft Visual Studio 2010. Тип проекту CLR Windows Forms Application – забезпечує підтримку бібліотек .NET, які в даній роботі викристовуються для побудови графічного інтерфейсу. Бібліотеки .NET надають величезний набір класів «на всі випадки життя»: списки, масиви, графічний інтерфейс і т. д.

.NET — крос - платформена технологія, в цей час існує реалізація для платформи Microsoft Windows, FreeBSD (від Microsoft) і варіант технології для ОС Linux в проекті Mono (в рамках угоди між Microsoft та Novell), DotGNU.

Тобто тут поєднується проста, швидка побудова графічного інтерфейсу і потужні системні можливості С++. Ці фактори дозволять створити програмне забезпечення для найбільш різноманітних потреб, хоча і потребують додаткового встановлення бібліотек .NET framework.
1.5 Вибір та розробка структур даних
Для реалізації курсової роботи я використав класи, списки, структури, функції. Класами представлено графічний інтерфейс, профілюючий потік, клас обробки подій профілювання.

Клас Form1 – успадковується від класу Form .NET і реалізує головне вікно програми. В конструкторі міститься виклик методу, що виконує додавання користувацьких елементів інтерфейсу в форму і їх початкову ініціалізацію, також вона містить дочірні форми ChooseProc для вибору процесу зі списку існуючих та StartProc для запуску нового процесу на виконання. Також тут міститься області для виводу графіків профілювання.

PicProc – область для виведення графіків використання процесорного часу, що використовується системою та процесом, що профілюється.

PicMem – область для виведення графіків використання пам’яті системою та процесом зокрема

lstEvents – список подій профілювання. Тут відображається інформація, що отримується за допомою класу Debuger та функцій Debug API зокрема.

DebugEvents, PerfInf – класи потоків .NET відповідають дочірнім потокам, призначення яких відслідкувування подій профілювання та збір статистичної інформації про роботу системи та процесу, що профілюється

Клас Debuger призначений для обробки подій профілювання і підключення, відключення та запуск процесу для профілювання. Також у ньому виконується головний цикл обробки подій профілювання. Він забезчує:

- Запуск процесу на виконання з параметрами, підключення процесу по ID

- Обробку подій профілювання і запис результатів в буфер

- Коректне відключення процесу, що профілюється

- Виконання головного циклу відслідковування подій в процесі, що профілюється

Клас BufferInfo призначений для взаємодії головного потоку програми та потоків, що відповідають за збір даних про роботу процесу. Також у ньому знаходяться буфери обміну куди допоміжні потоки записують інформацію про роботу процесу, що профілюється. Він забезчує:

- взаємодію між потоками;

- збереження історії про роботу процесу, що профілюється

- інші додаткові налаштування

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

Класи, що забезпечують користувацький інтерфейс базуються на основі класів .NET framework. Їх задача представити інформацію профілювання в зручному для користувача вигляді.
1.6 Функції Win API та функції користувача
Windows API (Application Programming Interfaces) — загальне найменування для цілого набору базових функцій інтерфейсів програмування застосунків операційних систем сімейств Windows корпорації Майкрософт. Є найпрямішим способом взаємодії застосунків з Windows. Для створення програм, що використовують Windows API, Майкрософт випускає SDK, який називається Platform SDK і містить документацію, набір бібліотек, утиліт і інших інструментальних засобів.

Одним з методів побудови профайлерів є використання вбудованих засобів операйної системи, що представляють набір функцій інтерфейсу прикладного рівня для профілювання роботи процесів операційної системи. В операційній системі Windows для цього існує набір функцій Debug API. В даній роботі вони призначені для збору статистичної інформації про роботу процесу, проте ними можна здійснювати не тільки статистичний збір інформації, але й змінювати її контекст. Тобто, наприклад, ними можливо замінити адреси модулів процесу при їх підключенні.

Дві функції, WaitForDebugEvent і ContinueDebugEvent, використовуються спеціально для обробки подій в процесі, що профілюють. Для того, щоб під’єднати процес до профайлера використовується функція DebugActiveProcess. Для того щоб від’єднати процес використовується функція DebugActiveProcessStop.

Для збору інформації про використання процесорного часу та пам’яті використовуються такі функції Win API:

- GlobalMemoryStatusEx, GetProcessMemoryInfo – ці функції повертають інформацію необхідну для обчислення використання пам’яті системою і процесом зокрема;

- GetSystemTimes, GetProcessTimes – функції, які повертають дані необхідні для обчислення використання ЦП;

Для надання привілегій процесу використовується функція EnablePrivileges, яка дозволяє йому робити профілювання ситемних процесів.

StartEx, AttchEx – функції відповідають за запуск обробки подій профілювання;

TakeInf – функція відповідає за знаття показників використання ЦП та пам’яті системою та процесом, що профілюється.
2. РОЗРОБКА КОМПОНЕНТ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ
Програма «Профайлер» це багатомодульна програма оформлена у вигляді CLR C++ проекту. При проектуванні було розділено на модулі (класи) логічні та графічні компоненти. Використано об’єктно-орієнтований та функціональний підхід побудови проекту. Проект складається з *.срр та *.h файлів, тому модуль може складатися з кількох файлів водночас.

Програмний проект побудований у вигляді багато-потокової програми. Спрощена структура проекту зображена на рис. 2.1. Головний потік відповідає за побудову графічного інтерфейсу і команди користувача. Допоміжний потік DebugEvents відслідковує події профілювання і відповідно обробляє їх. Інший допоміжний потік PerInf вимірює використання процесорного часу та пам’яті процесом та системою через певний інтервал. Обмін даними між допоміжними потоками та головним потоком відбувається через буфер (клас який містить список інформації про події профілювання, використання ЦП та пам’яті, команди керування допоміжними потоками).


Рисунок 2.1 – Спрощена структура програми
2.1 Опис алгоритму роботи програми
З рис. 2.1 програму можна поділити на три частини. Тобто слід конкретно описати роботу потоків програми і механізм взаємодії між ними.


Рисунок 2.2 – Алгоритм роботи потоку DebugEvents
На рис. 2.2 зображено алгоритм виконання потоку DebugEvents. Запуск потоку може відбуватися двома способами:

  1. Потік запускає новий процес і відразу підключає його.

  2. Потік підключає вже запущений процес.

Після того, як процес підключено починається головний цикл потоку, в якому і відбувається обробка подій профілювання. Функція WaitForDebugEvent чекає настання ооднієї з нижчеперечислених подій. Очікування буде тривати доти доки не настане подія, або не мине певний час(тайм-аут). При виникненні події всі потоки процесу, що профілюється зупиняються. Далі буде запущено відповідну функцію-обробник. Насамкінець функція ContinueDebugEvent продовжить виконання зупиненого процесу. При закінченні тайм-ауту відбувається перехід на початок головного циклу і перевірка чи немає команди завершення потоку. Це зроблено для того, щоб потік не очікував на подію вічно і міг коректно завершитись.В даному потоці забезпечується перехоплення таких подій:

- CREATE_PROCESS_DEBUG_EVENT виникає перед ініціалізацією процесу, який ми відслідковуємо, або при підключенні до нього. Дана подія забезпечує вивід інформації про процес та головний потік процесу;

- EXIT_PROCESS_DEBUG_EVENT виникає при завершенні процесу. Забезпечує інформацію про процес та код завершення процесу;

- CREATE_THREAD_DEBUG_EVENT виникає при створенні потоку в процесі. Дає інформацію про новий потік, а також інформацію про батьківський потік;

- EXIT_THREAD_DEBUG_EVENT виникає при завершенні потоку в процесі. Дає код завершення потоку;

- LOAD_DLL_DEBUG_EVENT виникає коли процес підключає модуль до свого адресного простору. Дає інформацію про розміщення модуля в адресному просторі процесу;

- UNLOAD_DLL_DEBUG_EVENT виникає, коли процес від’єднує модуль від свого адресного простору;

- EXCEPTION_DEBUG_EVENT виникає при виключній ситуації в процесі.

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


Рисунок 2.3 – Алгоритм роботи потоку PerfInf
На рис. 2.3 зображено алгоритм виконання потоку PerfInf відповідального за збір інформації про використання ЦП та пам’яті. Основою алгоритму є зчитування даних в циклі, що виконується доки є змінна керування рівна true. В головному циклі потік зчитує інформацію про використання системних ресурсів (памяті та процесорного часу). Далі обчислюється використання пам’яті та процесорного часу системою та процесом зокрема. Ці дані заносяться в буфер необхідний для того, щоб виводити інформацію у вигляді графіків. Після виконання обчислень потік зупиняється на певний інтервал і продовжує роботу для оновлених даних про процес.

Обчислення даних використання системних ресурсів відбувається за допомогою наступних функцій і формул.

GlobalMemoryStatusEx – повертає структуру MEMORYSTATUSEX з якої беремо необхідну інформацію для обчислення проценту використання пам’яті.



GetProcessMemoryInfo – ця функція повертає структуру PPROCESS_MEMORY_COUNTERS, що містить інформацію про використання пам’яті конкретним процесом. Процент використання обчислюється з наступною формулою.



GetSystemTimes – повертає значення типу LPFILETIME, які визначають час роботи системи в режимі ядра, в режимі користувача та час простою.
;

;

;


GetProcessTimes – повертає значення типу LPFILETIME, які визначають час роботи системи в режимі ядра та в режимі користувача конкретного процесу.

;


2.2 Розробка інтерфейсу користувача
Головне вікно профайлер складається з головного меню (№ 1) та чотирьох додаткових панелей.

Панель № 2 – відображення загальної інформації про процес.

Панель № 3 – відображення інформації про події профілювання.

Панель № 4 – відображення нрафіків використання процесорного часу.

Панель № 5 – відображення нрафіків використання пам’яті.



Рисунок 2.4 – Головне вікно профайлера
Голвне меню профайлера (рис. 2.5) складається з трьох пунктів. Можна профілювати існуючий процес, запустити новий чи вийти з програми.


Рисунок 2.5 – Головне меню профайлера


Рисунок 2.6 – Форма вибору процесу для профілювання

На рис. 2.6 зображена форма вибору процесу для профілювання зі списку запущених. Вибір процесу здійснюються подвійним кліком миші. Можна оновити список процесів відповідною кнопкою. Вибравши процес натискаємо кнопку ОК.


Рисунок 2.7 – Вікно запуску нового процесу
На рис. 2.7 зображено вікно запуску нового процесу. Для зпуску процесу не обхідно ввести ім’я виконавчого файлу та параметри запуску. Ім’я виконавчого файлу можна вибрати кнопкою огляд... Заповнивши необхідні поля тиснемо кнопку ОК.

Після вибору чи запуску процесу результати профілювання відображатимуться в головному вікні програми.


3. ТЕСТУВАННЯ
3.1 Інсрукції користувачу
Проект був розроблений в середовищі Microsoft Visual Studio з використанням бібліотек .NET

  1. Для використання даного профайлера у користувача на локальному комп’ютері повинна бути встановлена бібліотека .net framework 4.0.

  2. Також користувачу потрібно скопіювати файл kursec.exe на свій локальний комп’ютер.

  3. Профайлер використовує специфічні АРІ функції, тому він працюватиме на операційній системі Windows Xp SP1 і пізнішій.


3.2 Результати тестування
Нехай нам потрібно проаналізувати процес explorer. На рисунках 3.1, 3.2 показано послідовність старту профілювання, можна вибрати існуючий процес рис. 3.3, або запустити новий з потрібними параметрами рис. 3.2.


Рисунок 3.1 – Головне вікно програми



Рисунок 3.2 – Вікно вибору процесу
Після запуску події (рис. 3.4) профілювання відображаються в лівій частині клієнтської області програми. В правій верхній частині відображається поточна інформація про процес. В нижній правій частині відображається графік використання оперативної пам’яті системою (оранжевий графік) і процесом (голубий графік).


Рисунок 3.4 – Результати профілювання

  1   2   3   4   5   6

скачати

© Усі права захищені
написати до нас