Программирование в Linux
Кафедра информатики и автоматизации научных исследований
Специальность: Прикладная информатика
Преподаватель: Слободской В.В.
Целями освоения дисциплины (модуля) «Программирование в Linux» являются ознакомление студентов с операционной системой Linux и особенностями программирования в ней.
Курс содержит набор базовых знаний, необходимых для начала программирования в операционной системе Linux, включая ввод текста программы, его компиляцию и отладку. Также рассматриваются более сложные аспекты программирования в операционной системе Linux, такие как написание make-файлов, создание и использование разделяемых библиотек, использование многопоточности и возможности синхронизации потоков, изучение особенностей создания и завершения процессов.
К дисциплинам, для которых освоение данной дисциплины необходимо как предшествующее, относится дисциплина базовой части профессионального цикла «Операционные системы».
В результате освоения дисциплины обучающийся должен:
Знать: основные принципы работы в операционной системе Linux.
Уметь: набирать код программы, используя один из доступных в операционной системе Linux редакторов, компилировать его компилятором gcc, а также уметь отлаживать программу с помощью отладчика gdb.
Владеть: основными принципами создания make-файла и эффективного использования утилиты make, а также использования разделяемых библиотек.
Содержание
1. ОПЕРАЦИОННАЯ СИСТЕМА LINUX И НАБОР ТЕКСТА В НЕЙ. Введение в ОС Linux, история создания. Обзор текстовых редакторов Linux. Текстовый редактор vi. Основные команды vi. Написание простейшей программы с помощью редактора vi.
2. КОМПИЛИРОВАНИЕ И ОТЛАДКА ПРОГРАММЫ. Компилирование и сборка программы. Отличия в структуре приложения на ОС Windows и ОС Linux. Компилятор gcc. Основные опции компиляции. Компилирование простейшей программы компилятором gcc. Отладчик gdb. Основные команды отладчика gdb. Использование отладчика gdb для отладки программы.
3. АВТОМАТИЗАЦИЯ ПРОЦЕССА ПОСТРОЕНИЯ ПРОГРАММЫ С ПОМОЩЬЮ MAKE-ФАЙЛОВ. Утилита make, её возможности. Основные принципы написания make-файла. Базовые правила make-файла. Автоматизация процесса построения программы с помощью утилиты make.
4. ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ В ОС LINUX. Принцип разделяемой библиотеки. Создание и использование разделяемых библиотек в ОС Linux. Знакомство с процессами в Linux. Создание и завершение процессов. Сигналы. Реализация потоков в Linux. Создание и отмена потоков. Синхронизация потоков и критические секции. Сравнение процессов и потоков.
Лабораторный практикум
- Написать, скомпилировать и запустить программу, печатающую на консоль “Hello, world!”.
- Написать, скомпилировать и запустить программу, которая для любой входной строки-предложения печатает: количество слов, количество разных используемых букв и количество использованных небуквенных символов. Реализовать три различных функции, вычисляющих данные характеристики. Каждую функцию поместить в отдельный исходный файл.
- Написать make-файл для компилирования лабораторной работы 2.
- Вынести функции, печатающие характеристики предложения, в разделяемую библиотеку. При построении итогового приложения использовать make-файлы. Код приложения и разделяемой библиотеки должны находиться в разных подпапках. Предусмотреть возможность построения как разделяемой библиотеки, так и приложения одним вызовом утилиты make.
- Написать две программы. Одна при запуске печатает свой идентификатор процесса и ждёт ввода с консоли. Вторая принимает на вход идентификатор процесса и завершает процесс с данным идентификатором. Предусмотреть печать корректных сообщений об ошибках.
- Обновить лабораторную работу 5 так, чтобы при завершении процесса первое приложение печатало строку «I was killed…».
- Написать программу, которая принимает на вход два натуральных числа и печатает числа, сумма которых равна количеству простых чисел в промежутке от 1 до первого входного числа, при этом распараллелив вычисление на количество потоков, переданных в виде второго числа. Печатаемые числа – результат вычислений каждого потока.
- Обновить лабораторную работу 7 таким образом, чтобы она безошибочно печатала итоговую сумму каждого потока.
Литература
а) основная литература:
- М. Митчелл, Дж. Оулдем, А. Самьюэл. Программирование для Linux. Профессиональный подход.
- М.К. Джонсон, Э.В. Троан. Разработка приложений в среде Linux.
б) дополнительная литература:
- GCC reference manual.
- S. Goldt, S. Meer, S. Burkett, M. Welsh. Linux Programmer’s Guide.
- Linux man pages.
Отчетность
- Семестр 7: Зач