Методичні вказівки до самостійної роботи студентів та виконання контрольної роботи з дисципліни «Системне програмування» для студент - polpoz.ru o_O
Главная
Поиск по ключевым словам:
Похожие работы
Название работы Кол-во страниц Размер
Методичні вказівки до самостійної роботи студентів з дисципліни 5 1574.82kb.
Методичні вказівки до самостійної роботи студентів з курсу «Метеорологія... 1 43.33kb.
Методичні вказівки до практичних занять та самостійної роботи студентів... 7 857.28kb.
Mihictepctbo осв1ти I науки україни xapkibcьka національна академія... 1 121.68kb.
Контролін г методичні рекомендації щодо самостійної роботи та контрольні... 1 418.97kb.
Методичні вказівки до практичних занять. 3 Методичні вказівки для... 3 542.57kb.
Методичні вказівки з англійської мови 2 335.96kb.
Методичні вказівки та контрольні завдання 1 335.38kb.
Методичні вказівки до виконання розрахунково-графічного завдання... 1 13.35kb.
Харківський національний університет радіоелектроніки 3 545.89kb.
Методичні вказівки до виконання контрольної роботи та індивідуальні... 5 365.58kb.
Законів України «Про місцеве самоврядування в Україні», «Про зайнятість... 1 37.78kb.
1. На доске выписаны n последовательных натуральных чисел 1 46.11kb.

Методичні вказівки до самостійної роботи студентів та виконання контрольної роботи - страница №1/6



Трубіна, Наталія Федорівна.

Методичні вказівки до самостійної роботи студентів та виконання контрольної роботи з дисципліни «Системне програмування» для студ. 3 курсу заоч. форми навчання «Комп’ютерна інженерія» / Н.Ф. Трубіна; ОНУ імені І.І. Мечникова, ІМЕМ, Кафедра математичного забезпечення комп'ютерних систем. – Одеса: Одеський нац. університет, 2010. – 78 с. –Бібліогр.: с. 57.

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Одеський національний університет імені І.І. Мечникова
Інститут математики, економіки і механіки

Кафедра математичного забезпечення комп'ютерних систем

Н.Ф. Трубіна
МЕТОДИЧНІ ВКАЗІВКИ

до самостійної роботи студентів

та виконання контрольної роботи з дисципліни
«Системне програмування»

для студентів 3 курсу заочної форми навчання



напрям підготовки – комп’ютерна інженерія

Одеський національний

університет

імені І.І. Мечникова



2010

МЕТОДИЧНІ ВКАЗІВКИ до самостійної роботи студентів та виконанню контрольної роботи з дисципліни «Системне програмування» для студентів 3 курсу заочної форми навчання, напрям підготовки – комп’ютерна інженерія.



Автор-укладач:

Н.Ф. Трубіна, старший викладач кафедри

математичного забезпечення комп'ютерних систем



Рецензенти:
Т.І. Петрушина, к.ф-м.н., завідувач кафедрою математичного забезпечення комп'ютерних систем
Ю.Н. Крапівний, к.ф-м.н., доцент кафедри математичного забезпечення комп'ютерних систем

Рекомендовано до видання Вченою Радою

Інституту математики, економіки і механіки

ОНУ імені І.І. Мечникова.

Протокол № 1 від 9 жовтня 2009 року.

© Одеський національний університет імені І.І. Мечникова, 2010

Зміст


ПЕРЕДМОВА 5

1 ЗАГАЛЬНІ ВІДОМОСТІ ПРО ДИСЦИПЛІНУ 6

1.1 Мета дисципліни, її місце в навчальному процесі 6

1.2 Зміст дисципліни 7

1.3 Контролюючі заходи 8

2 ТЕОРЕТИЧНІ МАТЕРІАЛИ 9

2.1 Програмний інтерфейс UNIX 9

2.1.1 Системні виклики 9

2.1.2 Основні бібліотеки UNIX й їхні заголовні файли 9

2.1.3 Помилки системних викликів 12

2.1.4 Питання для самоперевірки 14

2.2 Взаємодія програми з середовищем виконання 14

2.2.1 Список аргументів 14

2.2.2 Змінні оточення 15

2.2.3 Коди завершення програми 17

2.2.4 Правила формування і засоби розбору командних рядків 17

2.2.5 Питання для самоперевірки 18



2.3 Компілятори GCC 18

2.3.1 Робота з компілятором 18

2.3.2 Питання для самоперевірки 20

2.4 Введення-виведення низького рівня 20

2.4.1 Основні поняття 21

