Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABAS__OS_final_after2Kachko.DOC
Скачиваний:
19
Добавлен:
24.11.2019
Размер:
360.96 Кб
Скачать

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

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

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

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

BOOL WINAPI EnumProcesses(

DWORD* pProcessIds,

DWORD cb,

DWORD* pBytesReturned

);

де:

pProcessIds2 – масив ідентифікаторів процесу

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 файлів

7.4Зміст звіту

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

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

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

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

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

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

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

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

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

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

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

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

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

8 Керування потоками

8.1Мета роботи

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

8.2Методичні вказівки з організації самостійної роботи студентів

При підготовці до лабораторної роботи необхідно повторити матеріал відповідних лекцій та ознайомитися з [1, c. 148 – 160, 3, c. 130 - 155].

Необхідно вивчити функції створення потоків: CreateThread та _beginthreadex:

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES SecurityAttributes, // Атрибути безпеки

DWORD StackSize, // Розмір стека

LPTHREAD_START_ROUTIN StartFunction, //Потокова функція

LPVOID ThreadParameter, // Параметр потокової функції

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

LPDWORD ThreadId // Ідентифікатор потоку

);

uintptr_t _beginthreadex(

void *security, // Атрибути безпеки

unsigned stack_size, // Розмір стека

unsigned ( *start_address )( void * ), // Потокова функція

void *arglist, // Параметр потокової функції

unsigned initflag, // Прапорці створення потоку

unsigned *thrdaddr // Ідентифікатор потоку

);

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