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

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

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

- події (events) - для повідомлення про те, що відбулася якась подія - таймери з очікуванням (waitable timers) - міняють свій стан по прошествии деякого проміжку часу.

Функції очікування.

Синхронізація зводиться до того, що потік керування викликає функцію очікування, яка перевіряє, не чи виконалася деяка умова (яке - залежить від об'єкта синхронізації, виконання цієї умови назвемо зміною стану об'єкта). Якщо умова не виконалася, потік переходить у стан очікування, витрачаючи дуже мало ресурсів (процесорного часу і т.д.) доти , поки стан об'єкта все-таки не зміниться або поки не мине максимальний час очікування, якщо воно було задано.

Якщо умова виконалася, потік негайно виходить зі стану очікування (і з функції очікування) і продовжує своє виконання. Функція очікування в цьому випадку перед виходом може змінити стан об'єкта (наприклад, блокувати цей об'єкт).

Основною функцією очікування в Win32 є Waitforsingleobject(). DWORD Waitforsingleobject(HANDLE hhandle, DWORD timeout); Перший параметр -

дескриптор синхронизационного об'єкта, другий параметр показує, скільки можна чекати. Він може бути INFINITE - чекати скільки завгодно або інтервалом у миллисекундах. Данная функция возвращает такие значения:

WAIT_OBJECT_O - объект изменил свое состояние

WAIT_TIMEOUT - истекло время ожидания (если timeout не был равен INFINITE), а объект свое состояние так и не изменил.

if (WaitForSingleObject(h) == WAIT_TIMEOUT) printf ("ждали слишком долго - надоело\n");

else

printf ("таки дождались\n");

Що призводить до зміни стану об`екту та закінченню очікування, залежить від об`екту синхронізації.

Мьютекси й критичні секції.

41

Для створення мьютекса використовується функція Createmutex().

Синтаксис її такий: HANDLE Createmutex(LPSECURITY_ATTRIBUTES sec_attrs, BOOL init_locked, LPCTSTR mutex_name );

Функція повертає дескриптор створеного мьютекса, який далі може використовуватися для доступу до нього. Параметри функції такі:

sec_attrs - атрибути безпеки (NULL для атрибутів по умовчанню) init_locked - у якому стані буде мьютекс при створенні (TRUE -

заблокований поточним процесом, FALSE - вільний)

mutex_name - рядок з іменем мьютекса, якщо воно потрібно й NULL, якщо ми будемо звертатися до нього по дескриптору, який ця функція повертає.

От приклад створення мьютекса:

HANDLE mutex;

mutex = CreateMutex (NULL, FALSE, NULL);

щоб заблокувати мьютекс, необхідно викликати WaitForSingleObject(): WaitForSingleObject(mutex, INFINITE);

Якщо мьютекс вільний, він блокується (тобто Waitforsingleobject() змінює його стан) і потік іде далі. Якщо мьютекс зайнятий (заблокований іншим потоком), те поточний потік чекає, поки мьютекс не буде розблокований (або поки не мине час очікування, якщо другий параметр не рівний INFINITE). У першому випадку він блокує мьютекс, в другому - немає й Waitforsingleobject() повертає WAIT_TIMEOUT. Для того, щоб розблокувати мьютекс, необхідно викликати таку функцію: BOOL Releasemutex(HANDLE hmutex); наприклад, так: Releasemutex(mutex); Після цього, якщо інший потік чекав мьютекса, він одержує можливість його заблокувати й піти далі, тобто мьютекс міняє свій стан. Якщо кілька потоків чекали той самий мьютекс, немає гарантії того, у якому порядку вони будуть його блокувати.

Якщо дескриптор мьютекса більше не потрібний, то його потрібно закрити функцією Closehandle(): Closehandle(mutex);

От загальна послідовність роботи:

HANDLE mutex;

mutex = CreateMutex (NULL, FALSE, NULL);

42

WaitForSingleObject(mutex, INFINITE);

// мьютекс занят даним потоком

ReleaseMutex(mutex);

// мьютекс вільний

CloseHandle(mutex);

Для роботи із критичною секцією необхідно:

¾визначити змінну типу CRITICAL_SECTION CRITICAL_SECTION sect;

¾инициализировать її Initializecriticalsection(§);

¾увійти в неї Entercriticalsection(§); Якщо дана критична секція зайнята іншим потоком, то потік перейде у стан очікування доти , поки вона не буде звільнена;

¾звільнити її.

