Параллельное динамическое управление памятью на AVR32 - PullRequest
0 голосов
/ 19 января 2012

Я занимаюсь разработкой программного обеспечения для встраиваемой системы студенческого спутника. Наш код представляет собой смесь C / C ++, работающую на 32-битном микроконтроллере AVR AT32UC3A3256S. Мы используем операционную систему FreeRTOS на оборудовании, которое работает нормально. У нас также есть необходимость в несколько специализированных схемах управления памятью из-за физической структуры памяти и концепции операций для миссии.

Я пытался использовать динамическую реализацию памяти, называемую dlmalloc, в основном из-за доступности mspaces, которая позволяет динамически распределять память по отдельным и отслеживаемым разделам. У меня есть некоторый код, который оборачивается вокруг dlmalloc, чтобы создавать mspaces в определенных местах в памяти и вызывать привязку выделений к этим mspaces в зависимости от задачи FreeRTOS, выполняющей запрос. Конечным продуктом является система управления памятью, которая выделяет объем памяти, выделенный данной задачей, и, если он превысил установленный лимит, сбросит задачу и освободит ее память.

Я создал тестовое задание, которое по сути является большой утечкой памяти, постоянно выделяя память, не освобождая ее. Действующая система управления памятью должна периодически сбрасывать эту задачу, поскольку она выходит за пределы своего лимита, освобождая всю память, которая в противном случае была бы утечка. Это прекрасно работает для одной выполняемой задачи, но не очень странно, если две одинаковые копии этой задачи выполняются одновременно, что позволяет мне полагать, что выделение памяти не является потокобезопасным.

Я окружил каждый вызов подпрограмм выделения памяти процедурами FreeRTOS, которые гарантируют, что только задача, выделяющая память, будет выполняться в течение всего времени запроса памяти. Мне кажется, это должно обеспечить необходимую безопасность потоков, но, очевидно, что-то еще не так.

Есть ли у кого-нибудь идеи о том, чего мне не хватает, чтобы сделать эту систему поточно-ориентированной, о том, как перенести dlmalloc на оборудование, которое я использую, о любых других одновременных распределителях памяти, которые я мог бы использовать, или о каких-либо советах ? Я могу предоставить гораздо больше информации, если это необходимо, но я не хочу, чтобы скопировать исходный пост больше, чем у меня уже есть.

...