ОС. Lab11—16. Распределение памяти в ОС

Общий отчёт для лабораторных работ 11—16 по дисциплине «Операционные системы». В конце даны ссылки на исходные коды для каждой лабораторной работы по отдельности.

РАЗВЁРНУТОЕ ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ НА МОДЕРНИЗАЦИЮ МОДЕЛИ ОС С УКАЗАНИЕМ ПАРАМЕТРОВ ДЛЯ ПАМЯТИ И ДОПУСТИМЫХ ИНТЕРВАЛОВ ИХ ИЗМЕНЕНИЯ

Модернизировать созданную в работе «Распределение времени в операционных системах» модель ОС, добавив в неё моделирование одного из методов распределения памяти.

Внести следующие изменения:

  1. Для распределения времени CPU использовать круговой циклический алгоритм, изменив соответственно процедуру планировщика GetNextProcessForCPU
  2. Требуемый алгоритм распределения реализовать в виде набора процедур в модуле супервизора памяти.
  3. Добавить в базу данных модели таблицы распределения памяти.
  4. В процедуре индикации для отображения состояния памяти модели и состояний процессов добавить вывод второго экрана, отображающего текущее распределение памяти.
  5. В файл параметров добавить параметры:
  • число команд запроса дополнительной памяти (до четырёх),
  • размер запрашиваемой дополнительной памяти
  • число команд освобождения дополнительной памяти (до четырёх)

Остальные ограничения смотрите по тексту (например, в разделе 3).

В соответствии с вариантом требуется смоделировать распределение памяти перемещаемыми разделами.

ИМЕНЕНИЯ В ЯЗЫКЕ УПРАВЛЕНИЯ МОДЕЛЬЮ

Размер запрошенной дополнительной памяти, количество команд запроса дополнительной памяти, количество команд освобождения дополнительной памяти регулируются по аналогии с размером задания, размером команд. Эти параметры можно изменить в окне распределения памяти. Переключение между окнами происходит посредством нажатия клавиши «Tab». Имеется три окна: распределение времени, распределение памяти и линейная память.

В окне линейной памяти работают следующие клавиши. Если вся таблица памяти не влезает в экран, то её можно прокручивать посредством нажатия клавиш стрелка вверх, стрелка вниз, «PageUp», «PageDown».

ОПИСАНИЕ РЕАЛИЗАЦИИ АЛГОРИТМА РАСПРЕДЕЛЕНИЯ ПАМЯТИ

Каждому процессу назначается непрерывный раздел памяти. В случае удаления одного из процессов или освобождения памяти все разделы перемещаются к началу и выделяется дополнительная память тем из них, которые запросили дополнительную память. При запросе процессом дополнительной памяти, если процесс лежит в памяти последним, то память ему выделяется, если же выделение памяти невозможно, то он блокируется и при следующем перемещении разделов память ему выделится.

То есть при запросе дополнительной памяти супервизор памяти смотрит: если процесс является последним в ОЗУ и после него есть достаточное количество свободной памяти, то память ему выделяется . То есть поле Size структуры MCB увеличивается на размер запрошенной памяти, в противном случае процесс переходит в состояние блокирован по обращению к памяти. Затем, когда какой-либо из процессов завершит свою работу вызывается процедура MoveSections, которая сдвигает все секции, стоящие после этого процесса влево и выделяют им по мере возможности дополнительную память (если их состояние BlockedOnAm).

Сдвиг секций происходит посредством уменьшения поля First элемента MCB на соответствующее число.

Блоки MCB хранятся в массиве. Их состояние (занят или свободен) хранится в массиве FreeMCB. Есть две переменные FreePos и BusyPos. FreePos указывает в таблице FreeMCB на последний справа свободный элемент, а BusyPos указывает на последний занятый слева элемент.

СТРУКТУРЫ БАЗ ДАННЫХ, ИХ ИМЕНА, НАЗНАЧЕНИЕ

Изменённая структура состояния процесса:

ВИД ЭКРАНА, ОТОБРАЖАЮЩЕГО СОСТОЯНИЕ ПАМЯТИ МОДЕЛИ ОС, С ИМЕНАМИ И НАЗНАЧЕНИЯМИ ВИДИМЫХ ЭЛЕМЕНТОВ

ВИД ЭКРАНА, ОТОБРАЖАЮЩЕГО СОСТОЯНИЕ ПАМЯТИ МОДЕЛИ ОС, С ИМЕНАМИ И НАЗНАЧЕНИЯМИ ВИДИМЫХ ЭЛЕМЕНТОВ

Экран, отображающий линейную память:

Экран, отображающий линейную память

На экране отображена линейная память. Рожицы обозначают свободную память. Номера означают номер процесса, который занял эту память.

ФОРМУЛЫ РАСЧЁТА ВЫХОДНЫХ ПАРАМЕТРОВ ПАМЯТИ В ЗАВИСИМОСТИ ОТ ВХОДНЫХ

Фрагментация в байтах равна числу свободной оперативной памяти (не используемой). Она хранится в переменной OZUFreeSize и корректируется по мере изменения состояний памяти.

Фрагментация памяти в процентах вычисляется по формуле = (Фрагментация памяти в байтах)/(Полный размер оперативной памяти)*100%

Максимальный непрерывный участок свободной памяти = свободной памяти, так как реализован метод распределения памяти перемещаемыми разделами.

ДАННЫЕ ДЛЯ МОДЕЛИРОВАНИЯ И ПРЕДПОЛАГАЕМЫЕ РЕЗУЛЬТАТЫ

 

Количество процессов

Произошла ли ситуация взаимной блокировки
1
2
3
4
5
6
7
8
9 +
10 +
11 +
12 +
13 +
14 +
15 +
16 +

Из таблицы видно, что минимальное количество процессов, при котором модель не входит в состояние взаимной блокировки при прочих равных условиях =9.

При моделировании был использован следующий файл параметров:

При том же файле параметров минимальное количество динамической памяти, при которой модель не входит в состояние взаимной блокировки равно 18.

РЕЗУЛЬТАТЫ МОДЕЛИРОВАНИЯ, ДЕМОНСТРИРУЮЩИЕ УСЛОВИЯ ДОСТИЖЕНИЯ КЛИНЧА

результаты моделирования, демонстрирующие условия достижения клинча

ТАБЛИЦА ХРОНОЛОГИИ РАЗРАБОТОК С ИТОГОВЫМИ РЕЗУЛЬТАТАМИ

РАСПЕЧАТКА ИЗМЕНЕНИЙ В ГЛАВНОЙ ПРОГРАММЕ

Файл «OSMAIN.PAS»:

РАСПЕЧАТКА ИЗМЕНЕНИЙ В МОДУЛЕ ДАННЫХ

Файл «OSDATA.PAS»:

РАСПЕЧАТКИ ИЗМЕНЕНИЙ В ИНТЕРФЕЙСНЫХ СЕКЦИЯХ ВСЕХ МОДУЛЕЙ

Файл «OSSVMEM.PAS»:

Интерфейсная часть остальных модулей осталась без изменений, хотя часть реализации изменилась.

 

ИСХОДНЫЕ КОДЫ

ZIP-архив с исходными кодами к лабораторным работам № 11—12

ZIP-архив с исходными кодами к лабораторной работе № 14

ZIP-архив с исходными кодами к лабораторной работе № 15

ZIP-архив с исходными кодами к лабораторной работе № 16

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *