Создай void *pages[PAGES_COUNT], напиши ф-ию sbrk() - http://www.opengroup.org/onlinepubs/007908775/xsh/brk.html или стырь из серсов ядра, и ф-ию доступа к виртуальной памяти (просто целочисленно дели передаваемый в нее параметр-адрес на размер страницы, а остаток есть отступ от начала pages[целая часть деления]), malloc() стырь из K&R - он там готовый, в главе "UNIX". Вот и все, это самый простой вариант.