rem: protection = 0x21;
add: protection = 0x22;
context: arch_mmu_allocate(void *virtualAddress, size_t size, uint8 protection){	// we only know page sizes	size = ROUNDUP(size, B_PAGE_SIZE);	// set protection to WIMGxPP: -I--xPP	if (protection & B_WRITE_AREA)		protection = 0x23;	else		protection = 0x21;	if (virtualAddress == NULL) {		// find free address large enough to hold "size"		virtualAddress = find_free_virtual_range(size);		if (virtualAddress == NULL)			return NULL;	} else {		if (is_virtual_allocated(virtualAddress, size))			return NULL;	}	// we have a free virtual range for the allocation, now	// have a look for free physical memory as well (we assume	// that a) there is enough memory, and b) failing is fatal	// so that we don't have to optimize for these cases :)		void *physicalAddress = find_free_physical_range(size);	if (physicalAddress == NULL)		return NULL;	// everything went fine, so lets mark the space as used.printf("mmu_alloc: va %p, pa %p, size %u\n", virtualAddress, physicalAddress, size);	insert_virtual_allocated_range(virtualAddress, size);	insert_physical_allocated_range(physicalAddress, size);	map_range(virtualAddress, physicalAddress, size, protection);	return virtualAddress;}