Файл: Курс лекций по дисциплине Операционные системы 2 Содержание.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.03.2024

Просмотров: 55

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Системы управления памятью можно разделить на два класса: перемещающие процессы между оперативной памятью и диском во время их выполнения (то есть осуществляющие подкачку процессов целиком (swapping) или использующие страничную подкачку (paging)) и те, которые этого не делают.

42
2. Однозадачная система без подкачки на диск
Простейшей абстракцией памяти можно считать полное отсутствие какой-либо абстракции. Ранние универсальные машины (до 1960 года), ранние миникомпьютеры (до
1970 года) и ранние персональные компьютеры (до 1980 года) не использовали абстракции памяти. Каждая программа просто видела физическую память. Когда программа выполняла следующую команду
MOV REGISTER1, 1000 компьютер просто перемещал содержимое физической ячейки памяти 1000 в
REGISTER1. Таким образом, модель памяти, предоставляемая программисту, была простой физической памятью, набором адресов от 0 до некоторого максимального значения, где каждый адрес соответствовал ячейке, содержащей какое-нибудь количество бит, которое обычно равнялось восьми.
В каждый момент времени работает только одна программа, при этом память разделяется между программами и ОС.
На рис. 1 показаны три варианта такой схемы. ОС может находиться в нижней части памяти, то есть в ОЗУ (см. рис. 1. а). Или же ОС может располагаться в самой верхней части памяти – в ПЗУ (см. рис. 1. б). И третий способ: драйверы устройств могут находиться наверху в ПЗУ, а остальная часть системы – в ОЗУ, расположенной ниже (см. рис.1 в).
Рис. 1. Три простейшие модели организации памяти при наличии ОС и одного
пользовательского процесса. Существуют также и другие возможные варианты
3. Многозадачность с фиксированными разделами
Самый легкий способ достижения многозадачности представляет собой простое разделение памяти на n (возможно, не равных) разделов. Такое разбиение можно выполнить, например, вручную при запуске системы.
Когда задание поступает в память, его можно расположить во входной очереди к наименьшему разделу, достаточно большому для того, чтобы вместить это задание. Так как в данной схеме размер разделов неизменен, все пространство в разделе, не используемое работающим процессом, пропадает. На рис. 2. а показано, как выглядит система с фиксированными разделами отдельными очередями входных заданий.


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

поочередный

выбирается задача, которая максимально займет раздел
Также может быть смешанная система.
4. Распределение памяти динамическими разделами
Мультипрограммирование с переменными разделами предполагает разделение памяти на разделы и использование загрузочных модулей в перемещаемых адресах, однако границы разделов не фиксируются. В начальной фазе отсутствует фрагментация, связанная с тем, что размер очередного процесса меньше размера, занимаемого этим процессом раздела. На этой фазе причиной фрагментаций является несоответствие размера очередного процесса и оставшегося участка памяти. По мере завершения работы программы освобождаются отдельные разделы. В том случае, когда освобождаются смежные разделы, границы между ними удаляются и разделы объединяются.
За счет объединения или слияния смежных разделов образуются большие фрагменты, в которых можно разместить большие программы из очереди
В такой системе сначала память свободна, потом идет динамическое распределение памяти.

44
Рис. 3. Распределение памяти динамическими разделами
Недостатки:

Сложность

Память фрагментируется
Перемещаемые разделы
Это один из методов борьбы с фрагментацией. Но на него уходит много времени.
Рис. 4. Перемещаемые разделы
Рост разделов
Иногда процессу может понадобиться больше памяти, чем предполагалось изначально.


45
Рис. 5. Рост разделов
Настройка адресов и защита памяти
В предыдущих примерах мы можем увидеть две основные проблемы.

Настройка адресов или перемещение программ в памяти

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

Базовый (указывает начало адресного пространства программы)

Предельный (указывает конец адресного пространства программы)
5. Абстракция памяти: адресные пространства
Предоставление физической памяти процессам имеет ряд серьезных недостатков.
Во-первых, если пользовательские программы могут обращаться к каждому байту памяти, они легко могут преднамеренно или случайно испортить операционную систему, раздробить ее код и довести до остановки работы (в отсутствие специального аппаратного обеспечения наподобие ключевых схем и блокировок на IBM 360). Эта проблема присутствует даже при запуске всего лишь одной пользовательской программы
(приложения). Во-вторых, при использовании этой модели довольно сложно организовать одновременную (поочередную, если имеется лишь один центральный процессор) работу нескольких программ. На персональных компьютерах вполне естественно наличие нескольких одновременно открытых программ (текстовый процессор, программа электронной почты, веб-браузер), с одной из которых в данный момент взаимодействует пользователь, а работа других возобновляется щелчком мыши. Так как этого трудно достичь при отсутствии абстракций на основе физической памяти, нужно что-то предпринимать.
Понятие адресного пространства
Чтобы допустить одновременное размещение в памяти нескольких приложений без создания взаимных помех, нужно решить две проблемы, относящиеся к защите и
перемещению. Примитивное решение первой из этих проблем: участки памяти помечались защитным ключом, и ключ выполняемого процесса сличался с ключом каждого выбранного слова памяти. Но этот подход не решал второй проблемы, хотя она могла быть решена путем перемещения программ в процессе их загрузки, но это было слишком медленным и сложным решением.
Более подходящее решение - придумать для памяти новую абстракцию: адресное
пространство. Так же как понятие процесса создает своеобразный абстрактный центральный процессор для запуска программ, понятие адресного пространства создает своеобразную абстрактную память, в которой существуют программы.


