Zadatak
Dodati ga u lib/mm/O1.c
s novim sučeljem malloc0_init()
/malloc0(size)
/free0(blok)
.
Pokazati rad korištenja novog sučelja na primjerima koji trebaju demonstrirati i probleme kad nema memorije.
Pri radu, pri svakoj promjeni prikazati stanje strukture podataka. Npr.
O1malloc inicijaliziran, stanje: stanje blokova 32: 0000000000000000 stanje blokova 48: 0000000000000000 stanje blokova 64: 0000000000000000 stanje blokova 96: 0000000000000000 stanje blokova 128: 0000000000000000 stanje blokova 196: 0000000000000000 stanje blokova 256: 0000000000000000 ... zauzmi 100 B dodijeljeno 128 B na adresi 0xNešto stanje blokova 128: 0001001100000000 oslobodi 0x12345678 oslobođen blok veličine 512 B stanje blokova 512: 0000000000001100
Primjer ideje za ostvarenje
Kod inicijalizacije može se blok za ovaj način tražiti od sustava s malloc/kmalloc.Definirati nekoliko veličina blokova, npr. 32, 48, 64, 96, 128, ... i samo takve blokove dodjeljivati. Npr. ako je traženo 100 B dati mu blok od 128 B.
U inicijalizaciji tražiti blok memorije (s malloc) te dobiveni blok podijeliti na dijelove (npr. 10-tak za 32 B, 10-tak za 48 itd.). Bitmapama pratiti koji su slobodni a koji zauzeti -- blokovi ne trebaju imati zaglavlja!
Preporuka za veličine blokova: 32, 48, 64, 96, 128, 196, ...
bsz[0]=32; bsz[i+1]= (1<<(msb_index(bsz[i])-1))
// iz: arch/i386/bits.h: msb_index(num) = 31 - __builtin_clz(num)
//48=32+16; 64=48+16; 96=64+32...
Implementaciju se može najprije napraviti i izvan Benu koda - ne ovisi o ničemu. Tek kad ispravno proradi ugraditi ga u Benu.