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

Основне призначення лабораторних робіт полягає у навчанні студентів методам роботи з матеріалом курсу шляхом розв’язання конкретних задач. Як приклад розглянута операційна система Linux. Виконання робіт дозволяє закріпити та поглибити теоретичні знання і вивчити середовище програмування ОС Linux.

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

Кожний студент виконує кожну роботу самостійно у відповідності з варіантом індивідуального завдання, визначеним викладачем.

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

Вимоги до звітів кожного студента:

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

2. Звіт по кожній лабораторній роботі повинен містити:

а) номер лабораторної роботи,

б) тему лабораторної роботи,

в) формулювання завдання,

г) вихідні данні для вибраного варіанту індивідуального завдання,

д) опис виконання роботи з поясненнями окремих кроків.

Лабораторна робота №1

Тема: Виконання програм в операційній системі Linux.

Мета роботи: вивчення середовища програмування Linux. Компіляція програм та створення виконуваного файлу.

Основні положення. Поняття операційної системи.

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

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

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

Можна дати таке означення операційної системи.

Операційна система – це програмне забезпечення, що реалізує зв'язок між прикладними програмами і апаратними засобами комп'ютера.

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

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

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

керування процесами і потоками;

керування пам'яттю;

керування введенням-виведенням;

керування файлами та підтримка файлових систем;

мережна підтримка;

забезпечення захисту даних;

реалізація інтерфейсу користувача.

Архітектура ОС визначає набір її компонентів, а також порядок їхньої взаємодії один з одним та зовнішнім середовищем.

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

Операційна система безпосередньо взаємодіє з апаратним забезпе-ченням комп'ютера. Для зв'язку з апаратним забезпеченням в ОС виділяється рівень абстрагування від устаткування.

Операційна система взаємодіє із прикладними програмами. Вона надає набір системних викликів для доступу до функцій, реалізованих у ядрі. Для прикладних програм системні виклики разом із засобами системних бібліотек доступні через інтерфейс прикладного програмування (API).

Приклад виконання програми

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

Запуск С-програми.

Функція main ( ) є першою функцією, визначеною користувачем (тобто описаною явно у тексті програми), якій буде передано керування після створення відповідного оточення програми, що запускається на виконання. Ця функція визначається наступним чином:

main (int argc, char argv[ ], char envp[ ]).

Перший аргумент (argc) визначає число параметрів, які передані програмі, включно з її іменем.

Вказівники на кожний із параметрів передаються в масиві argv[ ], тобто через argv[0] адресується ім'я програми, argv[1] вказує на перший параметр і т.д.

Масив envp[ ] містить вказівники на змінні оточення, що передаються програмі. Стандарт ANSI C, який ми будемо використовувати, розглядає лише два перших аргумента функції main ( ) – argc та argv.

В операційній системі Linux для компіляції програм, написаних на мові C\C++, використовується компілятор GNU C\C++.

Для компіляції C програми, що складається з одного файлу, використовується компілятор cc або gcc, а для компіляції програми, написаної на C++, використовується компілятор g++.

Історично склалося так, що якщо задати рядок компіляції cc proba.c, то результатом буде виконуваний файл a.out. Це ім'я підставляється автоматично, якщо явно не вказано ім'я вихідного файлу.

Для задання імені вихідного файлу використовується опція - o <ім'я файлу>. При цьому тип файлу вибирається автоматично. Якщо перед ім'ям компільованого файлу записується - c, то створюється об'єктний вихідний файл з розширенням .o, інакше створюється виконуваний файл.

Виклик cc також використовується при необхідності зібрати виконуваний файл з декількох об'єктних. Для цього необхідно викликати його наступним чином: cc <об'єктні модулі> - o <ім'я виконуваного файлу>.

Якщо програма використовує додаткові бібліотеки, виникає необхідність вказівки додаткових шляхів пошуку заголовних і бібліотечних файлів. Для цього використовуються опції - I<шлях> і - L<шлях>. При необхідності можуть бути присутніми декілька опцій - I і - L.

Опція - g призначена для включення у виконуваний файл налагоджувальної інформації. Це дозволить прив'язати точки установки до відповідних файлів з початковим текстом. Згодом налагоджувальну інформацію можна видалити з виконуваного файлу з використанням утиліти strip.

Розглянуті приклади написані на мові С++, але для простоти включають мінімум засобів цієї мови, що відрізняються від класичного Сі.

Компіляція прикладів виконувалася в середовищі операційної системи Linux.

Виклик компілятора С++:

g++<об'єктні модулі> - o <ім'я виконуваного файлу>

Для відладки програм використовується стандартний відладчик gdb. Формат його виклику наступний:

gdb <виконуваний файл> [<core-файл>|<pid процесу>];

core-файл – файл, створюваний при аварійному виході програми при виникненні критичної помилки. Якщо core-файл вказаний, він буде автоматично розібраний відладчиком gdb, і можна буде визначити, в якій точці програми сталася помилка. Якщо вказаний pid процесу, то відладчик підключиться до цього процесу.

Розглянемо команди відладчика gdb.

b <номер рядка> чи b <ім'я початкового модуля>:<номер рядка> - встановлює точку останову в заданому рядку у вказаному або поточному модулі;

r - запускає програму на виконання;

n - виконує черговий рядок програми без входу у функцію;

s - виконує черговий рядок програми з входом у функцію;

p <ім'я змінної> - виводить вміст змінної;

q - вихід з відладчика.

Існує декілька способів завершення програми. Основні способи – це повернення із функції main ( ) та виклик функції exit ( ), обидва призводять до завершення виконання задачі.