Міністерство освіти і науки України
Вінницький національний технічний університет
О.В.Сілагін
МЕТОДІЧНІ ВКАЗІВКИ
до виконання контрольних і лабораторних робіт з дисципліни
«Операційні системи»
для студентів бакалаврського напряму 6.050101- «Комп’ютерні науки»
заочної форми навчання
Вінниця ВНТУ 2011
Міністерство освіти і науки України
Вінницький національний технічний університет
МЕТОДИЧНІ ВКАЗІВКИ
і завдання до контрольної роботи та лабораторного практикуму з дисципліни «Операційні системи комп’ютерних мереж» для студентів заочної форми навчання напряму підготовки «Комп’ютерні науки»
Затверджено Вченою радою Вінницького національного технічного університету як методичні вказівки для студентів заочної форми навчання напряму підготовки «Комп’ютерні науки». Протокол № від 2011 р.
Вінниця ВНТУ 2011
Методичні вказівки і завдання до контрольної роботи та лабораторного практикуму з дисципліни «Операційні системи комп’ютерних мереж» для студентів заочної форми навчання напряму підготовки «Комп’ютерні науки»/ Укладач О. В. Сілагін, – Вінниця: ВНТУ, 2010. – 30 с.
Рекомендовано до видання Методичною радою Вінницького національного технічного університету Міністерства освіти і науки України.
У виданні наведено методичні вказівки до вивчення дисципліни, завдання до контрольної роботи та типові розв’язування її задач з урахуванням вимог до оформлення результатів, а також методику виконання лабораторного практикуму.
Укладач Олексій Віталійович Сілагін
Редактор
Відповідальний за випуск завідувач кафедрою С. І. Перевозніков
Рецензенти:
Романюк О.Н., доктор технічних наук, професор
Ткаченко О.М.., кандидат технічних наук, доцент
Зміст
Вступ……………………………………………………………………
Зміст дисципліни………………………………………………………
Завдання до контрольної роботи……………………………………..
Вимоги до оформлення контрольної роботи………………………..
Питання до іспиту…………………………………………………….
Завдання до лабораторних робіт…………………………………….
Список літератури…………………………………………………….
Вступ
Операційна система (ОС) найбільшою мірою визначає вигляд всієї обчислювальної системи в цілому. Незважаючи на це, користувачі, що активно використовують обчислювальну техніку, найчастіше відчувають труднощі при спробі дати визначення операційній системі. Частково це пов’язано з тим, що ОС виконує дві, власне кажучи, мало зв’язані функції: забезпечує користувача-програміста зручностями за допомогою надання йому розширеної системи і підвищує ефективність використання комп’ютера шляхом раціонального керування його ресурсами. Найбільш поширеними в наш час ОС для комп’ютерних мереж є UNIX-подібні операційні системи, такі як Linux, BSD, SCO OpenServer, тому ці стандарти і лягли в основу при підборі учбового матеріалу дисципліни.
Зміст дисципліни
Еволюція операційних систем.
Відомості про появу перших операційних систем. Поява мультипрограмних операційних систем для менфреймів. Операційні системи та глобальні мережі.Операційні системи міні-комп’ютерів та перші локальні мережі. Розвиток операційних систем у 80-90-ті роки. Особливості сучасного етапу розвитку операційних систем. [1,3]
Призначення та функції операційних систем.
Операційні системи для автономного комп’ютера. Операційна система як віртуальна машина. Операційна система як система управління ресурсами.
Функціональні компоненти операційної системи автономного комп’ютера. Управління процесами. Управління пам’яттю. Управління файлами та зовнішніми пристроями. Захист даних та адміністрування. Інтерфейс прикладного програмування. Інтерфейс користувача. [1,2,3]
Поняття про мережні операційні системи.
Мережні та розподілені операційні системи. Значення терміну «мережна операційна система». Функціональні компоненти мережної операційної системи. Мережні служби та мережні сервіси. Вбудовані мережні служби та мережні оболонки.Однорангові та серверні мережні операційні системи. Операційні системи в однорангових мережах. Операційні системи з визначеними серверами. Вимоги до сучасних операційних систем. Поняття про поширеність, переносність, сумісність, надійність, безпечність. [1,3,5]
Архітектура операційної системи Unix.
Ядро та допоміжні модулі операційної системи. Поняття про утиліти, системні обробляючї програми, допоміжні програмні засоби, бібліотеки процедур. Робота ядра у привілейованому режимі. Взаємодії між утилітами операційної системи, системними програмами, які обробляють потоки даних та програмами користувача. Спрощена модель архітектури операційної системи з ядром у привілейованому режимі. Зміна режимів при виконанні системного виклику до привілейованого ядра. Багатошарова структура операційної системи. Поняття про трирівневу структуру обчислювальної системи. Концепція багатошарових взаємодій. Поняття про засоби апаратної підтримки операційної системи, машино-залежних компонентів операційної системи, базових механізмів ядра, менеджерів ресурсів, інтерфейсу системних викликів. [4,5,6]
Планування та синхронізація процесів.
Поняття процесу. Створення процесу. Основні стани процесу. Граф станів процесу у багатозадачному середовищі.Робота алгоритмів пріоритетів, що витісняються алгоритмами планування.Складність проблеми синхронізації. Поняття «критичної секції». Алгоритм із використанням блокувальних змінних. Суть синхронізації процесів за Дейкстром. Проблеми взаємного блокування. Механізм багатониткового опрацювання. [4]
Порівняльна характеристика сучасних мережних ОС. Сі-програми, компіляція програм, отладка, тестування. Компіляція та зв’язок модулів, їх структурна схема. Інструментальні засоби розробки програм на Сі. [3,7]
Міжпроцесні комунікації
Сигнали. Основна характеристика. Властивості роботи, призначення. Синхронні та асинхронні сигнали. Приклади та характеристики відомих сигналів. Методи обробки сигналів за допомогою функції signal. Наведіть приклад. . Робота з семафорами. Основні призначення та дії. Реєстрація подій. Системні виклики семафорів. Розгляд деяких типів операцій. Принцип роботи программ semtool, semstat.Неіменовані програмові канали. Засоби обміну інформацією між процесами у випадку неіменованих програмових каналів. Засоби синхронізації процесів. Іменовані програмові канали. Поняття про народження процесів, дескриптор відкритого каналу. Додаткові властивості іменованих каналів. Робота з програмами по керуванню каналами. Утворення каналів за допомогою стандартних програмових засобів Unix. Системні виклики. Реалізація технології клієнт – сервер ( fifo-server, fifo-client). Приклади реалізації стандартного BSD-soket-інтерфейсу. Понятта про ідентифікатор батьківського процесу, обслуговування чергового запиту. Питання компіляції.Черги. Принцип роботи програми msgtool. Структура повідомлення. Функції ядра по обслуговуванню повідомлень. Форми шаблонів. Технологія «клієнт сервер» у випадках застосування черг. [4]
Завдання до контрольної роботи
Завдання №1 Операційні системи компьютерних мереж.
Дайте відповідь на запитання згідно з варіантом, що визначений викладачем.
Взаємодія окремих компонентів мережних ОС.
Основні варіанти побудови мережних ОС.
Класифікація та еволюція мережних ОС.
Охарактеризуйте роботу мережної ОС Windows NT.
Основні критерії для вибору мережної ОС.
Характерні властивості мережної ОС.
Особливості корпоративних ОС.
Організація безпеки та довідкової служби мережної ОС.
Завдання №2 Планування та синхронізація процесів.
Дайте відповідь на запитання згідно з варіантом, що визначений викладачем.
Основні стани процесу. Наведіть та поясніть граф станів процесу у багатозадачному середовищі.
Дайте пояснення роботи алгоритмів пріоритетів, що витісняються та алгоритмів планування.
В чому полягає складність проблеми синхронізації? Наведіть приклади.
Поняття «критичної секції». Алгоритм із використанням блокувальних змінних.
Суть синхронізації процесів за Дейкстром.
Задачі проблеми взаємного блокування.
Механізм багатониткового опрацювання.
Порівняльна характеристика сучасних мережних ОС.
Завдання №3 Міжпроцесні комунікації.
Дайте відповідь на запитання згідно з варіантом, що визначений викладачем.
Свопінг та пейджінг,загальні характеристики, основні властивості, відмінності у призначенні. Приклад процесу свопінгу.
Поняття про буфер кеш-памьяті. Наведіть загальну характеристику процесів, які використовують буфер кеш-памяті.
Поділювана пам'ять. Методи роботи. Команди ОС UNIX по управлінню поділюваною памяттю. Програмна реалізація поділюваної памяті.
Призначення черг повідомлень. Основні властивості команд у ОС UNIX з управління чергами повідомлень. Програмна реалізація черг повідомлень.
Програмні канали, призначення та основні характеристики. Методи роботи з поіменованими та неіменованими програмними каналами. Створення каналів за допомогою команд ОС UNIX та функцій мови С.
Призначення та основні функції семафорів. Відомі операції з семафорами.
Методи обробки сигналів за допомогою функції signal. Наведіть приклад.
Сигнали. Основна характеристика. Властивості роботи, призначення. Синхронні та асинхронні сигнали. Приклади та характеристики відомих сигналів.
Завдання №4
Приклади програмування.
Напишіть програму створення каналу на мові С.
За допомогою команд операційної системи створіть програмний канал.
Напишіть програму на мові С, яка усуває виникнення процесів- «демонів» за допомогою механізму сигналів.
Напишіть програму звикористанням системної функції Ioctl.
Напишіть програму на мові С, яка створює файл з кодом захисту 0555. Поясніть значення цього коду.
Напишіть програму на мові С, яка тестує наявність файла на жорсткому диску.
Напишіть програму на мові С. яка взаємодіє з дескрипторами відкритого файлу.
Вимоги до оформлення контрольної роботи.
Контрольна робота з дисципліни, , складається із трьох теоретичних питань та автоматизованого ( програмного ) вирішення задачі.
Контрольна робота оформляється в шкільних зошитах або на листках формату А4 і спочатку містить відповіді на теоретичні питання, а потім – розв`язок задачі, які наводяться державною мовою.
При відповіді на теоретичне питання необхідно дотримуватись таких умов: матеріал повинен викладатися логічно, містити необхідні роз`яснення до формул. Відповіді не повинні переписуватися із підручників, а повинні відображати творчий підхід студента до викладення теоретичного матеріалу, що вивчається.
При програмуванні задач необхідно додавати детальні коментарі а при необхідності граф-схему алгоритму роботи.
В кінці контрольної роботи наводиться список літературних джерел, з яких безпосередньо взято цитати у вигляді окремих речень, формул, таблиць. В тексті роботи кожне посилання на літературне джерело дають в квадратних дужках, вяких вказується порядковий номер джерела за списком,
Лістинги програм обов’язково супроводжуються коментарями.
Для виконання контрольної роботи і підготовки до іспиту достатньо матеріалу викладеного в [3,4].
Питання до іспиту
1. Еволюція операційних систем. Відомості про появу перших операційних систем. Поява мультипрограмних операційних систем для менфреймів. Операційні системи та глобальні мережі.
2. Операційні системи міні – комп’ютерів та перші локальні мережі. Розвиток операційних систем у 80-90-ті роки. Особливості сучасного етапу розвитку операційних систем.
3. Призначення та функції операційних систем. Операційні системи для автономного комп’ютера. Операційна система як віртуальна машина. Операційна система як система управління ресурсами.
4. Функціональні компоненти операційної системи автономного комп’ютера. Управління процесами. Управління пам’яттю. Управління файлами та зовнішніми пристроями. Захист даних та адміністрування. Інтерфейс прикладного програмування. Інтерфейс користувача.
5. Поняття про мереживі операційні системи. Мереживі та розподілені операційні системи. Значення терміну “мережива операційна система”. Функціональні компоненти мережної операційної системи. Мереживі служби та мереживі сервіси. Вбудовані мереживі служби та мереживі оболонки.
6. Однорангові та серверні мереживі операційні системи. Операційні системи в однорангових мережах. Операційні системи з визначеними серверами.
7. Вимоги до сучасних операційних систем. Поняття про поширеність, переносніть, сумісніть, надійність, безпечність.
8. Архітектура операційної системи. Ядро та допоміжні модулі операційні системи. Поняття про утиліти, системні обробляючі програми, допоміжні програмні засоби, бібліотеки процедур.
9. Робота ядра у привілігірованому режимі. Взаємодії між утилітами операційною системою, системними програмами які обробляють потіки даних та програмами користувача. Зпрощена модель архітектури операційної системи з ядром у привілігірованому режимі. Зміна режимів при виконанні системного виклику до привілігірованого ядру.
10. Багатослойна структура операційної системи. Поняття про трех рівневу структуру обчислювальної системи. Концепція багатослойних взаємодій. Поняття про засоби апаратної підтимки операційної системи, машино-залежних компонентів операційної системи, базових механізмів ядра, менеджерів ресурсів, інтерфейсу системних викликів.
11. Апаратна залежність та переносність операційної системи. Типові засоби апаратної підтримки операційної системи. Машино-залежні компоненти операційної системи. Переносність операційної системи.
12. Мікроядерна архітектура. Відомі концепії. Переваги та недоліки мікроядерної архітектури.
13. Сумісність та множинні прикладні середовища. Двійкова сумісніть та сумісність первісних текстів. Трансляція бібліотек. Способи реалізації прикладних програм.
14. Архітектура операційної системи Unix. Поняття про диспетчер операційної системи Unix. Механізм роботи диспетчера операційної системи Unix.
15. Поняття про процеси. Дескриптор і контекст процесу. Поняття про ієрархію процесів. Програмна реалізація відмежування процесів.
16. Поняття про групи процесів. Відомі варіанти закінчення процесів. Поняття про „процеси-демони”. Відомі способи запуску „процесів-демонів”.
17. Міжпроцесні комунікації. Поняття про сигнали. Властивості, методи використання, програмна реалізація.
18. Міжпроцесні комунікації. Поняття про семафори. Властивості, методи використання, програмна реалізація.
19. Міжпроцесні комунікації. Поняття про неіменовані програмні канали. Властивості, методи використання, програмна реалізація.
20. Міжпроцесні комунікації. Поняття про іменовані програмні канали. Властивості, методи використання, програмна реалізація.
21. Міжпроцесні комунікації. Поняття про черги повідомлень. Властивості, методи використання, програмна реалізація.
22. Міжпроцесні комунікації. Поняття про методи роботи з поділяємою пам’яттю. Властивості, методи використання, програмна реалізація.
23. Поняття про ідентифікатори користувача та групи. Порівняльна характеристика, призначення та основні властивості ідентифікаторів. Відомі коди захисту файлів та каталогів.
24. Поняття про привілейованих користувачів. Методи роботи з ефективними та реальними ідентифікаторами.
25. Методи роботи зі стопінгом та пейджингом. Основні властивості. Приклади використання.
26. Поняття про буфер кеш – пам’ятті. Методи роботи. Переваги та недоліки буферного кешу.
27. Поняття про потоки ввода/виводу. Робота зі спеціальними файлами (файли фізичних пристроїв та псевдопристроїв). Приклади роботи. Служби Internet, які використовують спеціальні файли. Основні властивості та відмінності спеціальних файлів від звичайних.
28. Методи взаємодій драйверів із програмним та апаратним середовищем.
29. Поняття про функцію Ioctl. Методи роботи та програмна реалізація. Структура таблиці bdevsw.
30. Схема роботи драйверів в операційній системі Unix.
31. Поняття про файлову систему. Загальні властивості загальних файлів та каталогів. Приклад структури файлової системи. Поняття про кореневий файловий каталог. Призначення каталогів /var, /etc/, /usr, /home, /opt.
32. Призначення та методи роботи з файлом swap. Команди з управління файлом swap. Моніторинг використання файла swap.
33. Поняття про зв’язок фізичної та логічної структури операційної системи Unix. Методи створення файлової системи операційної системи Unix.
34. Поняття про монтуємість та демонтуємість операційної системи Unix. Приклади команд.
35. Поняття про системні виклики операційної системи Unix. Призначення та методи роботи з функціями open, create, dup.
36. Поняття про системні виклики операційної системи Unix. Призначення та методи роботи з функціями read, write, lseek, close, unlink.
37. Поняття про стандартні бібліотечні функції ввода/виводу. Приклади потокових функцій ввода/виводу.
38. Поняття про програмування на мові Java для файлових систем. Відомі приклади. Поняття про файлові об’єкти. Виведення записів.
39. Поняття про програмування на мові Java для файлових систем. Приклади роботи з функціями FileOutputStream, DataOutputStream, PrintStream.
40. Поняття про програмування на мові Java для файлових систем. Буферизоване виведення інформації. Призначення класу FileOutputStream.
41. Поняття про програмування на мові Java для файлових систем. Операції читання. Призначення класу FileInputStream, DataInputStream.
42. Поняття про програмування на мові Java для файлових систем. Приклади операцій довільного доступу. Читання і запис даних з віддалених систем.
43. Поняття про програмування на мові Java для файлових систем. Мережні комунікації.
44. Порівняльна характеристика різних версій операційної системи Unix. Загально прийняті критерії: простота у використанні та адмініструванні, наявність документації, інтерфейс користувача, мережні засоби, та інші.
45. Методи виконання програм в операційній системі Unix на пракладі програм які написані на мові високого рівня С.
46. Практична робота в операційній системі Unix. Методи підключення користувача до вузла Internet. Методи завершення сеансу роботи з сервером операційної системи Unix.
47. Практична робота в операційній системі Unix. Робота зі змінною оточення та профайлом користувача.
48. Команди операційної системи Unix: визначення часу та дати, роздруку списку файлів, визначення файлів та каталогів, прав власника.
49. Команди операційної системи Unix: зміна каталогу, визначення поточного каталогу, поняття про абсолютний та відносний шляхи каталогів.
50. Команди операційної системи Unix: виведення змісту файлу, створення м’яких посилань, створення та вилучення каталогу, вилучення файлів.
51. Команди операційної системи Unix: пересилання та копіювання команд, методи звертання за довідковою системою команд, корекція помилково введених символів.
52. Методи компіляції, відлагодження, трасирівки С-програм.
53. Використання методів визначення змінних оточення. Поняття про програмне оточення. Передача змінних оточення в структури даних.
54. Методи завершень С програм в операційній системі Unix. Відомі способи завершення програм. Поняття про системний виклик exit та обробники завершень.
Завдання до лабораторних робіт
Лабораторна робота №1
Знайомство з операційною системою Unix (Linux, FreeBSD), реєстрація користувача
Мета роботи: ознайомити студентів з операційною системою Unix (Linux, FreeBSD) на рівні користувача (робота з файлами і каталогами) та з текстовим редактором vi.
Загальні відомості
UNIX є однією з найбільш вдалих операційних систем за всю історію розвитку комп'ютерної техніки [1]. Це єдина система, яка створена без будь-яких вимог до підтримки старого програмного забезпечення. Принцип найскорішого застосування та розвитку всіх її новітніх технологій зберігається й по теперішній час.
UNIX сьогодні - це найпотужніша 32- або 64-розрядна багатозадачна, багатокористувачева, високопродуктивна та високонадійна операційна система мережі. Жодна з існуючих на сьогоднішній день інших операційних систем не може перевищити усіх вишеперерахованих показників.
UNIX була першою операційною системою, побудованою за модульним принципом. Мінімізоване ядро системи знаходиться в оперативній пам'яті комп'ютера і не виконує жодної безпосередньої функції користувача. Для продуктивної роботи між користувачем і ядром системи існує багато модулів, які виконують ролі посередників.
Ядро має обмежений і строго оптимізований набір системних програм, які керують базовими ресурсами комп'ютерної системи. Такий підхід дає можливість дуже вдало будувати відношення між користувачем та системою, додаючи, при необхідності, окремі модулі для обслуговування нових вимог клієнтів. У цьому випадку ядро бере на себе диспетчерські функції: розподілення пам'яті, контроль доступу до системних ресурсів і таке інше. Крім того, у ядрі UNIX знаходяться важливі системні таблиці, необхідні для побудови зв'язаних програмних ланцюжків.
Вхід до системи
Вхід до системи здійснюється на початку кожного сеансу роботи за терміналом і дає можливість користувачу ідентифікувати себе для ведення обліку використання обчислювального комплексу.
Для реєстрації в системі користувачу необхідно задати своє вхідне ім'я (login) та пароль (password).
З метою убезпечення від несанкціонованого входу до системи іншого користувача, існує можливість змінювати свій пароль через певний час. Так, при використанні команди passwd (зміна пароля) система спочатку запитає стару послідовність символів, а потім задається нова комбінація. Після першого запиту виконується перевірка на відповідність нового пароля технічним вимогам. Якщо така відповідність існує, система запитає іншу копію нового пароля, потім копії порівнюються. У випадку невідповідності нових копій, цикл введення паролей буде повторений.
Технічні вимоги до паролей
Кожний пароль повинен мати не менше 6-ти символів. У випадках, коли послідовність символів перевищує 6, - значущими є тільки перші 8;
Кожен пароль повинен мати, як мінімум, дві букви (велику чи маленьку) та одну цифру або знак;
Кожен пароль повинен відрізнятися від вхідного імені (login'у), яке прочитане зліва направо або навпаки, та від циклічних зсувань вхідного імені;
Новий пароль повинен відрізнятись від попереднього хоча б трьома знаками (не враховуючи регістру великих та маленьких букв).
При виконанні багатьох робіт в операційній системі Unix важливо вміти користуватися деякими основними командами маніпулювання з файлами та каталогами.
До таких команд відносяться:
роздрук змісту каталогу
наприклад: ls -l /home/usr1
роздрук змісту каталогу /home/usr1 користувача usr1
копіювання файлів
наприклад: cp Mydocument /usr/doc/
копіювання файла Mydocument у каталог /usr/doc/
зміна назви файла
наприклад: mv Mydocument MyNewdocument
зміна назви файла Mydocument на MyNewdocument
створення каталогу
наприклад: mkdir NewDirectory
створення каталогу NewDirectory
вилучення каталогу
наприклад: rmdir OldDirectory
вилучення каталогу OldDirectory
зміна назви каталогу
наприклад: mvdir OldDirectory NewDirectory
зміна назви каталогу OldDirectory на NewDirectory
роздрук змісту файла
наприклад: cat MyNewFile або less MyNewFile
роздрук змісту файла MyNewFile
Основні режими редактора vi:
командний режим (зразу після входу у редактор);
порядкового редагування;
режим редагування.
Основні команди редактора vi:
а,і,о - вхід до режиму редагування,
ZZ - вихід з редактора з записом,
esc - вхід до командного режиму,
: - вхід до режиму порядкового редагування,
:wq - вихід з редактора з записом,
:q! - вихід з редактора без запису,
enter - вхід до режиму командного режиму з порядкового
редагування,
h чи стрілка вліво - перехід на знак ліворуч,
l чи стрілка вправо - перехід на знак праворуч,
j чи стрілка вниз - перехід на рядок вниз,
k чи стрілка вверх - перехід на рядок вверх,
Ctrl - F - перехід на екран вверх,
Ctrl - B - перехід на екран вниз,
х - вилучає знак у командному режимі,
(n) - коефіцієнт повторення (встановлюється перед вилученням,
копіюванням, і т.ін.)
(n)х - вилучає n знаків у командному режимі,
dd - вилучає рядок у командному режимі,
(n)dd - вилучає n рядків у командному режимі,
сс - заміна рядка з командного режиму (переходом до режиму
введення і вилучення тексту з рядка)
u - відміна останньої операції,
p - розташовування поперед курсора активного або вилученого
тексту,
(n)dd p - переміщення n рядків,
(n)уу p - копіювання n рядків.
Редактор vi вважається першим і найпродуктивнішим редактором в операційній системі UNIX. Існуюча величезна кількість команд також дозволяє виконувати однакові операції за допомогою різних команд. Це зроблено як для зручності при роботі на різних апаратних платформах, так і для задоволення різного смаку користувачів.
Контрольні питання
Перерахуйте технічні вимоги щодо паролей.
Назвіть основні команди роботи з файлами та каталогами, їх застосування.
Назвіть основні режими та команди роботи з редактором vi.
Завдання
1.Зареєструватись в операційній системі як користувач (ім'я та пароль візьміть у викладача);
Замінити пароль:
за допомогою простого пароля (наприклад 123456)
за допомогою отриманого у викладача пароля зі зміною двох символів;
за допомогою введення складного пароля (наприклад ReW#2z)
Одержати у викладача контрольну картку по основних командах маніпулювання з файлами та каталогами;
Одержати у викладача контрольну картку по основних командах редактора vi;
Підготувати звіт по лабораторній роботі.
Зміст звіту:
короткі відповіді на контрольні питання;
призначення описаних команд операційної системи Unix;
призначення основних команд редактора vi.
Лабораторна робота №2
Компіляція, налагодження, трасування Сі-програм
Мета роботи: ознайомити з компіляцією, написанням та налагоджування Сі-програм в оперативній системі UNIX.
Загальні відомості
Сі-компілююча система складається з компілятора, асемблера та редактора зв'язків. Коли користувач виконує компіляцію за допомогою командного рядка, то кожен з цих компонент виконується послідовно:
Сс -o MyProgram MyProgram.c
Виконувана Сі-програма створюєтся у три етапи:
початковий текст програми обробляється препроцесором, котрий виконує відповідні підстановки для таких рядків, як #include, #define і т.і.;
компілятор виконує трасування Сі-програми та переведе її з початкового коду в асемблерний;
асемблер транслює програму в машинні інструкції комп'ютера для безпосереднього виконання. При цьому формується об'єктний модуль, який є вхідним файлом для редактора зв'язку;
редактор зв'язку приєднує один чи декілька об'єктних файлів (отриманих в результаті компіляцій) до завантажувального модуля і автоматично слідкує за всіма зовнішніми посиланнями у програмах та підключанням їх до бібліотечних модулів.
В результаті цього формується виконуваний файл з ім'ям за замовчуванням a.out. Наприклад:
cc MyFile.c
Користувач може змінити назву файла:
mv a.out MyCompileFile
або вказати у командному рядку ключ -о:
cc -o MyFile MyFile.c
У випадку роботи з математичними функціями:
сс -lm -o MyFile MyFile.c
Для виконання налагоджувальних робіт, необхідно при компіляції залишати таблицю:
сс -g -o MyFile MyFile.c
Для розробки програми на мові високого рівня Сі слід набути елементарні поняття про структуру програми та основні функції (вираз, формат, вкладеність, складовий оператор).
Вираз - структурна одиниця програми, яка складається з одного чи більшої кількості операндів і символів операцій.
Наприклад: а++; в=10; x=(y*z)/w
Арифметичні операції: i=j+2; last=arname + arsize - 1;
Операції відношення: if (i==0) break;
while (i!=3) i=func();
if (x<0) printf("negative");
Логічні операції: if(!good) printf("not good");
if (x<A || x>B) printf("out of ragne");
Побітові операції: opposite=x>>3;
Інші операції, наприклад: abs=(i<=0)? -i:i;
Формат - це структура, яка складається з одного оператора, який займаює один чи більше рядків. Два чи більше операторів можуть бути розташовані в одному рядку.
Вкладеність - це метод обробки операторів, які управляють порядком виконання операцій (if, if-else, switch, while, do-while та for). Вони можуть бути вкладені один в один.
Складний оператор (блок) - це структура, яка складається з одного чи більшої кількості операторів різного типу, які заключаються у фігурні дужки.
Наприклад: {x=1; y=2; z=3}
Функції (стандартні):
- форматоване введення-виведення (fprintf, printf, scanf, fscanf і т.і.), наприклад:
printf("%6.3f", 65.37);
- введення-виведення рядків (gets, fgets, put, fputs і т.і.), наприклад:
fgets(Line[i], LINESIZE, stdin);
Існує величезна кількість інших стандартних функцій: доступу до файлів та каналів, обробки і перетворення рядків, доступу до аргументів та розподілу пам'яті і т.п.
Саме мова високого рівня Сі надає можливість поширеного використання функцій користувача, наприклад:
void errmesg(s)
char *s;
{
printf("\nError message is: %s\n", s);
}
Найпростіша програма на мові високого рівня Сі може виглядати таким чином:
#include <stdio.h>
main()
{
printf("This is a test message…\n");
}
Компілююча система Сі дозволяє користувачу уникнути синтаксичних помилок. За допомогою налагоджувача gdb в багатьох випадках користувач може уникнути логічних помилок. Викликатись налагоджувач може так:
gdb MyProgram
До основних команд налагоджувача відносяться:
run команда запуску,
break (n) команда встановлення точки зупинки,
наприклад break 20
встановлення точки зупинки на 20 рядку програми,
continue команда продовження,
step (n) команда продовження виконання на n кроків,
наприклад step 3
продовження виконання програми на 3 кроки,
clear (n) команда вилучення точки зупинки,
наприклад clear 34
вилучення точки зупинки на 34 рядку,
print db команда роздруку змісту змінної,
наприклад print var_list7
роздрук змісту змінної var_list7,
help команда отримання довідкової інформації.
Існуює багато інших команд та модифікацій вищеперерахованих. З деякими з них можна познайомитись за допомогою довідкової системи та інших матеріалів.
Контрольні питання
З яких компонентів складається Сі-компілююча система.
З яких етапів складається виконувана Сі-програма.
Які Ви знаєте опції компіляції програм з математичними модулями та налагоджувальними таблицями.
Назвіть основні відомі функції мови високого рівня Сі.
Назвіть основні команди налагоджувача gdb.
Завдання
Написати за допомогою текстового редактора vi програму обчислення коренів квадратного рівняння (ах2+вх+с=0). Здійснити цикл розгалуження при значенні дискримінанта більшим 0, рівним 0 та меншим 0. Коефіцієнти а, в, с одержати у викладача.
У режимі налагоджувача роздрукуйте значення дискримінанта.
Підготувати звіт по лабораторній роботі.
Зміст звіту:
короткі відповіді на контрольні питання;
призначення програми;
алгоритм і текст програми.
Лабораторна робота №3
Знайомство з основними механізмами реалізації технології "клієнт-сервер" в ОС Unix, робота з неіменованими каналами
Мета роботи: ознайомити з основними механізмами реалізації новітніх технологій ("клієнт-сервер"), розбір програми роботи з неіменованими каналами.
Загальні відомості
На сьогоднішній день ключовими компонентами в галузі створення передових комп'ютерних технологій є технологія "клієнт-сервер". Ця універсальна модель служить основою побудови будь-яких складних систем, у тому числі, і мережних. Розробники систем керування базами даних, комунікаційних систем, систем електронної пошти, банківських систем і т.ін. у всьому світі використовують цю технологію. В даному випадку операційна система Unix є для розробників системного та прикладного програмування ідеальним засобом, який найбільш повно відповідає вимогам "клієнт-сервер" і далеко залишає позаду своїх конкурентів. Для побудови моделі типу "клієнт-сервер" в Unix існує багато механізмів, які реалізуються за допомогою:
сигналів,
семафорів,
програмних каналів,
черг повідомлень,
сегментів поділяємої пам'яті,
спеціальних команд (write, cu, mail),
засобів міжкомп'ютерних взаємодій (uucp, tcp/ip, nfs, rfs).
Ознайомимось з деякими з них більш детально.
Одну з центральних позицій при реалізації моделі типу "клієнт-сервер" займають програмні канали. Вони були створені як засіб обміну потоками інформації між процесами, тобто коректної взаємодії між різними завданнями в операційній системі.
На фізичному рівні програмні канали являють собою спеціальні файли, до яких можна писати будь-яку інформацію або читати з них. Вибірка та розташування інформації в таких особливих файлах відбувається за принципом FIFO (First In/First Оut, Першим Зайшов/Першим Вийшов).
Після створення програмного каналу і початку роботи з ним система забезпечує зупинку процесів (котрі працюють з каналом), якщо він заповнений (у більшості випадків 4096 байт). Це означає, що при запису операція write виконується успішно, якщо в каналі наявне вільне місце, або переходить до стану очікування, якщо об'єм створеної інформації перевищує надані розміри.
При введенні/виведенні завжди використовується потокова модель даних. Це означає, що дані, які передаються через програмні канали, ніяк не інтерпретуються (обробляються). Довжина повідомлень не контролюється. Відразу декілька "процесів-клієнтів" мають змогу бути записаними до каналу, а один "процес-сервер" може їх читати та робити обмін повідомленнями зі своїми клієнтами тим же чином. При цьому повідомлення ніяк не відокремлюються один від одного - сервер сам повинен визначати, хто з клієнтів до нього звертається і яке повідомлення надіслав до нього.
Неіменовані канали можуть встановити зв'язок тільки між процесами, які народжені одним початковим процесом. В цьому випадку народжені процеси одержують в спадок дескриптор відкритого каналу і одержують можливість бути записаними до каналу і читати з нього будь-яку інформацію (рис. 3.1.).
Створення Створення каналу
каналу (закриття (закриття каналу за
каналу за дескрип- дескриптором 0)
тором 1)
Рис. 3.1. Взаємодії між процесами і створеним каналом
Процес має можливість встановити декілька програмних каналів таким чином, що дані будуть проходити у вигляді лінійних або мережних структур (рис. 3.2.).
Вхід
Вихід
Вхід
Рис. 3.2. Можливість проходження даних у вигляді лінійних та мережних структур
В операційній системі Unix подібні механізми конвеєрної обробки інформації дуже поширене явище. Наприклад, командна послідовність proc1 | proc2 | proc3 визначається як декілька процесів, які мають програмні канали від proc1 до proc2 та від proc2 до proc3.
За допомогою команд Unix також можна реалізувати мережну структуру (рис. 3.3.)