Работа №4. Системные вызовы, процессы, компиляция программ¶
Цели¶
- Приобретение навыков по управлению процессами.
- Изучение системного вызова fork().
- Приобретение навыков написания и трансляции системного ПО на языке C.
- Изучение утилиты make и её использование для трансляции программ на языке C.
- Использование удалённых серверов для трансляции приложений.
- Изучение Docker и базового взаимодействия с ним.
- Изучение способов нестандартного представления информации.
Работа¶
Начало работы было положено выбором основной платформы для Docker, коей стала – Alpine, будучи выбранной из предложенных преподавателем: RancherOS, Ubuntu и Alpine. Главным критерием данного выбора оказался компактный размер этой системы, а также интерес к неизведанному.
docker run -it alpine:latest
Далее производится начальная настройка системы. Обновление:
apk update && apk upgrade
Установка рабочих программ:
apk add nano make gcc build-base openssh
Создание каталога work и скачивание в него рабочих файлов:
mkdir work
scp -r -P 6666 student@openit.guap.ru:/container/ABC-Linux/lab4/* work/
cd work
Теперь, после изучения полученных файлов, стало понятно, что Makefile имеет частую ошибку для системы make, а именно – пробелы вместо табуляции перед командами.
Оснавная же логическая ошибка содержится в lab4.c.
Она представляет собой сравнение результата функции с побочным эффектом fork() с числом вместо использования временной переменной, которой присвоено значение этого вызова. Эту ошибку можно и нужно исправить следующим образом:
Для синхронизации работы двух процессов, было решено в родительском процессе использовать команду sleep():
Итак, осталось лишь собрать ее из нашего Makefile.
Выполняем команды
make && make install && make clean
И запускаем программу из папки bin:
Сохраняем образ – для этого переходим в другой терминал и сначала ищем рабочий контейнер:
docker ps
В колонке ContainerID уникальное имя контейнера, вводим его в команде
docker commit *имя контейнера* *имя целевого каталога*
У меня данная команда выглядит так:
Получить и проверить итоговый контейнер можно по команде:
docker run -it everricvlvm/lb4
Выводы¶
Были исследованы процессы, системный вызов fork(), работа с Docker. Изучено взаимодействие удалённых сервисов меж собой, и как итог произведён данный отчёт на основе сетевых методик.