Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛАБОРАТОРНА РОБОТА_new_ос

.pdf
Скачиваний:
13
Добавлен:
02.02.2015
Размер:
731.33 Кб
Скачать

ЛАБОРАТОРНА РОБОТА №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

_beginthreadex
HANDLE ht = (HANDLE)

Після одержання дескриптора, якщо він у даній функції більше не потрібний, його закривають за допомогою 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