alloc_mem free_mem del_slot merge max_hole mem_init
PRIVATE struct hole { phys_clicks h_base; phys_clicks h_len; struct hole *h_next; } hole [NR_HOLES];
Ein Loch besteht aus einem
Es gibt eine Liste mit
free_slots
PRIVATE struct hole { phys_clicks h_base; phys_clicks h_len; struct hole *h_next; } hole [NR_HOLES]; PRIVATE struct hole *hole_head; PRIVATE struct hole *free_slots; PUBLIC phys_clicks alloc_mem (phys_clicks clicks) { register struct hole *hp, *prev_ptr; phys_clicks old_base; hp = hole_head; while (hp != NIL_HOLE) { if (hp -> h_len >= clicks) { old_base = hp->h_base; hp->h_base += clicks; hp->h_len -= clicks; if (hp->h_len != 0) return old_base; del_slot (prev_ptr, hp); return old_base; } prev_ptr = hp; hp = hp->h_next; } } del_slot (struct hole *prev_ptr, struct hole *hp) { if (hp == hole_head) hole_head = hp->h_next; else prev_ptr->h_next = hp->h_next; hp->h_next = free_slots; free_slots = hp; }
Alle funktionen des Speichers
main get_work reply mm_init do_brk2 set_map do_fork do_mm_exit mm_exit do_wait cleanup do_exec read_header new_mem patch_ptr load_seg do_brk adjust size_ok stack_fault do_signal do_kill do_ksig check_sig sig_proc do_alarm set_alarm do_pause unpause dump_core do_getset alloc_mem free_mem del_slot merge max_hole mem_init