Mémoire dynamique dans les systèmes durs en temps réel

Il existe une classe d'applications en temps réel pour laquelle il est difficile de prédire statiquement le besoin d'allocation de mémoire au moment de l'exécution. Cette classe comprend, par exemple, les implémentations intégrées des piles de certains protocoles de communication, où le comportement et la distribution des ressources sont déterminés en partie par l'activité d'autres agents sur le réseau. L'approche classique dans de tels cas est d'utiliser des gestionnaires de mémoire de bloc qui allouent des fragments d'une taille fixe (comme cela a été fait, par exemple, dans LwIP). Cette approche impose des contraintes fonctionnelles et de qualité indésirables à la mise en œuvre. Dans cet article, je propose le point de vue selon lequel les allocateurs traditionnels (non-blocky) sont à juste titre privés de l'attention des développeurs de systèmes en temps réel, je partage mes réflexions sur les questions pertinentes, je me plains de la vie,et je propose d'améliorer la situation.



( – . )


, . , FreeRTOS O(1), , O(n) . ChibiOS (1, 2). , , ; , . , .


, , , ( , ). : O(log n) , O(n), .


. , , , . , . NuttX, (best fit), . .


, , , , , .


. , , API , . , , :


//     :
struct FragmentedBuffer
{
    struct FragmentedBuffer* next;
    uint8_t data[];
};

// ... :
uint8_t* data;

, Buddy Allocator, Half-Fit, Two-Level Segregated Fit (TLSF). O(1) ( Buddy Allocator , , ). J. Herter J. Robson – , – “Timing-Predictable Memory Allocation In Hard Real-Time Systems” “Worst case fragmentation of first fit and best fit storage allocation strategies”, .


. . , , ( - ) . 26–33 , , H, , :


H=2M(1+log2n)


M – , n – .


. , , . , H = M (n — 2), .


, , () , . , StackOverflow, , . (500 C99/C11), , .


: https://github.com/pavel-kirienko/o1heap.


, . , , , . ; , :


  • : H [KiB] M [KiB] n [KiB] 16 .
  • : , MiB.

H , , . . H, , , . H , . , . (Embox?), .


. NuttX , , : "I considered porting TLSF at one point, but overall it's low on my list of NuttX improvements I'd explore if I actually had time". .

Source: https://habr.com/ru/post/undefined/


All Articles