Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции кошкин.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
667.65 Кб
Скачать
  1. Управление реальной памятью.

В простых вычислителях, когда процессор выполняет одну процедуру последовательно, формирование адресов в память, модификация их не представляет затруднения, поскольку вся информация находиться в регистрах: счетчике команд, сегментных, базовых, индексных. При переходе к подпрограммам содержимое этих регистров автоматически сохраняется в стеке и не теряется. «Потеря адреса» может произойти лишь при невнимательности, при сохранении значений регистра. Другое дело, если вычислитель решает несколько задач, т.е. в режиме мультипрограммирования. Переход из одной задачи в другую требует не только сохранения содержимого основных регистров, но и изменение адресов операндов, с которыми работает задача. Вероятность появления ошибки здесь значительно выше. Если загружается несколько заданий ОС должна обеспечить разделение памяти между процессами.

Существует два подхода к разделению памяти: 1) статический – когда каждому процессу выделяется свой раздел и область. Разделы, их количество их размер и расположение в памяти заранее определены. Поэтому их называют разделы фиксированной длины. 2) динамический – когда разделы назначаются перед выполнением задания. Размеры их переменные, после выполнения задания разделы меняются.

Разделы фиксированной длины.

Н

Задание 4

Задание 3

Задание 2

Задание 1

свободно

апример, в поле памяти выделено 4 области, соответственно в каждую загружено задание 1;2;3;4. Причем не обязательно, что и но загружаются в последовательные области, каждое задание размещается в области памяти, близкой по объему к заданию и лишь последнее – что достанется. Условие – область памяти превышает требуемый объем задания. При выполнении текущего задания, пока оно было не завершено, оно остается в области, куда было загружено. Если задание закончено, в эту область записывается следующее, если может в ней разместиться. Если не размещается, записывается то задание, которое стоит в очереди. Нет очереди, тогда новое задание запишется после освобождения соответствующего раздела. Самое важное – выбор величины размера. Для выполнения больших заданий число разделов д.б. большим, но вместе с тем д.б. и малые разделы, чтобы обеспечить эффективное использование всей памяти. Статический способ эффективен тогда, когда размеры большинства заданий находятся в приделах отведенных разделов. При неизменном деление каждое задание отождествляется со страницей. И эффективные адреса формируются в приделах страницы, запись с учетом адреса страницы.

При переменном размере разделов, каждому поступающему заданию отводиться свой объем памяти. Допустим первому заданию от 0, второму дальше и т.д. Промежутков между областями памяти нет. По мере того как загруженные задания выполняются, на их место могут размещаться следующие. При условии, что свободные объем не меньше требуемого. В результате через некоторое время может образоваться несколько фрагментов- заданий, разделенных пустыми областями. Конечно, эти пропуски динамичны, в зависимости от объема задания. В ОС нет необходимости назначать размер заранее, но ее обязанность следить какие области заняты, какие свободны. Поэтому ведется связной список. Когда раздел свободен, отведенная ему память объединяется со смежными областями. В не зависимости от используемого способа, разделы памяти должны быть защищены. При выполнении задания в одном разделе программ, другие разделы д.б. для него закрыты. При этом требование записи в другие разделы отменяется всегда. Процедура чтения иногда допускается. Поскольку при формировании адресов запись чтение должна выполняться в приделах своего раздела, механизм защиты памяти основан на адресном принципе. Первый вариант – в систему вводиться два граничных регистра. Первый содержит начальный адрес раздела, второй – конечный адрес раздела. Эти регистры аппаратные. Программа пользователя не может изменить содержимое этих регистров, они переписываются в режиме супервизора. Необходимость перезаписи содержимого в граничных регистрах возникает при смене задания, т.е. каждое задание отражается в граничных регистрах крайними адресами. Каждая процедура доступа к памяти (адрес сравнивается с содержимым граничных регистров) при не совпадении (вне интервала) формируется сигнал прерывания. Не смотря на то, что этот метод прост и надежен, он требует дополнительных аппаратных средств, поэтому применяют второй путь – вводиться специальный ключ (регистр) с малой разрядностью, называемый ключ защиты памяти. Содержимое этого ключа устанавливается программно. Каждый пользовательский процесс, программа имеет свой N разрядный код – индитификатор процессора. Этот номер записывается в ССП. Когда происходит распределение памяти ОС присваивает ключам всех блоков памяти значение индитификатора (как бы регистр расширения). При обращении пользовательской программы к памяти автоматически сравнивается содержимое индитификатора из ССП с ключом защиты адресуемой памяти. При несовпадении формируется программное прерывание – захват. Аппаратные затраты здесь меньше, но 1) увеличивается разрядность ССП 2) ключи также нужно перераспределять программно, значит требуется память и для них. Таким образом, в обоих вариантах процедура защиты (дозволенности) требует дополнительных аппаратных средств (либо регистров со схемами, либо увеличение требуемой памяти.).

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

Поскольку распределение памяти чаще применят динамическое, одна из проблем - возникновения свободные (не занятых) областей памяти.

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

Фрагментация. При фрагментации не занятые области объединяются, а занятые становятся смежными. Освобождается большое единое пространство, в которое можно разместить новый большой процесс (или следующий). Поскольку перемещение в памяти фрагментов, требует процедур перезаписи, фрагментация занимает определенное время. Но только времени мало. При перезаписи изменяются текущие адреса, перенесенные из одной области в другую. Адреса переходов, абсолютно назначенные в перенесенной программе, д.б. изменены автоматически. С этой целью выделяется специальный регистр – регистр перемещений, который является как бы базовым. И реальный адрес переходов формируется с учетом значений этого регистра. Т.о. текущий адрес вычисляется с учетом регистра перемещений. Ос должна выполнять эту процедуру так, чтобы пользователь ее не замечал. Процедура фрагментации – дополнительное при размещении в памяти задание.