Билет на экзамене по дисциплине «Операционные системы семейства UNIX и сетевые технологии» состоит из двух теоретических и одного практического вопроса. Экзамен проводится письменно. Каждое из трех заданий экзамена оценивается в двадцать баллов.
При ответе на теоретические вопросы студент должен продемонстрировать не только достаточный уровень компетентности в рамках рассматриваемого вопроса, но и опыт личной работы в рамках темы вопроса. Оценивается демонстрация самоподготовки студента, выражающаяся в собственных суждениях, сведениях, почерпнутых в ходе самостоятельного изучения вопроса в литературе, технической документации, электронных ресурсах, форумах и так далее.
При решении практических заданий студент должен представить текст скрипта на языке программирования Python либо скриптового языка программирования bash, пояснения алгоритма работы, а также описание всех параметров, которые принимает скрипт (если таковые присутствуют) и описание формата вывода скрипта (если таковой присутствует). В связи с письменным проведением экзамена, при проверке правильности решения практического задания, в первую очередь будет оцениваться грамотность алгоритма, знание команд Linux и Bash, некритичные опечатки, приводящие к неработоспособности скрипта допускаются.
-
Понятие операционной системы, выполняемые ей функции.
-
Порядок загрузки компьютера и операционной системы.
-
История развития ОС.
-
Семейство операционных систем UNIX. Философия UNIX.
-
Сравнительная характеристика Linux и Windows.
-
Понятие системного вызова операционной системы.
-
Понятие виртуализации. Виртуальные машины.
-
Основные компоненты операционной системы. Разделение функций.
-
Понятие файловой системы. Функции, виды, характеристики.
-
Физические и логические диски. Разбиение жесткого диска для установки Linux.
-
Стандартная иерархия каталогов Linux.
-
Понятие ядра операционной системы. Пространство ядра и пользовательское пространство.
-
Командный интерпретатор операционной системы.
-
Управление оперативной памятью в современных ОС. Виртуальная память.
-
Работа ОС с внешними устройствами. Понятие драйвера устройства.
-
Многозадачность современных операционных систем.
-
Графический и текстовый интерфейс взаимодействия с ОС.
-
Источники установки программных приложений. Программные репозитории.
-
Способы установки программ в Linux.
-
Процессы в Linux. Функции, организация, управление.
-
Жизненный цикл процесса операционной системы.
-
Основные команды Linux для управления файлами.
-
Основные команды Linux для управления каталогами.
-
Основные команды Linux для управления файловыми системами.
-
Понятие пакета в Linux. Менеджеры пакетов.
-
Основные команды Linux для управления пакетами.
-
Основные команды Linux для управления процессами.
-
Типы файлов в Linux. Ссылки.
-
Основные команды для управления текстовыми потоками.
-
Основные команды для просмотра и редактирования текстовых файлов.
-
Регулярные выражения.
-
Встроенные и внешние команды bash.
-
Основные конфигурационные файлы Linux.
-
Командный интерпретатор bash. Структура команды.
-
Bash. Переменные и типы.
-
Bash. Условия.
-
Bash. Циклы.
-
Bash. Функции.
-
Переменные окружения в bash.
-
Основные команды Linux для управления пользователями и группами.
-
Суперпользователь root. Характеристика, особенности, функции, опасность.
-
Система прав доступа Linux. Структура и смысл прав доступа.
-
Организация хранения паролей пользователей в Linux.
-
Основные команды Linux для управления правами доступа.
-
Понятие компьютерных сетей. Общие принципы, организация.
-
Понятие сетевого ресурса. Классификация.
-
Семейство сетевых протоколов TCP/IP.
-
Адресация компьютеров в сети. IP, MAC адреса.
-
Удаленный доступ к командной строке. Протокол SSH.
-
SSH-ключи. Назначение, использование, генерация.
-
Понятие виртуальной сети. Виды виртуальных сетевых компонентов.
-
Трансляция сетевых адресов. Виды NAT.
-
Использование Linux для разработки. Стандартные программные средства.
-
Интерпретатор Python. Использование, версии. Понятие виртуального окружения, настройка, использование.
-
Структура проекта на Python. Организация модулей. Файл зависимостей.
-
Системы контроля версий. Примеры, назначение, общие понятия.
-
Общий алгоритм работы с СКВ Git. Инициализация репозитория, добавление файлов, коммиты.
-
Работа с ветвлением в Git. Назначение веток. Создание, переключение, объединение веток. Разрешение конфликтов слияния.
-
Работа с удаленными репозиториями. Клонирование и форк репозиториев. Отправка и получение изменений в удаленный репозиторий.
-
Современные методологии работы с Git в командном проекте. GitFlow.
-
Понятие сетевого сокета. Применение, виды, схема взаимодействия.
-
Блокирующие операции при обмене через сокеты. Возможные ошибки. Таймауты.
-
Транспортные протоколы TCP и UDP. Принципы работы, сравнение.
-
Клиент-серверное взаимодействие.
-
Реализация сокетов в языке Python. Модуль socket.
-
Понятие программного потока. Процессы и потоки.
-
Асинхронное программирование. Основные понятия. Параллелизм и конкуррентность.
-
Блокирующие и неблокирующие операции.
-
Алгоритмы, ограниченные процессором и вводом-выводом. Основные характеристики, особенности выполнения и распараллеливания.
-
Особенности реализации многопоточности в Python. Модуль threading.
-
Особенности организации многопроцессорной программы в Python. Модуль multiprocessing.
-
Асинхронное программирование в Python. Использование asyncio.
-
Параллельное программирование. Достоинства и недостатки.
-
Понятие потокобезопасности. Причины, проблематика, способы обеспечения.
-
Алгоритм выполнения многопоточной программы. Блокировка потоков.
-
Доступ к общим ресурсам в многопоточной программе. Механизмы блокировки ресурсов модуля threading.
-
Работа с файловой системой в Python. Основные операции.
-
Понятие веб-технологий. Основные характеристики, история, назначение.
-
Программное обеспечение, используемое для веб-технологий. Виды, назначение, примеры.
-
Понятие URL: назначение, применение, состав.
-
Понятие веб-сервера. Цели, принцип работы.
-
Протокол HTTP. Принцип работы, назначение, основные понятия.
-
Настройка веб-сервера. Основные конфигурационные файлы, понятия.
-
Виртуальные хосты. Применение, настройка.
-
Понятие прокси-сервера. Настройка сервера nginx.
-
Основные принципы криптографии. Шифры. Исторические шифры.
-
Симметричное шифрование. Примеры алгоритмов, общая схема, виды.
-
Асимметричное шифрование. Примеры алгоритмов, общая схема, преимущества и недостатки.
-
Алгоритмы хэширования. Примеры, назначение.
-
Протокол TLS/SSL. Общая схема взаимодействия, назначение.
-
Понятие SSL-сертификата. Назначение. Самоподписанные сертификаты. Центры сертификации.
-
FTP-сервер. Назначение, общая схема работы. Обеспечение безопасности.
-
Настройка FTP-сервера в Linux. Основные понятия, конфигурационные файлы.
-
Email-сервер. Назначение, общая схема работы. Обеспечение безопасности.
-
Настройка Email-сервера в Linux. Основные понятия, конфигурационные файлы.
-
Основные принципы мониторинга сетевых служб. Мониторинг четырех золотых сигналов.
-
Прикладные интерфейсы программирования. Назначение, виды, реализация.
-
Развертывание приложений на удаленном сервере. Основные процессы. Понятие тестового и рабочего программных окружений.
-
Управление конфигурациями. Основные понятия, назначение. Примеры систем.
-
Контейнеризация программных приложений. Основные понятия, использование.
- Напишите программу, которая создает нить. Родительская и вновь созданная нити должны распечатать десять строк текста.
- Напишите простой эхо-сервер, использующий неблокирующие сокеты и клиент к нему.
- Напишите простой многопоточный загрузчик URL. Список URL скрипт принимает как аргументы командной строки.
- Реализуйте простой HTTP-клиент. Он принимает один параметр командной строки - URL. Клиент делает запрос по указанному URL и выдает тело ответа на терминал как текст.
- Напишите программу, которая вычисляет число Пи при помощи ряда Эйлера. Количество потоков программы должно определяться параметром командной строки.
- Дана функция calculate(x, y). Напишите программу, которая создает пул из 5 процессов и распределяет в этом пуле вычисление функции на промежутке х от 0 до 1 с шагом 0,1. у равняется 2 всегда.
- Напишите программу, которая проверяет все числа от 0 на простоту и выводит простые числа на экран по мере нахождения. Числа должны проверяться в различных потоках (или процессах, по выбору студента) Программа должна работать до тех пор, пока ее не остановит пользователь.
- Напишите программу, которая обходит все файлы в директории, переданной ей как параметр и выводит на экран имена тех, чей размер задан как второй параметр. Реализовать рекурсивный обход поддиректорий.
- Напишите программу, которая выводит на экран список номеров открытых портов на данной машине. Использовать команду netstat.
- Напишите программу, которая копирует файл с удаленного хоста в текущую папку по SSH. Имя файла и адрес хоста принимать как параметры.
- Сценарий должен вывести (на stdout) все числа, делящиеся на 12, в диапазоне от первого параметра до последнего. Если параметры заданы некорректно, скрипт должен вывести сообщение.
- Сценарий должен имитировать работу лототрона -- извлекать 5 случайных неповторяющихся чисел в диапазоне 1 - 50. Сценарий должен предусматривать как вывод на stdout, так и запись чисел в файл, кроме того, вместе с числами должны выводиться дата и время генерации данного набора.
- Напишите сценарий, который находил бы корни "квадратного " уравнения, вида: Ax^2 + Bx + C = 0. Сценарий должен получать коэффициенты уравнения A, B и C, как аргументы командной строки, и выводить корни. Если корней нет, вывод должен быть пустым.
- Написать скрипт, который выведет всех потомков процесса по его PID.
- Напишите скрипт, который и считает кол-во измененных в течении последних 3 дней файлов из каталога, переданного как параметр и выводит на экран.
- Написать скрипт, который выведет информацию о топ10 процессов по потреблению оперативной памяти.
- Написать скрипт, который выведет все файлы в домашней директории пользователя, измененные за последнюю неделю.
- Напишите сценарий, который принимает как аргументы список программ и устанавливает их в текущую систему. Сделайте возможность передать список программ через текстовый файл.
- Напишите скрипт, выводящий сообщение в случае, если в файле /etc/hosts есть записи относящиеся к адресам отличным от 127.0.0.1.
- Разработать сценарий, который ведёт в файле /tmp/run.log журнал запусков. При каждом запуске сценария в конец журнала должна добавляться строка с датой и временем запуска сценария, в стандартный вывод - фраза "Hello", в stderr - количество предыдущих запусков программы. Убедиться в правильности работы программы и выводе различных сообщений в различные потоки вывода.