pkernel kai clock()/malloc()/free() tailoring

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Mar 8 13:30:49 EET 2013


On 2013-03-08 01:45, Christos Houtouridis <hoo2.ch.pub at gmail.com> wrote:
> Αυτή τη στιγμή όταν ο πυρήνας ξεκινάει (καλείται από την main πχ)
> "ψάχνει" τις μεταβλητές που κάνει export το Link script _eram, _ebss,
> ..., _pulStack (δείτε διάγραμμα παρακάτω). Από ότι έχω καταλάβει το
> linker script τα βάζει όλα καλά και τακτοποιημένα, και μπορείς να
> δεσμεύσεις το χώρο (_eram - pulStack) για kernel stack.
>
> Αλλά.....όταν θές heap, κανεις Link με libc και κλήση της malloc, τότε
> οι μεταβλητές γίνονται allocate, μετά το  pulStack + STACK_SIZE. Το
> οποίο είναι μλκία(sorry) γιατί κόβει στη μέση τον ωραίο χώρο που
> είχαμε για kernel stack. Σας κάνω attach το script αν θέλετε, αλλά
> είναι το κλασικό script χωρίς να το έχω πειράξει καθόλου. Οπότε
> ερχόμαστε πάλι στην ίδια λύση. Ξέρει κανείς αν μπορώ να γράψω την δική
> μου malloc/free και να μην "χαλάσω" τη stdlib.h? Αν το κάνω αυτό τότε
> μπορώ να χρησιμοποιήσω αυτή τη malloc για να κάνω allocation μνήμη και
> για τα processes μου, ενώ τώρα έχω μια "μπακατέλα".

Ναι μπορείς.  Αυτό ακριβώς κάνει η libumem π.χ. για να αντικαταστήσει
την default malloc() / free() του συστήματος.  Και υπάρχει user level
port για αρκετά OS εδώ:

	https://github.com/gburd/libumem

Επειδή τα symbols για malloc, realloc, free είναι 'weak' μπορείς να
φορτώσεις με το χέρι τη libumem.so πριν κάνει τα δικά του το rtld:

	env LD_PRELOAD=/lib/libumem.so.N /path/to/my/binary

και τα memory allocation requests θα χρησιμοποιήσουν την 'custom'
malloc/free υλοποίηση.



More information about the Linux-greek-users mailing list