
ЛАБОРАТОРНА РОБОТА_new_ос
.pdfЛАБОРАТОРНА РОБОТА №7 ОПЕРАЦІЙНА СИСТЕМА WINDOWS: ДЕЛЕГУВАННЯ ПРАВ.
1Тема роботи: Огляд можливостей делегування прав.
2Мета роботи: Придбання навичок роботи з делегуванням прав.
3Опис робочого місця: На кожному робочому місці повинен бути комп`ютер з операційною системою Windows.
4Теоретичний матеріал:
Делегування прав – можливість наділяти правами та забирати їх у
користувачів адмінистратором з метою підвишення рівня безпеки зберігаемої інформації.
Адмінистратор- роль, яку виконує людина, з повними правами до інформацїї та з правом створбвати нові группи користувачів.
Группа користувачів- логічна єдністі користівачів по виделеним їм правам, наприклад. Якщо користувачі мають можливість тільки читати документи, то існує можливість створення спеціальної группи з наданням їй права на читання, але забороною інших дій з документом.
Для призначення прав необхідно використовувати оснастку Користувачі та Комп`ютери (Active Directory). Після чого необхідно указати пыдрозділ, керування яким буде передане та натиснути праву кнопку миші. У вікні обрати команду Delegate control. Відобразиться Майстер делегування прав. Натиснути Далі. В наступному вікні натиснути кнопку Додати та обрати группу, якій будуть дані права. Далі натиснить Ок і кнопку Далі. У вікні керування Делегувати ці звичайні задачі потрібно обрати одну чи декілько операцій на які користувачу будуть надані права, натиснить Далі. Обирить вкладку Готово.
5 Хід виконання роботи:
5.1Створити три файли;
5.2Призначити на файл 1 права доступа только администратору;
5.3Створити групу користувачів розміром три;
31
5.4На 2 файл призначити права на модіфакацію групі користувачів;
5.5На файл 3 призначити повний доступ для всіх користувачів;
32
Питання до захисту Скільки групп користувачів можна створити
Відповідь________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
___________________________________
Які права можна придилити користувачю
Відповідь________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
___________________________________
Які права у адмінистратора
Відповідь________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
___________________________________
Висновок
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
33
ЛАБОРАТОРНА РОБОТА №8 ОПЕРАЦІЙНА СИСТЕМА WINDOWS:
ВИВЧЕННЯ МОЖЛИВОСТЕЙ ФАЙЛОВОЇ СИСТЕМИ
1Тема роботи: Огляд можливостей файлової системи.
2Мета роботи: Придбання навичок роботи файловою системой.
3Опис робочого місця: На кожному робочому місці повинен бути комп`ютер з операційною системою Windows XP.
4Теоретичний матеріал:
Файл - це об'єкт операційної системи. Це значить, що ОС створює для
кожного файлу таблицю, куди затягає інформацію про файл, що включає в себе ім'я файлу, його місце розташування на диску положення, що тече, покажчика, режими відкриття і т.д.
Для створення запису про файл використовується функція Createfile:
HANDLE CreateFile(
LPCTSTR lpFileName, // Им`я файла (с нулевым завершителем)
DWORD dwDesiredAccess, // Режим доступа до файлу (read-write)
DWORD dwShareMode, // можливість share
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // атрибути безопасности
DWORD dwCreationDistribution, |
// Режими створення |
DWORD dwFlagsAndAttributes, |
// Атрибути файла |
HANDLE hTemplateFile // Дескриптор файла з атрибутами копіювания
);
Функція ReadFile читае дані з файлу
BOOL ReadFile( |
|
|
HANDLE hFile, |
// Дескриптор файлу |
|
LPVOID lpBuffer, |
// адреса буферу |
|
DWORD nNumberOfBytesToRead, |
// колькість читаемих байтів |
|
LPDWORD lpNumberOfBytesRead, |
// адреса колькості прочитаних байтів |
LPOVERLAPPED lpOverlapped // адреса сруктури для даних
);
34
Якщо повертаеться True, а кількість прочитаних байтів 0, то прочитан кінець файлу.
5Хід виконання роботи:
Створити функцію записи в файл масиву типу int починаючи з середини
файлу, записи файлу переміщуються до закінчення файлу, розташовуючись після масиву. Параметрами функції є дескриптор файла, покажчик на масив і кількість елементів у масиві.
5.1Створити файл lab_8.txt;
5.2Створити масив типу int;
5.3Внести записи до створенного файлу lab_8.txt;
5.4Визначити розмір lab_8.txt за дискриптором;
5.5Перемістити покажчик позиції на середину файлу lab_8.txt;
5.6Записати до файлу lab_8.txt масив;
5.7Закрити файл lab_8.txt.
35
Питання до захисту Яка функція відповідае за копіювання файлу?
Відповідь________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
___________________________________
Що таке дискриптор файлу?
Відповідь________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
___________________________________
Яка функція відповідае за створення катологів?
Відповідь________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
___________________________________
Висновок
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
36
ЛАБОРАТОРНА РОБОТА №9 РОЗРОБКА МНОГОПОТОЧНОГО ДОДАТОКУ
ДЛЯ WINDOWS NT
З ВИКОРИСТАННЯМ ЗАСОБІВ СИНХРОНІЗАЦІЇ ПОТОКІВ (СЕМАФОРІВ І МЬЮТЕКСІВ)
1Тема роботи: Огляд можливостей семафорів та мьютексів для синхронізації потоків..
2Мета роботи: Придбання навичок роботи з можливостями синхронізації.
3Опис робочого місця: На кожному робочому місці повинен бути комп`ютер з операційною системою Windows та С++.
4Теоретичний матеріал:
Потік керування (thread) - це незалежна сутність, що виконується, усередині процесу, "процес усередині процесу". У програмі може бути безліч потоків керування, вони можуть виконуватися паралельно незалежно один від іншого або з синхронізацією. Синхронізація зводиться до того, що один потік керування чекає, поки інший потік не змінить стан деякого об'єкта й тільки після цього продовжує роботу. Для синхронізації використовуються різні засоби, такі як взаємовиключні блокування (мьютексы, mutexes) або семафори (semaphores).
Виконання потоків усередині програми багато в чому аналогічно виконанню процесів у многозадачной середовищу. Керування даного потоку в будь-який момент може бути перерване й передане наступному потоку, а потім рано або пізно повернеться назад на наступну за перерваної машинну інструкцію.
Потік, що перебуває в стані очікування, передає керування далі негайно доти , поки його очікування не припиниться. Потік можна призупинити на якийсь час, при цьому він також буде негайно передавати керування далі (а сам нічого не робити) доти , поки не пройде цей час.
Основи роботи з потоками керування в ОС Windows NT.
Потоки керування в NT реалізовані на рівні ядра ОС і є основою виконання програмного коду.
Створення потоків керування.
37
Системний виклик API Win32 для створення потоку керування - Createthread(), а для його завершення - Endthread(). На практиці, однак, пари Createthread()/Endthread() має сенс використовувати тільки в тих випадках, коли зсередини потоку керування (з функції потоку) не викликаються ніякі функції стандартної бібліотеки мови C (такі, як printf() або strcmp()). Справа в тому, що функції стандартної бібліотеки не цілком пристосовані до використання в многопоточной середовищу (тобто до того, що в будь-який момент їхнє виконання може перерватися, а потім повернутися на наступну інструкцію) і для того, щоб не було проблем, необхідно при створенні і завершенні потоку робити деякі додаткові дії.
Ці дії враховані в спеціальних бібліотечних функціях роботи з потоками керування, описаних у заголовному файлі process.h. Це функції _beginthreadex() для створення процесу й _endthreadex() для закінчення процесу. Їх рекомендує використовувати Microsoft, їх ми й будемо використовувати в даній лабораторній роботі.
Розглянемо синтаксис _beginthreadex(). Той же набір параметрів (одмінний тільки типами) передається й у функцію Createthread().
#include<process.h>
unsigned long _beginthreadex( void *security,
unsigned stack_size,
unsigned __stdcall (*thread_fun)(void *), void *argument,
unsigned init_state, unsigned *tid
);
Функція повертає дескриптор створеного потоку, який бажане приводити до типу HANDLE
HANDLE ht; ht = (HANDLE)_beginthreadex( ... );
38
Після одержання дескриптора, якщо він у даній функції більше не потрібний, його закривають за допомогою Closehandle(): Closehandle (ht); Розглянемо параметри даної функції.
security - атрибути безпеки даного потоку керування. Може бути NULL, що означає атрибути безпеки за замовчуванням.
stack_size - розмір стека для потоку, звичайно задається 0 - у цьому випадку розмір береться той же, що й у потоку, який викликає _beginthreadex().
ht = (HANDLE) _beginthreadex (NULL, 0, ...);
thread_fun - покажчик на т.зв. функцію потоку. Це – певна програмістом функція, яка до деякої міри аналогічна main() для процесу. Першим оператором, виконуваним у потоці після його створення, є перший оператор функції, заданої через thread_fun, а завершує виконання потік при виході із цієї функції.
Функція ухвалює параметр типу void *, використовуваний для передачі додаткових даних, повинна повертати код повернення типу unsigned int і мати спеціальний описатель _stdcall (або WINAPI), тобто описується вона як unsigned _stdcall fun (void *param); argument - додаткові дані для передачі у функцію потоку (доступ до них у цій функції - через параметр типу void *). Перед передачею їх потрібно приводити до void *, а у функції - з void * у потрібний тип. Приклад:
unsigned _stdcall thread_fun (void *num) { printf ("поток начал выполнение\n"); // ...
printf ("поток закончил выполнение\n");
}
int number;
HANDLE ht = (HANDLE) _beginthreadex (NULL, 0, thread_fun, ...);
CloseHandle (ht);
init_state - початковий стан потоку при створенні - 0 для потоку, який почне виконуватися відразу ж, CREATE_SUSPEND для припиненого. Нам потрібно, щоб потік почав виконуватися відразу:
(NULL, 0, thread_fun,
(void *)++number, 0, ...);
39
tid - указує на змінну типу unsigned int, у яку запишеться код потоку керування (thread ID) після виклику: Функцію потоку можна завершити двома способами: виконати в ній оператор return кодповернення або викликати
функцію HANDLE ht = (HANDLE)
_beginthreadex (NULL, 0, thread_fun, (void *)++number, 0, &tid);
Функцию потока можна завершити двума способами: виконав у неї оператор return код-возврата
unsigned _stdcall thread_fun (void *num) {
// ...
return 0;
}
або викликати функцию Вот приклад:
unsigned _stdcall thread_fun (void *num) { printf ("поток почав виконання \n");
// ...
printf ("поток закончив виконання\n");
}
HANDLE ht = (HANDLE) _beginthreadex (NULL, 0, thread_fun, ...);
CloseHandle (ht);
void _endthreadex(unsigned retval)
c параметром, равным коду возврата: unsigned _stdcall thread_fun (void *num) {
// ...
_endthreadex(0);
}
Засоби синхронізації потоків керування.
Для синхронізації потоків керування використовуються різні засоби. Для нашої роботи нам знадобляться два з них: семафори (semaphores) і мьютексы (взаємовиключні блокування, mutexes). Крім цього, існують ще такі об'єкти синхронізації:
- критичні секції (critical sections) - аналогічні мьютексам,
40