2.4.2 Системні виклики. read і write 22

2.4.3 Відкриття, створення, закриття і знищення файлів 23

2.4.4 Довільний доступ - lseek 24

2.4.5 Питання для самоперевірки 25



2.5 Доступ до каталогів 26

2.5.1 Функції для роботи з каталогами 26

2.5.2 Питання для самоперевірки 27

2.6 Управління процесами 27

2.6.1 Атрибути процесу 27

2.6.2 Створення процесу 29

2.6.3 Виконання файлів 31

2.6.4 Завершення процесу 32

2.6.5 Питання для самоперевірки 32



2.7 Сигнали 33

2.7.1 Типи сигналів 34

2.7.2 Обробка сигналів 35

2.7.3 Питання для самоперевірки 39



3 ПРИКЛАДИ РОЗВ’ЯЗАННЯ ЗАВДАНЬ 40

4 ВАРІАНТИ ЗАВДАНЬ 47

4.1 Завдання 1 47

4.2 Завдання 2 48

4.3 Завдання 3 49

4.4 Завдання 4 51

4.5 Завдання 5 52

5 ОРГАНІЗАЦІЯ КОНТРОЛЮ ЗНАНЬ ТА ВМІНЬ СТУДЕНТІВ 54

5.1 Система контролю знань та вмінь студентів 54

5.2 Форми контролю знань та вмінь студентів 55

ЛІТЕРАТУРА 56

ДОДАТОК А. СПИСОК ФУНКЦІЙ ПО КАТЕГОРІЯХ 57

Доступ до змінних оточення 57

Файлові атрибути 58

Файлове введення-виведення 60

Каталоги 63

Управління каталогами 64

Атрибути процесів 65

Управління процесами 66

Атрибути процесів 70

Ресурси процесів 71

Сигнали 72

Маски сигналів 74

ДОДАТОК Б. КОДИ ПОМИЛОК СИСТЕМНИХ ВИКЛИКІВ 76




ПЕРЕДМОВА


Методичні вказівки до самостійної роботи студента та виконанню контрольної роботи з дисципліни «Системне програмування» призначені для студентів 3 курсу напряму підготовки – комп’ютерна інженерія.

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

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

В методичних вказівках розглядаються питання, які відповідають навчальній програмі дисципліни.

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


1ЗАГАЛЬНІ ВІДОМОСТІ ПРО ДИСЦИПЛІНУ

1.1Мета дисципліни, її місце в навчальному процесі


Навчальна дисципліна „Системне програмування” належить до циклу підготовки бакалаврів з напряму «Комп’ютерна інженерія » 6.0904.

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

Загальний обсяг навчального часу, що припадає на вивчення дисципліни, дорівнює 122 години, з них: лекцій - 10, лабораторних занять – 6, самостійної роботи - 106.

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

Студенти вивчать організацію файлової системи ОС UNIX і інформаційні структури й алгоритми, що використовуються файловою системою. Велика увага приділяється управлінню процесами, подаються загальні поняття системного програмування, поняття системного виклику як базового інтерфейсу з ядром операційної системи, обробку сигналів, принципи та методи побудови обробляючих програм в операційних системах, принципи визначення ефективності використання ЕОМ та побудови комфортного середовища для розробника системного програмного забезпечення.

Курс „Системне програмування” є першим в логічній послідовності дисциплін, що присвячені програмному забезпеченню сучасних комп’ютерних систем, йому передує вивчення таких нормативних дисциплін як „Архітектура ЕОМ”, „Програмування”.


