FreeBSD - как создать связанные списки в ядре? - PullRequest
0 голосов
/ 13 июля 2011

Я делаю проект прямо сейчас, и проект должен манипулировать связанными списками в ядре. В проекте будет реализован «игрушечный» механизм блокировки, в котором все блокировки находятся в связанном списке (ах). Пожалуйста, помогите мне в следующих вопросах:

1) Как создать связанный список в ядре? Могу ли я использовать функции в? Или просто malloc () и т. Д.?

2) В этом проекте блокировки сгруппированы по «имени группы блокировок». Означает ли это, что должно быть несколько связанных списков, и каждый связанный список представляет «группу блокировок»? Спасибо!

1 Ответ

2 голосов
/ 13 июля 2011

1) queue (3) man-страница документирует некоторые очень полезные макросы в sys / queue.h, реализуя списки и хвостовые очереди.Этот заголовок также доступен в ядре.

Распределение памяти в ядре задокументировано на malloc (9) справочной странице.Обычно он похож на пользовательский уровень malloc, но с дополнительным параметром type , который полезен для поиска утечек памяти.Ваш код должен выглядеть следующим образом:

MALLOC_DEFINE(M_MYMALLOC, "mydata", "Some data");
struct foo {
    SLIST_ENTRY(foo) chain;
};
struct foo *bar = malloc(1000, M_MYMALLOC, M_WAITOK);
SLIST_INSERT_HEAD(&head, bar, chain);
SLIST_REMOVE_HEAD(&head, chain);
free(var, M_MYMALLOC);

2) Трудно ответить на этот вопрос, не зная, что означает «группировка» в контексте вашего проекта.

...