46
Адресное пространство - это набор адресов, который может быть использован процессом для обращения к памяти. У каждого процесса имеется свое собственное адресное пространство, независимое от того адресного пространства, которое принадлежит другим процессам (за исключением тех особых обстоятельств, при которых процессам требуется совместное использование их адресных пространств).
В простом решении используется весьма примитивная версия динамического
перераспределения памяти. При этом адресное пространство каждого процесса просто проецируется на различные части физической памяти. Классическое решение, примененное на машинах от CDC 6600 (первого в мире суперкомпьютера) до Intel 8088
(сердца первой модели IBM PC), заключается в оснащении каждого центрального процессора двумя специальными аппаратными регистрами, которые обычно называются
базовым и ограничительным регистрами. При использовании этих регистров программы загружаются в последовательно расположенные свободные области памяти без модификации адресов в процессе загрузки, как показано на рис. .
При запуске процесса в базовый регистр загружается физический адрес, с которого начинается размещение программы в памяти, а в ограничительный регистр загружается длина программы. На рис. , в при запуске первой программы базовыми и ограничительными значениями, загружаемыми в эти аппаратные регистры, будут соответственно 0 и 16 384. При запуске второй программы будут соответственно использованы значения 16 384 и 32 768. Если непосредственно над второй будет загружена и запущена третья программа, имеющая объем 16 Кбайт, значениями базового и ограничительного регистров будут 32 768 и 16 384.
При каждой ссылке процесса на память с целью извлечения команды или записи слова данных аппаратура центрального процессора перед выставлением адреса на шине памяти добавляет к адресу, сгенерированному процессом, значение базового регистра.
Одновременно аппаратура проверяет, не равен ли предлагаемый адрес значению ограничительного регистра или не превышает ли он это значение, и в этом случае генерируется отказ и доступ прерывается. Если взять первую команду второй программы, показанной на рис. 3.2, в, то процесс выполняет команду JMP 28 но аппаратура рассматривает ее как команду JMP 16412 поэтому переход осуществляется, как и ожидалось, на команду СМР. Значения базовых и ограничительных регистров при выполнении второй программы на рис. 3.2, в показаны на рис. 3.3.


47
Рис. Для предоставления каждому процессу отдельного адресного пространства могут использоваться базовый и ограничительный регистры
Использование базового и ограничительного регистров - это простой способ предоставления каждому процессу своего собственного закрытого адресного пространства, поскольку к каждому автоматически сгенерированному адресу перед обращением к памяти добавляется значение базового регистра. Многие реализации предусматривают такую защиту базового и ограничительного регистров, при которой изменить их значения может только операционная система. Именно так был устроен компьютер CDC 6600 в отличие от компьютеров на основе Intel 8088, у которых не было даже ограничительного регистра. Но у последних было несколько базовых регистров, позволяющих, к примеру, реализовать независимое перемещение текста и данных программы, но не предлагающих какой-либо защиты от ссылок за пределы выделенной памяти.
Недостатком перемещений с использованием базовых и ограничительных регистров является необходимость применения операций сложения и сравнения к каждой ссылке на ячейку памяти. Сравнение может осуществляться довольно быстро, но сложение является слишком медленной операцией из-за затрат времени на вспомогательный сигнал переноса, если, конечно, не используются специальные сумматоры.

48
Лекция 6
Тема: Методы управления памятью с использованием внешней памяти (свопинг и
виртуальная память)
План:
1. Свопинг
2. Виртуальная память
Литература:
1. Коньков К.А. Устройство и функционирование ОС Windows. Практикум к курсу
«Операционные системы»: учебное пособие/ К.А. Коньков. – М.: Интернет-
Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2008. – с. 64 – 98.
2. Назаров С.В., Гудыно Л.П., Кириченко А.А. Операционные системы. Практикум.
Под ред. С.В. Назарова. – М.: Кудиц-ПРЕСС, 2008. – с. 75-134.
3. Партыка Т.Л., Попов И.И. Операционные системы, среды и оболочки: Учебное пособие. – М. ФОРУМ: ИНФРА-М, 2005. с. 53-65.
4. Таненбаум Э. Современные операционные системы. – СПб: Питер, 2002. – с. 223-
298.
5. Гордеев А.В. Операционные системы– 2-е издание. – СПб.: Питер, 2004. Гл. 1. с.
72-100.
Организация памяти в виде фиксированных разделов проста и эффективна для работы с пакетными системами. Но совершенно другая ситуация сложилась с системами разделения времени или персональными компьютерами, ориентированными на работу с графикой. ОП иногда оказывается недостаточно для того, чтобы вместить все текущие активные процессы, и тогда избыток процессов приходится хранить на диске, а для обработки динамически переносить их в память.
Основные способы использования диска:

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

Виртуальная память - процесс может быть частично загружен в память для работы.
1. Свопинг (подкачка)
При нехватке памяти процессы могут быть выгружены на диск.
Рис. 1. Распределение памяти изменяется по мере того, как процессы поступают в
память и покидают еѐ. Заштрихованы неиспользуемые области памяти.