ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ

Компьютерная память (устройство хранения информации, запоминающее устройство) — часть вычислительной машины, физическое устройство для хранения данных, используемых в вычислениях, в течение определённого времени. Память, как и центральный процессор, является неизменной частью компьютера с 1940-х.

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

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

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

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

Если нарушается защита памяти, исполнение программы приостанавливается и вырабатывается запрос прерывания по нарушению защиты памяти.

Защита от вторжения программ в чужие области памяти может быть организована различными методами. Но при любом подходе реализация защиты не должна заметно снижать производительность компьютера и требовать слишком больших аппаратурных затрат.

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

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

 

 

 

Рисунок 13 - Защита памяти методом граничных регистров

 

 

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

Модификация этого метода заключается в том, что один регистр используется для указания адреса начала защищаемой области, а другой содержит длину этой области.

Метод граничных регистров, обладая несомненной простотой реализации, имеет и определенные недостатки. Основным из них является то, что этот метод поддерживает работу лишь с непрерывными областями памяти.

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

 

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

1) ключи совпадают (то есть данный блок памяти относится к данной программе)

2) один из ключей имеет код 0 (код 0 присваивается программам операционной системы и блокам памяти, к которым имеют доступ все программы: общие данные, совместно используемые подпрограммы и т. п.).

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

Фрагментация памяти. Управление оперативной памятью, основанное на запросах на выделение или освобождение участков, приводит к тому, что память может оказаться разбитой на большое число перемежающихся занятых и свободных участков малых размеров (фрагментов). Это явление называемое фрагментацией памяти, приводит к весьма отрицательным последствиям: запросы на большие участки памяти не могут быть удовлетворены из-за малых размеров свободных участков, хотя суммарный размер свободной памяти достаточен для удовлетворения запросов.

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

 

Способы борьбы с фрагментацией памяти:

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

Упорядочение запросов на участки памяти по времени освобождения. Желательно, чтобы участки памяти, освобождаемые примерно в одно и то же время, располагались в смежных областях. При этом после освобождения участков образуется единая область свободной памяти достаточно большого размера. Такое упорядочение происходит путем классификации запросов и направления их в разные области памяти.

Упорядочение запросов на участки памяти по размерам. Желательно, чтобы участки памяти одинакового размера располагались в смежных областях памяти. Фрагментация таких областей не вызывает проблем распределения, так как размер запроса совпадает с размером свободных участков (фрагментов) и при наличии последних запрос может быть удовлетворен.