Семафор реалізується як об'єкт, який підтримує внутрішній лічильник, що змінюється від 0 до деякого максимального значення. Цей лічильник зменшується на 1 щораз , коли потік викликає Waitforsingleobject() для об'єктасемафора й збільшується щораз , коли потік звільняє семафор.

Коли лічильник досягає 0, спроби потоку виконати Waitforsingleobject() приводять до переходу в стан очікування до тих пор, поки який-небудь потік не звільнить семафор, збільшивши тим самим його лічильник (або поки не мине максимальний час очікування). У першому випадку потік після очікування зменшує лічильник, у другому - немає й Waitforsingleobject() повертає

WAIT_TIMEOUT.

Для створення семафора використовується функція Createsemaphore(): HANDLE Createsemaphore(LPSECURITY_ATTRIBUTES sec_attrs, LONG init_count, LONG max_count, LPCTSTR sem_name); Функція повертає дескриптор створеного семафора, який далі може використовуватися для доступу до нього. Параметри функції такі:

sec_attrs - атрибути безпеки або NULL для атрибутів за замовчуванням init_count - початкове значення лічильника семафора (від якого він буде

потім зменшуватися до 0 у міру заняття семафора різними потоками). Може бути 0, у цьому випадку після створення семафор буде недоступний.

43

max_count - максимальне значення лічильника семафора, повинне бути > 0 sem_name - рядок з іменем семафора або NULL.

Звичайно init_count і max_count задаються рівними, але можливо задавати init_count в 0, а потім після підготовчих дій відкривати семафор, збільшивши його.

От приклад створення семафора:

HANDLE sem;

sem = CreateSemaphore(NULL, 10, 10, NULL);

У цьому випадку максимальне число користувачів семафора рівно 10. Звичайно це значить, що до семафора можуть мати доступ не більш 10 потоків керування в цей момент часу. Може бути й інакше - один і той же потік керування може викликати для одного семафора Waitforsingleobject() і кілька раз.

От так можна спробувати одержати доступ до семафора (і зменшити його лічильник): Waitforsingleobject(sem, INFINITE); Якщо лічильник у цей момент 0,

потік перейде в режим очікування, поки хтось не збільшить семафор або поки не мине максимальний час очікування. Таким чином, семафор міняє свій стан, коли його лічильник збільшується від 0.

Для збільшення лічильника семафора ("звільнення семафора")

використовується функція Releasesemaphore(): BOOL Releasesemaphore(HANDLE hsem, LONG rel_count, LPLONG prev_count); hsem - дескриптор семафора rel_count - величина, на яку збільшується лічильник семафора (звичайно одиниця, але не завжди) prev_count - покажчик на змінну, у яку запишеться попереднє значення лічильника або NULL, якщо воно не потрібно. Releasesemaphore (sem, 1, NULL);

Якщо при створенні семафора init_count був 0, то звичайно після ініціалізації (коли доступу немає взагалі на загал) семафор відкривається повністю шляхом збільшення його лічильника відразу до максимуму: Releasesemaphore (sem, max_count, NULL);

Якщо дескриптор семафора більше не потрібний, то його потрібно закрити функцією Closehandle(): CloseHandle(sem);

44

Вот последовність дій:

HANDLE sem;

sem = CreateSemaphore(NULL, 10, 10, NULL); // одночасноо для 10 користувачей

WaitForSingleObject(sem, INFINITE); // семафор занят даним потоком

ReleaseSemaphore (sem, 1, NULL);

// поток звільнив семафор - увеличив лічильник на 1 CloseHandle(sem);

Компіляція многопоточных програм у середовищі Windows NT.

Для того, щоб коректно скомпілювати многопоточную програму в Windows NT, необхідно в середовищі Visual C++:

вибрати пункт меню Project/Settings... (Alt-f7)

увікні Project Settings вибрати закладку C/C++

усписку Category вибрати Code Generation

усписку Use run-time library вибрати Debug Multithreaded (для отладочной версії)

або Multithreaded (для остаточної версії) закрити вікно, вибравши OK.

5 Хід виконання роботи:

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

При виконанні програми для кожного з перерахованих у командному рядку файлів створюється свій процес або потік виконання (завдання), який паралельно з іншими процесами (потоками) робить роботу з підрахунку пробілів в "своєму" файлі.

Результатом роботи програми буде список файлів з підрахованою кількісттю пробелів. Завдання не вимагає для свого розв'язку віконного інтерфейсу, у тексті можуть бути використані тільки ті виклики API, які не торкаються графічного інтерфейсу.

45

Питання до захисту Синтаксис написання семафорів

