/*=============== do_compact ===================*/
/* implementa la system call compact ORGANIZZAZIONE DA RIVEDERE */ PUBLIC do_compact() { register struct hole * hp; phys_clicks tot_click, stop_addr, max_mem; int num, go; num = (phys_clicks) mm_in.m1_i1; go=1; /* a questo punto sono possibili alcuni casi: parametro a 0: compatta tutta la memoria parametro negativo: generare un errore parametro positivo: compattare altrettanti clicks (almeno) */ /* inserire opportunamente i casi con i codici successivamente listati e il caso di errore (da farsi) */ if (go) stop_addr=aux_do_comp (tot_clicks, 1); } =============codice da inserire opportunamente: ================
/* codice per compattare tutto: da fare */
/* codice per caso errore: da fare */ /* codice per compattare "num" clicks */ hp=hole_head; max_mem=0; tot_clicks = num; while ((hp!=NIL_HOLE)&&go) { if (tot_clicks <= hp->h_len ) /* esiste gia' un buco sufficiente */ { go=0; printf ("compact not needed\n"); break; } max_mem+=hp->h_len; hp=hp->h_next; } if ((max_mem < tot_clicks)&&go) /* memoria non disponibile */ { printf ("memory available: %u clicks\n", max_mem); go=0; } break;