Obligatorisk oppgave 2 INF1070 Våren 2006 I mange språk (som C og assemblerspråk) er ikke dynamisk allokering av minne bygget inn i språket men tilgjengelig som biblioteksrutiner, for eksempel `malloc´ og `free´. Oppgaven er å skrive to funksjoner `mgrab´ og `mdrop´ som oppfører seg likt `malloc´ og `free´; de skal skrives i x86-kode som virker med gcc på Ifis maskiner. Sett også av et område (en såkalt «heap» eller «haug» på norsk) på 2048 byte hvor det skal allokeres minne: .align 4 haug: .fill 2048 Det anbefales å bruke lister til å implementere `mgrab´ og `mdrop´, men om noen vil bruke en annen teknikk som for eksempel et «buddy-system», er det OK. Men det settes da strengere krav til at koden er godt kommentert. I slike systemer er det vanlig at datastrukturen (for eksempel listepekerne) ligge i selve dataområdet, så det er helt OK at ikke alle 2048 byte er tilgjengelig for brukeren. Ofte vil 2040 byte være den største blokken brukeren kan få, men den nøyaktige grensen avhenger av hvordan minnet er organisert. All koden (unntatt et eventuelt testprogram) skal skrives i x86-assemblerkode for GNUs assembler. Programmet ~inf1070/programmer/test-grabdrop.c (http://www.ifi.uio.no/~inf1070/programmer/test-grabdrop.c) er et testprogram som gruppelærerne vil bruke i sin testing. Innleveringsfristen er mandag 24. april kl 12.00 Gruppelæreren bestemmer hvorledes innleveringen skal skje. Tips: Les kapittel 10 i Bryant-boken. Noen ytterligere punkter: * `malloc´ vil be operativsystemet om mer minne (ved å kalle på `sbrk´) når haugen er brukt opp. Det skal ikke `mgrab´ gjøre; den skal bare returnere 0. * Legg vekt på å skrive velstrukturert og godt kommentert kode. Om koden er vanskelig å forstå, vil gruppelæreren nekte å rette den. 10. mars 2006 Dag L