Відповідь________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

___________________________________

Створення нових потоків та механиз їх планування

Відповідь________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

___________________________________

Синтаксис написання блокировки

Відповідь________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

___________________________________

Висновок

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

______________________________________________________________________

46

ЛАБОРАТОРНА РОБОТА №10 ОПЕРАЦІЙНА СИСТЕМА WINDOWS: ЗАХИСТ ІНФОРМАЙІЇ.

1Тема роботи: Огляд можливостей захисту інформації.

2Мета роботи: Придбання навичок роботи з можливостями ОС Win по захисту інформації.

3Опис робочого місця: На кожному робочому місці повинен бути комп`ютер з операційною системою Windows.

4Теоретичний матеріал:

Захист інформації -сукупність методів і засобів, що забезпечують цілісність,

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

До основних задач забезпечення інформаційної безпеки належать:

виявлення, оцінка та прогнозування джерел загроз інформаційній безпеці;

розробка державної політики забезпечення інформаційної безпеки та комплексу заходів і механізмів її реалізації;

створення нормативно-правових засад забезпечення інформаційної безпеки, координація діяльності органів державної влади та управління, установ та підприємств по реалізації політики інформаційної безпеки;

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

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

До інформаційних засобів належать:

порушення адреси і своєчасності інформаційного обміну, протизаконні збір і використання інформації;

несанкціонований доступ до інформаційних ресурсів;

47

маніпулювання інформацією (дезінформація, укриття та викривлення інформації);

незаконне копіювання інформації в інформаційних системах;

використання засобів масової інформації з позицій, які суперечать інтересам громадян, організацій чи держави;

викрадення інформації з бібліотек, архівів, банків і баз даних;

порушення технології обробки інформації.

До програмно-математичних засобів належать:

запуск програм-вірусів;

установка програмних і апаратних закладних пристроїв;

знищення і модифікація даних в інформаційних системах.

Фізичні засоби включають: знищення або руйнування засобів обробки інформації і зв’язку; знищення, руйнування чи викрадення оригінальних носіїв інформації; викрадення програмних чи апаратних ключів і засобів криптографічного захисту інформації; вплив на персонал; поставка “ інфікованих” компонентів інформаційних систем.

Для запобігання та ліквідації загроз інформаційній безпеці використовують правові, програмно-технічні і організаційно-економічні методи.

Правові методи - передбачають розробку комплексу нормативно-правових актів і положень, регламентуючих інформаційні відносини в суспільстві, керівних і нормативно-методичних документів щодо забезпечення інформаційної безпеки.

Програмно-технічні методи — це сукупність засобів, для запобігання витоку інформації, виключення можливості несанкціонованого доступу до інформації, запобігання впливам, які призводять до знищення, руйнування, спотворення інформації, або збоям чи відмовам у функціонуванні засобів інформатизації, виявлення закладних пристроїв, виключення перехоплення інформації технічними засобами, використання криптографічних засобів захисту інформації при передачі по каналах зв’язку.

Організаційно-економічні методи перед6ачають формування і забезпечення функціонування систем захисту секретної і конфіденційної інформації,

48

сертифікацію цих систем згідно вимогам інформаційної безпеки, ліцензування діяльності в сфері інформаційної безпеки, стандартизацію способів і засобів захисту інформації, контроль за діями персоналу в захищених інформаційних системах

Конфіденційність — захист від несанкціонованого ознайомлення з інформацією.

Цілісність — захист інформації від несанкціонованої модифікації. Доступність — захист (забезпечення) доступу до інформації, а також

можливості її використання. Доступність забезпечується як підтриманням систем в робочому стані так і завдяки способам, які дозволяють швидко відновити втрачену чи пошкоджену інформацію.

5Хід виконання роботи:

5.1Створити на диску С каталог lab_10;

5.2Створити в каталозі lab_2 три файла: task_1.doc , task_2.txt , task_3.xls;

5.3За допомогою Властивостей файлу визначити чи архівний файл;

5.4За допомогою Властивостей файлу встановити Скрити для файлу

task_2.txt;

5.5Відчинити файл task_1.doc;

5.6За допомогою панелі Сервіс встановити захист для файла;

Рисунок 10.1 – Захист файлу

49

5.7Встановити пароль на додавання інформації;

5.8Заборонити використання Стилів;

5.9Для файла task_3.xls встановити пароль;

Рисунок10.2 – Захист файлу .exl

5.10Встановити захист на додавання інформації до ланки;

5.11Встановити захист при збереження файлів.

50