Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольна робота№1.doc
Скачиваний:
1
Добавлен:
18.12.2018
Размер:
441.86 Кб
Скачать

Лабораторне завдання

  1. Ознайомитись із змістом матеріалу роботи і відповідними тематичними розділами в літературі, що рекомендується. Отримати виконуваний EXE файл програми Demon.asm (Додаток A) і виконати дії з операторами перенаправлення вводу-виводу, а саме:

  • Demon1.exe > File1.txt

  • Demon1.exe < File2.txt

Файл File2.txt, що включає рядок символів, заздалегідь створити за допомогою будь-якого редактора.

  1. Введення з клавіатури на екран довільний тексту з одночасним записом в буфер. Реалізувати елементи редагування: стирання останніх символів клавішею" ", контроль над великою буквою першого слова нового речення. При помилці мала буква замінюється прописною. Перехід на новий рядок здійснюється кл <Enter>. Управління: <F1>- виведення відредагованого тексту з буфера, <F10>- вихід з програми.

  2. Демонстрація основної програми з можливим використанням операторів пере направлення

Текст програми

7.1) Що таке тупиковий стан? Перерахуєте умови, при яких виникає тупик.

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

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

8.3) Що робить системний виклик fork()? Яким чином здійснюється в UNIX запуск нової задачі?

У Unix-системах, fork () - системний виклик, що створює новий процес (нащадок), який є майже точною копією процесу-батька, що виконує цей виклик. Між процесом-нащадком і процесом-батьком існують відмінності:

  • PID процесу-нащадка відмінний від PID процесу-батька;

  •  значенням PPID процесу-нащадка присвоюється значення PID процесу-батька;

  •  Процес-нащадок отримує власну таблицю файлових дескрипторів, що є копією таблиці процесу-батька на момент виклику fork (). Це означає, що відкриті файли успадковуються, але якщо процес-нащадок, наприклад, закриє якийсь файл, то це не вплине на таблицю дескрипторів процесу-батька.

  • для процесу-нащадка очищаються вcе очікують доставки сигнали;

  • тимчасова статистика виконання процесу-нащадка в таблицях ОС обнуляється;

  • блокування пам'яті і запису, встановлені в процесі-батьку, не успадковуються.

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

Після fork () процес-нащадок найчастіше виконує системний виклик exec (), що завантажує в простір процесу нову програму (саме так, і тільки так, в Unix-системі виконується запуск програми в окремому процесі). Так, перший (нульовий) процес Unix (ядро системи) створює свою копію, щоб запустити init (процес з PID = 1), який в свою чергу створює дочірні процеси для запуску ініціалізації системи та терміналів.

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

Виклик fork () виконується досить довго, тому що вимагає копіювання великої кількості даних. Для того щоб це обійти, деякі мережеві сервери (наприклад, веб-сервери Apache і Lighttpd), створюють дочірні процеси заздалегідь, щоб зменшити час відгуку сервера. Також існують «полегшені» реалізації fork (), що відображають в новий процес сторінки пам'яті батьківського, замість того щоб їх копіювати (нова сторінка створюється тільки при зміні її вмісту одним з процесів), що істотно знижує час створення нового процесу (т. зв. Copy -on-write).