Управление памятью с сегментной организацией виртуальной памяти и алгоритмом замещения страниц LRU

Разработал подсистему по данному условию проекта: Разработка подсистемы управления памятью с сегментной организацией виртуальной памяти и алгоритмом замещения страниц LRU. Основная суть добавление сегментов в оперативную память и когда при очередном добавлении сегмента памяти недостаточно, в виртуальную память выгружается сегмент, к которому дольше всех не обращались (алгоритм LRU). Давайте, я продемонстрирую алгоритм работы подсистемы, чтобы стало более понятно в чем заключается мой вопрос.

  1. С помощью команды add я добавляю в начале 3 сегмента по 1000 Mb, которые добавляются в оперативную память (весь объем оперативной памяти 4096 Mb).

Добавление сегментов

  1. Далее с помощью команды descriptors мы смотрим таблицу сегментов, в которой указывается где находится сегмент и его размер.

Таблица сегментов

  1. Затем с помощью команды queue мы можем увидеть очередь сегментов на выгрузку в виртуальную память ( на данном скриншоте ясно, что первым выгрузится сегмент под номером 0). И проверяем данное утверждение, добавив еще один сегмент с размером памяти в 1200 Mb.

Очередь и добавление нового сегмента

  1. Выводим таблицу сегментов, чтобы убедиться в том, что действительно в виртуальную память ушел сегмент под номером 0, как и было видно из очереди на выгрузку.

Таблица сегментов

  1. Выводи опять очередь на выгрузку и наблюдаем, что она сдвинулась на одну позицию и след. идет на выгрузку сегмент под номером 1. И теперь вместо того, чтобы добавить еще один сегмент мы с помощью команды apply обратимся к сегменту 0, который находится у нас в виртуальной памяти. Затем выводим таблицу сегментов для проверки. И так мы можем наблюдать, что правда в виртуальную память выгрузился сегмент 1, как и было видно из очереди. То есть выполняется алгоритм LRU.

Обращение к сегменту

И собственно в чем моя проблема. А в том, что когда мы добавили сегмент с размеров памяти 1200 Mb, он встал вместо сегмента под номером 0, у которого размер памяти был 1000. Но этого не может быть, то есть как сегмент с 1200 Mb встанет в так скажем ячейку, которая размером 1000 Mb?! Поэтому необходимо как-то это исправить, и чтобы при добавлении сегмента, когда переполняется оперативная память, было видно, что действительно сегмент с 1200 Mb добавляется в ячейку с таким же размером памяти. Возможно, нужно добавить адреса сегментов и отсюда уже идти. Надеюсь понятно расписал свою проблему. Буду признателен, если поможете в решении! https://github.com/Dmitry-15/course_work/blob/main/KR.py непосредственно сам код.


Ответы (0 шт):