Warning
This page is located in archive. Go to the latest version of this course pages.

Uživatelský paměťový alokátor pro OS NOVA

Na tomto cvičení si zkusíte implementovat alokátor dynamické paměti, který bude využívat systémové volání brk z minulého cvičení.

Domácí příprava

Pro toto cvičení budete potřebovat:

Zadání úlohy

Implementujte jednoduchý alokátor paměti pro uživatelský prostor OS NOVA. Váš alokátor bude nabízet implementovat funkce my_malloc a my_free s následujícími prototypy:

void *my_malloc(unsigned int size)
int my_free(void *address)

Pro získání 4 bodů budou od alokátoru budou očekávány následující vlastnosti:

  • Alokátor bude možné používat po přilinkování k aplikaci usr/hello.c ze zdrojových kódů OS NOVA.
  • my_malloc alokuje paměť velikosti size a vrací adresu začátku alokované paměti. Pokud paměť požadované velikosti nelze alokovat, my_malloc vrací 0.
  • my_free uvolní paměť alokovanou funkcí my_malloc. Parametr address je hodnota dříve vrácená funkcí my_malloc. Pokud je paměť úspěšně uvolněna, funkce vrátí 0, v opačném případě je vrácen nenulový kód chyby, který si můžete nadefinovat jak chcete.
  • Pokud je my_free zavolána na již uvolněnou paměť nebo na paměť, která nebyla alokována voláním my_malloc, je to považováno za chybu. Můžete předpokládat, že program používající váš alokátor nemodifikuje jinou paměť na heapu než tu, vrácenou funkcí my_malloc.
  • Bude schopná alokovat a uvolnit paměť.
  • Bude používat systémové volání brk pro získání paměti pro alokaci.
  • Pokud bude uživatel alokovat paměť po 16B. blocích (a větších), bude mít k dispozici alespoň 50% paměti, kterou je možné získat pomocí volání brk.
  • Dealokovaná paměť půjde alokovat znovu.
  • Paměť alokovaná funkcí my_malloc bude přístupná minimálně do doby zavolání my_free.
  • Žádná část paměti alokované funkcí my_malloc nebude alokovaná znovu dříve než bude zavoláno odpovídající my_free.

Pro získání 8 bodů budou navíc vyžadovány následující vlastnosti:

  • Po uvolnění menších sousedních bloků bude možné ve stejné oblasti alokovat jeden velký souvislý blok.

Co se odevzdává:
Archiv obsahující vaši implementaci v souboru user/mem_alloc.cc a soubor kern/src/ec_syscall z minulého cvičení. Můžete ho vytvořit pomocí následující řádky z kořenového adresaře NOVY (nebo si můžete upravit pravidlo hw11 v Makefilu):

zip hw11.zip kern/src/ec_syscall.cc user/mem_alloc.cc 

courses/b4b35osy/cviceni/cviceni11_alokator.txt · Last modified: 2017/12/16 08:53 by houdepre