1.2Зміст дисципліни


  1. Засоби та задачі системного програмування. Створення та використання бібліотек. Поняття системної програми. Типи системних програм. Підходи до створення системних програм

  2. Середовище програмування UNIX. Системні виклики та бібліотечні підпрограми. Створення и виконання програми в середовищі UNIX. Взаємодія з командним рядком. Коди завершення програм. Обробка помилок.

  3. Формати файлів, що виконуються. Створення та використання бібліотек.

  4. Файлова підсистема. Робота с файлами. Примітиви доступу до файлів в системі UNIX. Системні виклики open, close, read, write, lseek. Дописування даних в кінець файла.

  5. Файли в багатокористувачевому середовищі. Користувачі и права доступу. Права доступу и режими файлів. Додаткові права доступу. Маска створення файла і системний виклик umask. Зміна прав доступу (виклик chmod). Зміна володаря за допомогою виклику chown. Файли с декількома іменами. Знищення файла. Отримання інформації про файл.

  6. Каталоги. Реалізація каталогів. Права доступу до каталогів. Використання каталогів при програмуванні. Створення та знищення каталогів.

  7. Відкриття та закриття каталогів. Читання каталогів. Поточний робочий каталог. Зміна робочого каталогу за допомогою виклику chdir. Виявлення імені поточного робочого каталогу. Оббіг дерева каталогів

  8. Пристрої. Драйвери пристроїв. Файловий інтерфейс. Файли блокових і символьних пристроїв. Апаратні пристрої. Спеціальні пристрої. Пристрої /dev/null, /dev/zero, /dev/full/. Пристрої генерування випадкових чисел. Пристрої зворотного зв'язку.

  9. Основи управління процесами. Структури данних процесу. Принципи управління пам’яттю. Створення процесів. Системний виклик fork. Запуск нових програм за допомогою виклику ехес. Сімейство викликів ехес. Сумісне використання викликів ехес і fork.

  10. Синхронізація процесів. Системний виклик wait. Очікування завершення конкретного нащадка: виклик waitpid. Зомбі-процеси и передчасне завершення програми.

  11. Атрибути процесу. Ідентифікатор процесу. Системні виклики для отримання інформації про процес. Групи процесів и ідентифікатори групи процесів. Зміна групи процесу. Сеанси и ідентифікатор сеансу. Пріоритети процесів: виклик nice.

  12. Сигнали и системні виклики. Процедури sigsetjmp и siglongjmp. Блокування сигналів. Посилка сигналів. Посилка сигналів другим процесом: виклик kill. Посилка сигналів самому процесу. Системний виклик pause.

  13. Синхронізація процесів. Зомбі-процеси і передчасне завершення програми. Асинхронне видалення дочірніх процесів.

  14. Межпроцесна взаємодія за допомогою програмних каналів. Канали. Канали на рівні команд. Використання каналів в програмі. Розмір каналу. Закриття каналів. Запис та читання без блокування. Іменовані канали (FIFO). Програмування за допомогою каналів FIFO.

  15. Додаткові методи межпроцесної взаємодії. Блокування записів за допомогою виклику fcntl. Семафори.

  16. Принципи апаратури введення-виведення. Програмні рівні введення-виведення. Дослідження введення-виведення.

1.3Контролюючі заходи


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

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


2ТЕОРЕТИЧНІ МАТЕРІАЛИ

2.1Програмний інтерфейс UNIX

2.1.1Системні виклики


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

Системні виклики документовані в розділі 2 електронного довідника. (man 2 kill). У середовищі програмування UNIX вони визначаються як функції C, незалежно від фактичної реалізації виклику функції ядра ОС. В UNIX використаний підхід, при якому кожен системний виклик має функцію (функції) з тим же ім'ям, що зберігається в бібліотеці мови C. Ці функції виконують необхідне перетворення аргументів і викликають необхідну процедуру ядра. У цьому випадку бібліотечний код виконує тільки роль оболонки, у той час як фактичні команди, розташовані в ядрі ОС.

Крім системних викликів програмістові пропонується великий набір функцій загального призначення. Вони не є точками входу в ядро ОС, хоча в ході виконання багато хто з них (але не все) виконують системні виклики. Ці функції зберігаються в системній бібліотеці С і поряд із системними викликами становлять середовище програмування ОС UNIX (документовані в розділі 2 електронного довідника).

Прототипи необхідних функцій наведені у додатку А.


2.1.2Основні бібліотеки UNIX й їхні заголовні файли


Використання системних функцій звичайно вимагає включення в текст програми файлів заголовків, що містять визначення функцій. Більшість системних файлів заголовків розташовані в каталогах /usr/include або /usr/include/sys.

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



Середовище програмування UNIX визначається декількома стандартами й може незначно розрізнятися для різних версій системи. Зокрема стандарти ANSI З, POSIX.1 й XPG4 визначають назви й призначення файлів заголовків, наведених у таблиці 1.
Таблиця 1 - Стандартні файли заголовків

Файл

заголовка

Призначення

1

2



Містить прототип функції assert, що використовується для діагностики



Містить визначення, використовувані для файлових архівів cpio



Містить визначення символьних типів, а також прототипи функцій класів символів



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



Містить визначення кодів помилок



Містить прототипи системних викликів fcntl, open, creat, а також визначення констант і структур даних, необхідних при роботі з файлами



Містить визначення констант, необхідних для операцій з дійсними числами



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



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



Містить визначення язикових констант дня тижня, назва місяця, а також прототип функції langinfo()



