//
// New processes are allocated memory in the main_memory array. 
//
void memory_allocate(PCB new_arrival)
{
	int PID = new_arrival.get_id();
	int requested_memory = new_arrival.get_size();
	int free_memory = 0;

	while(main_memory[free_memory] != 0)
		free_memory++;

	if((MEM_SIZE - free_memory) >= requested_memory)
		for(int i = free_memory; i < free_memory + requested_memory; i++)
			main_memory[i] = PID;
	else
	{
		if (DEBUG) cout << "(memory_allocate): ERROR Not enough memory for process " << PID << endl;
	}

	// Memory has been allocated, update UI.
	state_changed_flag = true;
}
// 
// Processes that are finished running have their memory removed. 
// Remaining memory is then shifted down. 
//
void memory_deallocate(PCB finished_process)
{
	int i = 0;
	int j;
	int PID = finished_process.get_id();
	while(main_memory[i] != PID)
		i++;
	j = i;
	while(main_memory[j] == PID)
	{
		main_memory[j] = 0;
		j++;
	}
	while(main_memory[j] != 0 && j < MEM_SIZE)
	{
		main_memory[i] = main_memory[j];
		main_memory[j] = 0;
		i++;
		j++;
	}

	// Memory has been deallocated, update UI.
	state_changed_flag = true;
}