
- •1Розробка універсальних додатків для різних типів кодувань символьної інформації
- •1.1Мета роботи
- •1.2Підготовка до роботи. Теоретичні положення
- •1.2.1Типи даних char і wchar_t. Універсальне завдання типу
- •1.2.2Функції для роботи з рядками для ansi і unicode кодувань
- •1.2.3Файл tchar.H. Пошук імен для універсальних функцій
- •1.2.4Визначення типу тексту і перетворення типу кодування тексту
- •1.3Завдання до лабораторної роботи. Порядок виконання
- •2.2.2Загальна характеристика динамічних бібліотек
- •2.2.3Створення статичних бібліотек
- •2.2.4Створення dll
- •2.2.5Використання dll
- •2.2.6Алгоритм шифрування rsa
- •2.3Порядок виконання лабораторної роботи
- •3.3Порядок виконання лабораторної роботи. Завдання до лабораторної роботи
- •3.5Контрольні запитання і завдання
- •4Керування зовнішніми пристроями. Нестандартні пристрої
- •4.1Мета роботи
- •4.2Підготовка до роботи
- •4.3 Завдання до лабораторної роботи
- •4.4Контрольні питання и завдання
- •5.2.2Інформація про файлову систему пристрою
- •5.2.3Визначення вільного місця на пристрої
- •5.3Порядок виконання лабораторної роботи
- •5.4Контрольні запитання і завдання
- •6.2.1.2Функція GlobalMemoryStatusEx
- •6.2.1.3Функція VirtualQueryEx
- •6.2.2Функції для керування віртуальною та фізичною пам’яттю
- •6.2.2.1Функція VirtualAllocEx
- •6.2.2.2Функція VirtualFree
- •6.2.2.3Функція VirtualProtectEx
- •6.2.3.3Функція MapViewOfFile
- •6.2.3.4Функція UnmapViewOfFile
- •6.2.3.5Функція CloseHandle
- •6.3Завдання до лабораторної роботи
- •6.5Контрольні питання й завдання
- •7Планування процесів
- •7.1Мета роботи
- •7.2 Підготовка до роботи і порядок її виконання
- •8.3Порядок виконання лабораторної роботи
- •8.5Контрольні запитання і завдання
- •9 Керування потоками
- •9.1Мета роботи
- •9.2Підготовка до роботи і порядок її виконання
- •9.4Контрольні питання й завдання
- •10 Синхронізація процесів і потоків
- •10.1Мета роботи
- •10.2Підготовка до роботи і порядок її виконання
- •10.4 Контрольні питання й завдання
- •Список використаних джерел
- •Додаток а Стандартні функції для введення – виведення даних для стандартних пристроїв. Функції для роботи з файлами.
8.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 файлів
8.4Зміст звіту
Звіт має містити:
Опис всіх використаних функцій WINAPI;
Складені макроси;
Тексти всіх складених програм;
Висновки по роботі з переліком вмінь, які отримані в результаті виконання лабораторної роботи.
8.5Контрольні запитання і завдання
Як необхідно підготувати структуру STARTUPІNFO перед створенням процесу?
Чим відрізняється запуск програм, що виконуються від запуску командного файлу?
Як довідатися встановлені зовнішні пристрої?
Як довідатися, які з файлів знову створені або модифікувалися?
Як можна довідатися, які процеси виконуються?
Як довідатися по ідентифікаторі процесу його дескриптор?
Як довідатися ім'я програми, що виконується по дескрипторові процесу?
9 Керування потоками
9.1Мета роботи
Вивчити методи керування потоками, які використовують загальні ресурси.
9.2Підготовка до роботи і порядок її виконання
Необхідно вивчити функції створення потоків: 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 // Ідентифікатор потоку
);
1 Скласти універсальний макрос для створення потоків;
2 Скласти програму, у якій 2 потоки пишуть у чергу рядки і 2 потоки читають із черги рядки, що були туди записані раніше. Після читання рядки мають бути видалені із черги. Розмір черги - не більше N елементів. Використовується загальна черга для всіх 4- х потоків.
3 Для програми, складеної в попередньому пункті, забезпечити можливість однократного запуску цієї програми.
4 Скласти програму для філософів, що обідають, якщо число філософів N, кількість циклів, що має виконати кожен із філософів M. Для потоків використовується одна програма (на чотири) і потоки з різних програм (на п'ять).
9.3Зміст звіту
У звіт мають бути включені всі складені програми й обґрунтування використаних засобів синхронізації.