Практические работы по курсу «Операционные системы»
Мониторы
Требуется безопасно и эффективно реализовать монитор с двумя потоками: потоком-поставщиком и потоком-потребителем. Поток-поставщик должен с задержкой в одну секунду инициировать условное событие, о чём должен выводить сообщение на экран. Поток-потребитель должен это условное событие получать, о чём также должен сообщать на экране. В итоге на экране должна появляться серия чередующихся сообщений об отправлении события и его обработке. Сообщения не должны нарушать очерёдность. Ожидание события должно происходить с минимальным потреблением процессорного времени, т. е. быть практически равным нулю. Подразумевается, что условное событие может содержать несериализуемые данные (скажем, передаётся экземпляр класса по указателю).
Безопасная обработка сетевых подключений и сигналов
Требуется подготовить безопасную реализацию серверного процесса,
который совмещает обработку соединений TCP/IP с обработкой сигналов
(можно выбрать, скажем, сигнал SIGHUP
).
Приложение должно:
- Принимать соединения на некоторый порт, сообщать о новых соединениях на терминал, одно соединение оставлять принятым, остальные закрывать сразу после подключения.
- При появлении любых данных в соединении выводить сообщение на терминал (для простоты достаточно вывести только количество полученных данных).
- При получении сигнала выводить сообщение на терминал.
Фактически, работа сводится к правильному вызову функции pselect()
,
но все действия должны быть выполнены в предельно безопасном виде,
исключающем любые race condition.
Модуль ядра Linux
- Полезная презентация с подсказками
- Полезный рассказ с подсказками
- Документация для разработчиков модулей ядра
Часть первая
Требуется подготовить модуль для загрузки в ядро Linux. Модуль должен:
- сопровождаться
Makefile
для сборки; - оформляться в виде файла
*.ko
; - загружаться командой
insmod
и выгружаться командойrmmod
; - при загрузке выводить в
dmesg
строку «Welcome to the Tomsk State University»; - при выгрузке выводить в
dmesg
строку «Tomsk State University forever!».
Часть вторая
Модуль, подготовленный на первой части работы, следует дополнить функционалом,
который позволял бы при своей загрузке создавать файл tsulab
в каталоге /proc
.
Содержимое этого файла будет определяться индивидуальным заданием для каждого учащегося, которое он будет получать при сдаче первой части работы.