Распределение подвижными разделами
Для
оптимизации распределения всей памяти
в целом и уменьшения уровня фрагментации
можно использовать метод смещения
(сдвига) по адресам кодов загруженных
задач с целью получения непрерывных
областей памяти, размеры которых будут
достаточны для загрузки новых задач.
Данный метод иллюстрируется на рис.
kernel |
|
kernel |
|
Kernel |
Task1 |
Task1 |
Task1 |
Task5 |
Task5 |
Task5 |
|
Task4 |
Task4 |
Task4 |
|
Task6 |
|
|
1
2
3
В момент 1
в памяти имеется две свободные области,
но ни одна из них недостаточна по размеру,
чтобы загрузить следующую задачу.
Планировщик делает смещение кода задачи
task4, образуя одну, большую по размеру,
непрерывную свободную область памяти
(момент 2).
Поэтому появляется
возможность загрузить следующую задачу
task6 (момент3).
Смещение в памяти кода задачи,
которое выполняет планировщик , должно
быть согласовано по времени с окончанием
операции ввода/вывода для этой
задачи (в данном случае –task4).
Если такое согласование отсутствует,
то результаты ввода/вывода
могут записаться на“старое”
место в памяти, и задача будет разрушена.
С другой стороны, такое согласование
противоречит принципам мультипрограммирования,
в соответствии с которыми внешние
устройства должны работать независимо
и асинхронно относительно центрального
процессора. Поэтому данная дисциплина
распределения разделами не нашла
практического применения.