- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
public void AllocateMemory(ref int[] segmentSizeProcess)
{
int[] difference;
int j = 0;
int tempo = 0;
for (int i = 0; i < segmentSizeProcess.Count(); i++)
{
difference = new int[memory.Count]; // храним разность размера блока памяти и требуемого размера для процесса
for (int count = 0; count < memory.Count; count++)
{
difference[count] = -2; // предварительно инициализируем
}
for (int count_memory=0; count_memory<memory.Count();
count_memory++)
{
if (memory[count_memory].size - segmentSizeProcess[i] >= 0) // если равно 0, значит
// сегмент полностью распределён
{
if (!memory[count_memory].isAllocate)
{ difference[count_memory] = memory[count_memory].size - segmentSizeProcess[i]; }
else
{ difference[count_memory] = -1; } // если сегмент занят -
// то он недоступен
}
}
tempo = GetMinDifference(ref difference); // получаем индекс минимальной разности
// если результат "-", значит секторы заняты, выходим из цикла
if (difference[tempo] >= 0)
{
memory.ElementAt(tempo).isAllocate = true; // процесс занял сегмент
if (difference[tempo] > 0) // если остаётся фрагмент памяти
{
CreateDifferenceSegment(difference[tempo]); // создаем новый сегмент, равный
// наименьшей разности памяти сегмента и памяти для процесса
}
memory[tempo].size = segmentSizeProcess[i]; // распределяем память
}
else
{
break;
}
}
}
Комментарии (0) RSS
Добавить комментарий