Мета роботи

КЕРУВАННЯ ПРОЦЕСАМИ

Мета роботи

Вивчити основні алгоритми планування, реалізувати програмно ці алгоритми і порівняти їх, використовуючи різні показники.

 

7.2 Підготовка до роботи і порядок її виконання

1 Вивчить основні алгоритми планування (матеріал відповідної лекції);

2 Реалізуйте основні функції для роботи із чергою процесів;

3 Реалізуйте алгоритм FCFS. Визначте основні критерії для цього алгоритму;

4 Реалізуйте алгоритм RR. Визначте основні критерії для цього алгоритму;

5 Реалізуйте алгоритм SJF. Визначте основні критерії для цього алгоритму;

6 Для однієї й тієї ж послідовності процесів визначте всі критерії. Порівняйте 3 розглянуті алгоритми й зробіть висновки по ефективності їх використання.

 

7.3 Зміст звіту

Звіт має містити:

1. Програмні реалізації для трьох алгоритмів;

2. Вхідні дані й очікувані результати для кожного з алгоритмів;

3. Результати виконання кожного алгоритму (значення всіх показників);

4. Висновки по роботі.

7.4 Контрольні запитання і завдання

1. Для чого використовуються алгоритми планування?

2. Для чого використовуються алгоритми диспетчеризації?

3. В який алгоритм переходить алгоритм RR, якщо квант часу збільшити до нескінченності?

4. Що таке статичний пріоритет?

5. Що таке динамічний пріоритет?

 

Навчитися запускати програми і командні файли із програми.

 

8.2 Підготовка до роботи і порядок її виконання

Вивчить функцію CreateProcess і її використання для запуску програм. Складіть макрос для спрощення використання цієї функції.

BOOL WINAPI CreateProcess(

LPCTSTR lpApplicationName, // Ім'я додатка

LPTSTR lpCommandLine,// Командний рядок

LPSECURITY_ATTRIBUTES lpProcessAttributes, // Атрибути

LPSECURITY_ATTRIBUTES lpThreadAttributes, // безпеки

BOOL bInheritHandles, // Спадкування дескрипторів

DWORD dwCreationFlags, // Прапорці створення

LPVOID lpEnvironment, // Середа

LPCTSTR lpCurrentDirectory,// поточний каталог

LPSTARTUPINFO lpStartupInfo, // Структура з вхідними даними

LPPROCESS_INFORMATION lpProcessInformation

// Структура з дескрипторами створеного процесу та потоку

);

Необхідні структури:

typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX, dwY, dwXSize, dwYSize;
DWORD dwXCountChars, dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput, hStdOutput;
HANDLE hStdError;

} STARTUPINFO, *LPSTARTUPINFO;

 

typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;

} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;

 

8.3 Порядок виконання лабораторної роботи

1. Скласти макроси для спрощення використання функції CreateProcess для случав негайного й відкладеного запуску програми.

2. Скласти 3 програми. Перша програма має запустити текстовий редактор і створити текстові файли в заданій папці. Друга програма для всіх створених першою програмою файлів визначає їх розмір, кількість рядків і довжину кожного рядка. Третя програма запускає по черзі спочатку першу, а потім другу програму. Для другої програми має бути встановлений нижчий пріоритет ніж у інших програм.

3. Використовуючи функцію EnumProcesses, визначити кількість процесів, що виконуються, і ідентифікатори всіх процесів, що виконуються

BOOL WINAPI EnumProcesses(

DWORD* pProcessIds,

DWORD cb,

DWORD* pBytesReturned

);

де:

pProcessIds[2] – масив ідентифікаторів процесу

cb - розмір масиву( в байтах);

pBytesReturned - кількість байтів у масиві-результаті;

4. Після визначення ідентифікатори процесів, використовуючи функцію OpenProcess, визначити дескриптори процесів, що виконуються;

 

HANDLE WINAPI OpenProcess(

DWORD dwDesiredAccess,

//PROCESS_QUERY_INFORMATION | PROCESS_VM_READ

BOOL bInheritHandle, // FALSE

DWORD dwProcessId // Ідентифікатор процесу

);

5. Для кожного дескриптора процесу визначити ім'я основного модуля, що відповідає дескриптору, використовуючи функцію:

 

DWORD WINAPI GetModuleBaseName(

HANDLE hProcess, // Дескриптор процесу

HMODULE hModule, //дескриптор модуля; якщо дорівнює 0, то ім'я .exe файлу

LPTSTR lpBaseName, // ім'я модуля

DWORD nSize // розмір буфера для імені модуля

);

6. Надрукувати таблицю ідентифікаторів процесів, дескрипторів і імен .exe файлів

 

8.4 Зміст звіту

Звіт має містити:

1. Опис всіх використаних функцій WINAPI;

2. Складені макроси;

3. Тексти всіх складених програм;

4. Висновки по роботі з переліком вмінь, які отримані в результаті виконання лабораторної роботи.

 

8.5 Контрольні запитання і завдання

1. Як необхідно підготувати структуру STARTUPІNFO перед створенням процесу?

2. Чим відрізняється запуск програм, що виконуються від запуску командного файлу?

3. Як довідатися встановлені зовнішні пристрої?

4. Як довідатися, які з файлів знову створені або модифікувалися?

5. Як можна довідатися, які процеси виконуються?

6. Як довідатися по ідентифікаторі процесу його дескриптор?

7. Як довідатися ім'я програми, що виконується по дескрипторові процесу?

9 КЕРУВАННЯ ПОТОКАМИ