Dynamischer Speicher in harten Echtzeitsystemen

Es gibt eine Klasse von Echtzeitanwendungen, für die es schwierig ist, den Bedarf an Speicherzuweisung zur Laufzeit statisch vorherzusagen. Diese Klasse umfasst beispielsweise eingebettete Implementierungen der Stapel einiger Kommunikationsprotokolle, bei denen das Verhalten und die Verteilung von Ressourcen teilweise durch die Aktivität anderer Agenten im Netzwerk bestimmt werden. Der klassische Ansatz in solchen Fällen besteht darin, Blockspeichermanager zu verwenden, die Fragmente fester Größe zuweisen (wie dies beispielsweise in LwIP geschehen ist). Dieser Ansatz führt zu unerwünschten Funktions- und Qualitätsbeschränkungen bei der Implementierung. In diesem Artikel schlage ich den Standpunkt vor, dass traditionelle (nicht blockige) Allokatoren zu Unrecht der Aufmerksamkeit von Entwicklern von Echtzeitsystemen beraubt werden. Ich teile meine Gedanken zu relevanten Themen, ich beschwere mich über das Leben.und ich schlage vor, die Situation zu verbessern.



( – . )


, . , 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