Містить визначення констант, що визначають значення обмежень для даної реалізації



Містить визначення констант, які використовуються для створення середовища користувача, що залежить від язикових і культурних традицій







Продовження таблиці 1

1

2



Містить визначення математичних констант



Містить визначення для каталогів повідомлень, а також прототипи функцій catopen й catclose




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



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



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



Містить прототипи функцій переходу, а також визначення пов'язаних з ними структур даних



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



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



Містить стандартні визначення



Містить визначення стандартної бібліотеки введення-виведення



Містить визначення стандартної бібліотеки



Містить прототипи функцій роботи з рядками



Містить визначення, використовувані для файлових архівів



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



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



Містить визначення констант і прототип системного виклику ulimit() для керування обмеженнями, що накладають на процес



Містить визначення системних символьних констант, а також прототипи більшості системних викликів



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



Продовження таблиці 1



1

2



Містить визначення, що ставляться до системи взаємодії між процесами (IPC)



Містить визначення, що ставляться до системи IPC (повідомлення)



Містить визначення констант і прототипи системних викликів для управління розмірами ресурсів, доступних процесу



Містить визначення, що ставляться до системи IPC (семафори)



Містить визначення, що ставляться до системи IPC(поділювана пам’ять)



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



Містить визначення структур даних і прототип системного виклику times(), службовця для одержання статистики виконання процесу



Містить визначення примітивів системних даних



Містить визначення прототип системного виклику uname(), використовуваного для одержання імен системи



Містить визначення констант і прототипи системних викликів, використовуваних для синхронізації родинних процесів

2.1.3Помилки системних викликів


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

  • У системі можуть скінчитися ресурси (або ж програма може вичерпати ліміт ресурсів, накладений на неї системою). Наприклад, програма може запросити занадто багато пам'яті, записати надто великий обсяг даних на диск або відкрити надмірну кількість файлів одночасно.

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

  • Аргументи системного виклику можуть виявитися невірними або через помилково введені користувачем дані, або через помилку самої програми. Наприклад, програма може передати системному виклику неправильну адресу пам'яті або недійсний дескриптор файлу. Інший варіант помилки - спроба відкрити каталог замість звичайного файлу або передати ім'я файлу системному виклику, що очікує ім'я каталогу.

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

  • Виконання системного виклику іноді переривається зовнішніми подіями, наприклад, при отриманні сигналу. Це не обов'язково означає помилку, але відповідальність за перепуск системного виклику покладає на програму.

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

Більшість системних викликів у випадку збою повертає значення -1. (Іноді використаються інші угоди. Наприклад, функція malloc() при виникненні помилки повертає нульовий покажчик.) Зазвичай цієї інформації досить для того, щоб вирішити, чи варто продовжувати виконання програми. Але для більш спеціалізованої обробки помилок необхідні додаткові відомості.

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

З метою забезпечення безпечної роботи потоків змінна errno реалізована у вигляді макросу, але до неї можна звертатися як до глобальної змінної.

Коди помилок є цілими числами. Можливі значення задаються макроконстантами препроцесора, які, за існуючою згодою, записуються прописними буквами й починаються з літери "E", наприклад EACCES й EINVAL. При роботі зі значеннями змінної errno варто завжди використовувати макроконстанти, а не дійсні числові значення. Всі ці константи визначені у файлі . Розшифровка кодів помилок наведена у додатку Б.

У стандартній бібліотеці мови С є зручна функція strerror(), що повертає строковий еквівалент коду помилки. Ці рядки можна включати в повідомлення про помилки. Оголошення функції перебуває у файлі та виглядає наступним чином:

#include

char *strerror(int errnum);

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

#include

void perror(const char *s);

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

fd = open("inputfile.txt", O_RDONLY);

if (fd == -1)

{

/* Відкрити файл не вдалося.



Виведення повідомлення про помилку

та завершення роботи. */

fprintf (stderr, "error opening file: %s\n",

strerror(errno));

exit (1);

}

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


2.1.4Питання для самоперевірки


  1. Що таке системний виклик? Чим він відрізняється від функцій стандартної бібліотеки?

  2. Яким чином можна отримати інформацію про системний виклик?

  3. Як включаються в програму файли заголовків?

  4. Де зберігаються файли заголовків?

  5. В яких ситуаціях виникають помилки системних викликів?

  6. Яким чином системний виклик інформує про помилки?

  7. Для чого використовується змінна errno?

  8. Які функції використовуються для полегшення виведення повідомлень про помилки?

следующая страница >>


izumzum.ru