Задание по написанию модуля ядра

Задание является факультативным. Его исполнение не является обязательным для успешной сдачи экзамена. Успешная сдача задания освобождает студента от сдачи экзамена.

Формулировка задания

Реализовать модуль ядра, который регистрирует символьное устройство с именем “math”. Устройство должно предоставлять возможность взаимодействия с ним с помощью системного вызова ioctl(int fd, unsigned int cmd, unsigned long arg). Первый аргумент — файловый дескриптор, второй — номер команды, третий — адрес области памяти в пространстве пользователя (для иных устройств это произвольный аргумент). Область памяти должна содержать массив элементов типа int. Обработчик каждой команды должен считывать из адресного пространства пользователя аргумент(-ы), вычислять результат и записывать его в область памяти, следующую за последним аргументом. К примеру, MATH_IOCTL_SUM считывает аргументы по адресам arg и arg+sizeof(int), а записывает результат по адресу arg+2*sizeof(int).

Это устройство должно отвечать на несколько команд системного вызова ioctl(2):

Требования к модулю

Материалы к заданию

Ссылка на архив: ftp://dione.intelib.org/pub/segoon/math.tar.gz

Советы

Сдача решений

Решённое задание отправляйте на почту segooon AT gmail.com.

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

Второе задание по написанию модуля ядра

Задание является факультативным. Его сдача не влияет ни на сдачу экзамена, ни на получение автомата.

Формулировка задания

Реализовать модуль ядра, который регистрирует символьное устройство с именем “prime”. Устройство должно предоставлять возможность взаимодействия с помощью системного вызова read.

При чтении с помощью системного вызова read устройство выдаёт последовательность простых чисел типа uint64_t. Устройство сохраняет информацию о том, сколько чисел было считано и при последовательных вызовах read выдаёт продолжение прерванной последовательности. Вызов read с размером буфера, не кратным 8 (sizeof(uint64_t)), обрабатывается как ошибочный.

Возможно использование устройства более чем одним пользователем. При этом каждый пользователь считывает свою последовательность простых чисел независимо от других пользователей.

Работа с очень большими числами не должна значительно задерживать обработку сигналов. При получении сигнала процесс не должен блокироваться на длительное время.