Очень застрял на C проекте! Нужна помощь по следующим требованиям, любая помощь приветствуется:
Структура IORB: Его тип данных определяется как:
typedef struct iorb {
int base_pri;
struct iorb *link;
char filler[100];
} IORB;
где base_pri
- целое число, представляющее базовый приоритет блока; link
- указатель на следующий блок; filler
- это описание блока, который непрозрачен для процедуры сортировки.
Отдельный исходный файл для функции вычисления приоритета:
void sortList(IORB * head, int(*prio)(int));
где head - указатель на связанный список, а prio - приоритетная вычислительная функция. Реализация sortList () должна находиться в отдельном исходном файле от любого кода драйвера. При необходимости включите другие функции, необходимые для тестирования, такие как построение и отображение списка, в том же исходном файле кода драйвера.
Приоритетные вычисления функция:
Для простоты приоритеты планирования будут вычисляться из одного целочисленного поля (с именем base_pri
) в каждом IORB. Вы можете разработать любой вычислительный метод. Функция должна возвращать целое число, представляющее приоритет планирования.
Алгоритм сортировки:
Вы должны использовать алгоритм сортировки выбора для сортировки список в порядке возрастания. Этот алгоритм находит минимальное значение, меняет его на значение в первой позиции и повторяет эти шаги для остальной части списка.
Сортировка по месту:
Список должен быть отсортирован по месту. Это означает, что ТОЛЬКО ссылки в списке могут быть изменены, ни один блок IORB не может быть скопирован в другое место в памяти.
Построение и отображение списка:
Список изначально создается функцией buildList (). Для каждого IORB в списке его базовое pri pri приоритета планирования вычисляется генератором случайных чисел. Вы можете назначить любую строку Фллер. Список отображается функцией displayList (), которая показывает описание, базовый приоритет и приоритет каждого элемента.
Фон: Этот проект предназначен для имитации обработка дискового ввода / вывода в системном программировании по связанному списку. Отдельная операция ядра Unix обрабатывает дисковый ввод-вывод, позволяя независимым пользовательским процессам помещать блоки запроса ввода-вывода (IORB) в связанный список. Порядок, в котором эти запросы обслуживаются, зависит от их приоритета планирования. Стратегия планирования является адаптивной, что просто означает, что ядро может выполнять разные вычисления в разное время, чтобы вычислить значение приоритета для каждого элемента списка. Вам необходимо написать C программу для Linux, которая разрабатывает, реализует и тестирует функцию сортировки: sortList (). Первым аргументом функции является указатель на заголовок списка. Второй аргумент - это функция вычисления приоритетов, которая вычисляет и возвращает приоритет планирования. Функция сортировки будет сортировать такой список в соответствии с приоритетом планирования каждого элемента. Поскольку в ОС будут другие структуры с указателями на блоки IORB, список должен быть отсортирован по месту.