
- •Завдання
- •Теоретичні відомості
- •Завдання 1
- •Лістинг програми
- •Результат роботи програми
- •Завдання 2
- •Лістинг програми
- •Результат роботи програми
- •Завдання 3
- •Лістинги програм
- •Результати виконання програм
- •Завдання 4
- •Лістинги програм
- •Результати виконання програм
- •Завдання 5
- •Лістинги програм
- •Результати виконання програм
- •Завдання 6
- •Результат виконання завдання
- •Висновок
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Кафедра програмного забезпечення автоматизованих систем
РОЗРАХУНКОВО-ГРАФІЧНА РОБОТА
з дисципліни
“Операційні системи”
Керівник роботи: Виконав:
__________________________ студент 3-го курсу
(підпис) гр. ПЗ-104
Гузнін С.С. ____________________
(підпис)
Пістряк Р.Ю.
Черкаси 2013
ЗМІСТ
ЗАВДАННЯ 4
ТЕОРЕТИЧНІ ВІДОМОСТІ 6
ЗАВДАННЯ 1 12
Лістинг програми 12
Результат роботи програми 13
ЗАВДАННЯ 2 14
Лістинг програми 14
Результат роботи програми 15
ЗАВДАННЯ 3 16
Лістинги програм 16
Результати виконання програм 19
19
ЗАВДАННЯ 4 20
Лістинги програм 20
Результати виконання програм 24
ЗАВДАННЯ 5 25
Лістинги програм 25
Результати виконання програм 30
ЗАВДАННЯ 6 31
Результат виконання завдання 31
ВИСНОВОК 32
Завдання
Сценарії на мові Shell. Реалізувати меню з двох пунктів: 1-ий пункт - визначити кількість запущених даними користувачем процесів (передбачити введення імені користувача); 2-ий пункт - завершити всі процеси даного користувача.
Unix процеси. Реалізувати меню з двох пунктів: 1-ий пункт - визначити кількість запущених даними користувачем процесів (передбачити введення імені користувача); 2-ий пункт - завершити всі процеси даного користувача.
Організація взаємодії процесів за допомогою каналів.
а. Знайти індекси i та j, для яких існує найбільша послідовність a[i] - a [i +1] + a [i +2] - a [i +3] ... + / - a [j]. Вхідні дані: ціле позитивне число n, масив чисел А розмірності n.
б. Перший додаток чекає введення чисел a, b, c і відсилає їх другий додатком, яке знаходить рішення рівняння ax2+bx+c= 0, і відсилає результат першому додатку.
Розподілена пам’ять.
а. Визначити чи є матриця А симетричної щодо головної діагоналі. Вхідні дані: ціле додатнє число n, масив чисел А розмірності nxn. Використати не менше 4 процесів для вирішення завдання.
б. Дано послідовність натуральних чисел a0 ... an-1. Створити багатопоточний додаток для пошуку всіх ai, які є простими числами.
Семафори. Задано рядок S, і безліч пар символів (ai, bi) i = 1, 2 ... n, отримати новий рядок, замінивши в рядку S кожне входження ai символу на bi. Вхідні дані: рядок S довільної довжини, ціле додатнє число n, безліч пар символів (ai, bi) i = 1, 2 ... n. Для вирішення завдання використати чотири процеси (потоки), розділивши між ними рядок S.
Планування процесів. Згідно з часом необхідним для виконання процесів поставлених в чергу і готових до виконання(р0-р5) побудувати діаграму виконання процесів, а також вичеслити середній час очікування процесора для процесів, середній повний час виконання, при використанні методів планування FCFS, RR, і невитісняющим SJF для системи з витісняючим SJF додатково показати, що процеси p6, р7з'являються в черзі процесів на 5 і 20 такті виконання.
Розрахувати середный час очыкування процесора і повний час
виконання для процесів, що знаходяться в багаторівневій черзі.
-
Процес
P0
P1
P2
P3
P4
P5
Тривалість чергово CPU burst
6
3
7
4
5
1
Час появи в черзі
0
3
4
10
12
7
Теоретичні відомості
Сценарії на мові Shell. Оболонка операційної системи(Shell) - інтерпретатор команд операційної системи, що забезпечує інтерфейс для взаємодії користувача з функціями системи.
У загальному випадку, розрізняють оболонки з двома типами інтерфейсу для взаємодії з користувачем: текстовий інтерфейс користувача (TUI) і графічний користувальницький інтерфейс (GUI).
Для забезпечення інтерфейсу командного рядка в операційних системах часто використовуються командні інтерпретатори, які можуть являти собою самостійні мови програмування, за власним синтаксисом і відмітними функціональними можливостями.
У операційні системи MS-DOS і Windows 9x включений командний інтерпретатор command.com, в Windows NT включений cmd.exe, починаючи з Windows XP (пакет оновлень 2) доступний PowerShell, який є вбудованим компонентом ОС починаючи з Windows 7 і Windows 2008 Server.
У сімействі командних оболонок UNIX найбільш популярні bash, csh, ksh, zsh, в UNIX-подібних системах у користувача є можливість міняти командний інтерпретатор, що використовується за умовчанням. Командний інтерпретатор виконує команди свого мови, задані в командному рядку або надходять зі стандартного вводу або вказаного файлу.
В якості команд інтерпретуються виклики системних або прикладних утиліт, а також керуючі конструкції. Крім того, оболонка відповідає за розкриття шаблонів імен файлів і за перенаправлення і зв'язування введення-виведення утиліт.
У сукупності з набором утиліт, оболонка являє собою операційну середу, мова програмування і засіб вирішення як системних, так і деяких прикладних задач, особливо, автоматизації часто виконуваних послідовностей команд.
Unix процеси. Процес в ОС UNIX — це програма, виконувана у власному віртуальному адресному просторі. Коли користувач входить у систему, автоматично створюється процес, у якому виконується програма командного інтерпретатора. Якщо командному інтерпретаторові зустрічається команда, що відповідає виконуваному файлу, то він створює новий процес і запускає в ньому відповідну програму, починаючи з функції main. Ця запущена програма, у свою чергу, може створити процес і запустити в ньому іншу програму (вона теж повинна містити функцію main) і т. д.
Для утворення нового процесу й запуску в ньому програми використаються два системних виклики (примітива ядра ОС UNI) — fork() і exec (ім'я-виконуван-файлу). Системний виклик fork приводить до створення нового адресного простору, стан якого абсолютно ідентично стану адресного простору основного процесу (тобто в ньому втримуються ті ж програми й дані).
Інакше кажучи, відразу після виконання системного виклику fork основний і породжений процеси є абсолютними близнюками; керування й у тім, і в іншому перебуває в крапці, що безпосередньо випливає за викликом fork. Щоб програма могла розібратися, у якому процесі вона тепер працює — в основна або породженому, функція fork повертає різні значення: 0 у породженому процесі й ціле позитивне число (ідентифікатор породженого процесу) в основному процесі.
Тепер, якщо ми хочемо запустити нову програму в породженому процесі, потрібно звернутися до системного виклику exec, указавши як аргументи виклику ім'я файлу, що містить нову виконувану програму, і, можливо, одну або кілька текстових рядків, які будуть передані як аргументи функції main нової програми. Виконання системного виклику exec приводить до того, що в адресний простір породженого процесу завантажується нова виконувана програма й із із адреси, що відповідає входу у функцію main.
Організація взаємодії процесів за допомогою каналів. Канал - засіб зв'язку виведення одного процесу з введенням іншого процесу. Таким чином, канали надають метод односторонніх комунікацій між процесами, звідси термін - напівдуплексні.
Коли процес створює канал, ядро встановлює два файлових дескриптора для користування цим каналом. Перший дескриптор використовується, щоб відкрити шлях введення в канал (запис), у той час як другий застосовується для отримання даних з каналу (читання).
Дані, що йдуть через канал, проходять через ядро. В операційній системі канали представлені коректним inode - індексним дескриптором, який існує в межах самого ядра, а не в будь-якої фізичної файлової системі.
Іменований канал - це окремий тип файлу у файловій системі, використовуваний для односпрямованого обміну інформацією між процесами.
Неіменований канал може бути використаний тільки батьківськими процесами, тоді як іменований канал доступний і для незалежних процесів, за умови, що всім цим процесам відомо розташування та ім'я файлу іменованого каналу. У mc іменовані канали відображаються з префіксом |.
Розподілена пам’ять. Повідомлення, семафори і пам'ять, що розділяється узагальнено називають System V IPC. Ці механізми об'єднуються в єдиний пакет, тому що їх відповідні системні виклики володіють близькими інтерфейсами, а в їх реалізації використовуються багато загальні підпрограми. Ось основні загальні властивості всіх трьох механізмів:
1. Для кожного механізму підтримується загальносистемна таблиця, елементи якої описують всіх існуючих в даний момент представників механізму (конкретні сегменти розділяється пам'яті, семафори або черги повідомлень).
2. Елемент таблиці містить деякий числовий ключ, який є вибраним користувачем ім'ям представника відповідного механізму. Щоб два або більше процесу могли використовувати деякий механізм, вони повинні заздалегідь домовитися про іменування використовуваного представника цього механізму.
3. Процес, який бажає почати користуватися одним з механізмів, звертається до системи з необхідним викликом, вхідними параметрами якого є ключ об'єкта та додаткові прапори, а відповідним параметром є числовий дескриптор, використовуваний в подальших системних викликах подібно до того, як використовується дескриптор файлу при роботі з файловою системою .
4. Захист доступу до раніше створеним елементам таблиці кожного механізму грунтується на тих же принципах, що і захист доступу до файлів.
Коли процес А посилає дані іншому процесу В через канал, відбуваються наступні дії: дані копіюються з буфера процесу А в буфер ядра, потім ці ж дані копіюються з буфера ядра в буфер процесу В.Механізм розділяється пам'яті дозволяє виключити передачу даних через ядро, надаючи декільком процесам доступ до однієї і тієї ж області пам'яті - пам'яті, що розділяється.
Необхідно зауважити, що колективна пам'ять має і недолік порівняно з каналами. Так як робота з пам'яттю, що може здійснюватися багатьма процесами, присутній ймовірність одночасної зміни вмісту пам'яті кількома процесами, що може призвести до помилки. Для псевдопараллельних обчислень, ймовірність такої події набагато менше, ніж при дійсних паралельних обчисленнях. Але і в цьому випадку, не можна не звертати уваги на цю відмінну особливість розділяється пам'яті від інших механізмів комунікації процесів.
Семафори. Для синхронізації роботи процесів і для синхронізації доступу декількох процесів до загальних ресурсів використовуються семафори. Загальними ресурсами процесів є файли, сегменти розділяється пам'яті.
Можливість одночасної зміни декількома процесами загальних даних називають критичною секцією, так як така спільна робота процесів може призвести до виникнення помилок. Наприклад, якщо кілька процесів здійснюють запис даних в один і той же файл, ці дані можуть виявитися перемішаними. Найбільш простий механізм захисту критичної секції полягає в розстановці «замків», що пропускають тільки один процес для виконання критичної секції, і зупиняє всі інші процеси, що намагаються виконати критичну секцію, до тих пір, поки цю критичну секцію не виконає пропущений процес. Семафори дозволяють виконувати таку операцію, як і багато інших.
Під семафором може розумітися як одиничний семафор, так і декілька семафорів, об'єднаних в групу. Загальний механізм дії семафора такий: семафор володіє внутрішнім значенням - числом, з безлічі цілих чисел з нижньою межею (наприклад - з нулем), процеси можуть змінювати значення семафора - збільшувати або зменшувати. Якщо процес змінює значення семафора і виходить за граничне значення, такий процес призупиняється, поки який-небудь інший процес не змінить значення семафора так, щоб заблокований процес зміг виконати зміна значення семафора.
Використання загальних даних декількома процесами може привезти до помилок і конфліктів. Але при цьому семафори і самі є загальними даними. Таке становище не є суперечливим, в силу того, що:
1. Значення семафора розташоване не в адресному просторі деякого процесу, а в адресному просторі ядра.
2. Операція перевірки та зміни значення семафора, що викликається процесом є атомарної, тобто непрериваемой іншими процесами. Ця операція виконується в режимі ядра.
Планування процесів. Основною проблемою організації багатокористувацького (правильніше сказати, мультипрограмного) режиму в будь-якій операційній системі є організація планування «паралельного» виконання декількох процесів. Операційна система повинна володіти чіткими критеріями для визначення того, якому готовому до виконання процесу і коли надати ресурс процесора.
Найбільш поширеним алгоритмом планування в системах поділу часу є кільцевої режим (Round Robin). Основний сенс алгоритму полягає в тому, що час процесора ділиться на кванти фіксованого розміру, а процеси, готові до виконання, шикуються в кільцеву чергу (див. Малюнок 1.40, «Схема планування з кільцевою чергою»). У цій черзі є два покажчика - початку і кінця. Коли процес, що виконується на процесорі, вичерпує свій квант процесорного часу, він знімається з процесора, ставиться в кінець черги, а ресурси процесора віддаються процесу, що знаходиться на початку черги. Якщо виконується на процесорі процес відкладається (наприклад, з причини обміну з деяким зовнішнім пристроєм) до того, як він вичерпає свій квант, то після повторної активізації він стає в кінець черги (не зміг доопрацювати - не вина системи). Це прекрасна схема поділу часу в разі, коли всі процеси одночасно поміщаються в оперативній пам'яті.
Однак операційна система UNIX завжди була розрахована на те, щоб обслуговувати більше процесів, ніж можна одночасно розмістити в основній пам'яті. Іншими словами, частина процесів, потенційно готових виконуватися, розміщувалася в зовнішній пам'яті (куди образ пам'яті процесу потрапляв в результаті відкачування). Для оптимізації роботи в цьому випадку потрібно кілька більш гнучка схема планування при поділі ресурсів процесора. У результаті було введено поняття пріоритету (див. Малюнок 1.41, «Схема планування з кільцевою чергою і пріоритетами»). В операційній системі UNIX на підставі значення пріоритету процесу визначається, по-перше, можливість процесу перебувати в основній пам'яті і на рівних конкурувати за процесор. По-друге, від значення пріоритету процесу залежить розмір тимчасового кванта, який надається процесу для роботи на процесорі при досягненні своєї черги. По-третє, значення пріоритету впливає на місце процесу в загальній черзі процесів.