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