- •Анотація
- •1 Середовище програмування ос unix
- •1.1 Структура ос unix
- •1.2 Створення програми
- •1. Препроцесор
- •2. Транслятор
- •2.1 Компілятор
- •2.2 Асемблер
- •3. Редактор зв'язків(Компонувальником)
- •1.3 Формати об'єктних файлів
- •2 Використання файлової системи unix
- •2.1 Основні поняття
- •2.1.1 Типи та іменування файлів
- •2.1.2 Права доступу до файлів
- •2.1.3 Cистемные структури керування файлами
- •2.1.4 Системні виклики роботи з файлами
- •2.2 Створення та відкриття файлів
- •2.2.1 Системний виклик open
- •2.2.2 Системний виклик create
- •2.2.3 Системний виклик close
- •2.3 Читання та зипис в файл
- •2.3.1 Системний виклик read
- •2.3.2 Системний виклик write
- •2.4 Позіціонування у файлі
- •2.4.1 Системний виклик lseek
- •2.4.2 Системні виклики pread і pwrite
- •2.4.3 Системні виклики readv і writev
- •2.5 Контрольні операції над файлами
- •2.5.1 Системні виклики stat, fstat і lstat
- •2.5.2 Контроль прав доступу до файлу
- •2.5.3 Функція fcntl
- •2.5.4 Системні виклики truncate і ftruncate
- •2.6 Управління каталогами
- •2.6.1 Створення і видалення
- •2.6.2 Читання каталога
- •2.6.3 Зміна каталога
- •2.7 Управління посиланнями
- •2.7.1 Управління жорсткими посиланнями
- •2.7.2 Управління символічними посиланнями
- •2.7.3 Перейменування файлів і каталогів
- •3 Керування процесами ос unix
- •3.1 Процеси ос unix
- •3.2 Сисвизови створення процесів
- •3.3 Завершення процесу
- •3.4 Взаємодія процесів в ос unix
- •3.5 Сигнали
- •3.5.1 Поняття сигналу
- •3.5.2 Розробка оброблювачів сигналів
- •3.5.3 Генерація сигналів
- •3.5.4 Посилка сигналів іншим процесам
- •3.5.5 Блокування сигналів
- •3.5.6 Очікування сигналу
- •3.6 Трасування процесу.
- •3.7 Канали й fifo-Файли
- •3.7.1 Поняття
- •3.7.2 Створення каналу
- •3.7.3 Створення fifo-Файлів
- •3.8 Семафори
- •3.9 Повідомлення.
- •3.10 Поділювана пам'ять.
- •Література
- •Системне програмування Навчальний посібник
- •65082, Одеса, вул. Дворянська, 1/3
1.2 Створення програми
Розглянемо процес створення програми на (ANSI) С для ОС UNIX.
Розробка програми починається із створення початкових файлів, що містять текст на мові Сі. Текстові файли проводяться за допомогою одного з текстових редакторів, підтримуваних в середовищі UNIX.
Хоча UNIX-файлы не мають розширень, задаємо створеному файлу розширення для того, щоб його міг розпізнати компілятор.
.c для мови С і .сс (або .С) для С++.
При розробці програм, а тим більше - складних, використовується принцип модульності, розбиття складної програми на складові частини, кожна з яких може зберігатися в окремому файлі і готуватися окремо.
Після того, як текстовий файл створений, його потрібно відкомпілювати для отримання об'єктного файлу.
На малюнку показані етапи, які проходить програма від свого написання до виконання
Малюнок 1.3 – Процес підготовки програми до виконання
Процес підготовки виконуваного файлу роздільний на чотири фази:
1. Препроцесор
Здійснює вставку початкових текстів з інших файлів (#include)
Замінює входження імен, для яких визначена заміна (#define)
Здійснює умовну обробку початкового файлу (#ifdef)
Знищує коментарі
Вихідні дані препроцесора - це ще ASCII текст (Сі-оператори). Все, що робить препроцесор, це вставляє і замінює текст. На виході виходить нова редакція тексту (на мал. - НИМ'). У більшості систем програмування Макропроцесор суміщений з транслятором, і для програміста його робота і проміжний ЇМ' "не видні".
З одного боку макропроцесор "не розуміє" операторів мови програмування і "не знає" змінних програми, з іншою, всі оператори і змінні Макромови (тих виразів в програмі, які адресовані Макропроцесору) в проміжному ЇМ' вже відсутні і для подальших етапів обробки "не видні".
2. Транслятор
Трансляція - перетворення програми, представленої на одній мові програмування, в програму на іншій мові програмування, в певному значенні рівносильну першою.
Транслятори підрозділяються на Асемблери і Компілятори - залежно від початкової мови програми, яку вони обробляють. Асемблери працюють з Автокодами або мовами Асемблера, Компілятори - з мовами високого рівня.
2.1 Компілятор
Перетворить конструкції мови Сі в конструкції асемблера
Здійснює перевірку наявності синтаксичних помилок
Ця фаза займає більше всього часу
Мова Асемблера - мова програмування, яка є символьною формою машинної мови з поряд можливостей, характерних для мови високого рівня
2.2 Асемблер
Перетворить конструкції мови асемблера в машинні команди
Машинна мова - мова програмування, призначена для представлення програми у формі, що дозволяє виконувати її безпосередньо технічними засобами обробки інформації.
Фаза асемблера конвертує початкові тексти на мові асемблера в об'єктний код.
Об'єктний модуль - програмний модуль, що отримується в результаті трансляції початкового модуля.
3. Редактор зв'язків(Компонувальником)
Здійснює збірку main і інших об'єктних файлів в завантажуваний модуль
Проглядає бібліотеки для дозволу зовнішніх посилань
Здійснює підготовку виконуваної коди
Редактор Зв'язків сполучає разом всі об'єктні модулі, що входять в програму. Оскільки Редактор Зв'язків "бачить" вже всі компоненти програми, він має можливість обробити ті місця в об'єктних модулях, які містять зовнішні посилання. Результатом роботи Редактора Зв'язків є завантажувальний модуль.
Завантажувальний модуль - програмний модуль, представлений у формі, придатній для завантаження в оперативну пам'ять для виконання.
Завантажувальний модуль зберігається у вигляді файлу на зовнішній пам'яті.
4. Завантажувач.
Для виконання програма повинна бути завантажена в оперативну пам'ять. Іноді при цьому потрібна деяка додаткова обробка (наприклад, настройка адрес в програмі на ту область оперативної пам'яті, в яку програма завантажилася). Ця функція виконується Завантажувачем, який зазвичай входить до складу операційної системи.
Можливий також варіант, в якому редагування зв'язків виконується при кожному запуску програми на виконання і поєднується із завантаженням. Це робить Зв'язуючий Завантажувач. Варіант скріплення при запуску більш витратний, оскільки витрати на скріплення тиражуються при кожному запуску. Але він забезпечує:
велику гнучкість в супроводі, оскільки дозволяє міняти окремі об'єктні модулі програми, не міняючи решти модулів;
економію зовнішньої пам'яті, оскільки об'єктні модулі, використовувані в багатьох програмах не копіюються в кожен завантажувальний модуль, а зберігаються в одному екземплярі.
Варіант інтерпретації має на увазі прямого виконання початкового модуля. Інтерпретація - реалізація сенсу деякого синтаксично закінченого тексту, представленого на конкретній мові. Інтерпретатор читає з початкового модуля чергову пропозицію програми, переводить його в машинну мову і виконує. Всі витрати на підготовку тиражуються при кожному виконанні, отже, интепретируемая програма принципово менш ефективна, чим трансльована. Проте, інтерпретація забезпечує зручність розробки, гнучкість в супроводі і переносимість.