Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные системы реального времени и технологии разработки кроссплатформенного программного обеспечения. Ч.1. Учебное пособие
.pdf
5.8. Модели синхронизации POSIX
111
Этот подход устраняет обе описанные выше проблемы.
Семафоры также могут помочь, указав на состояние системы.
Например, в семафоре можно хранить число свободных мест в приемной
или количество клиентов.
Задачу можно усложнить, введя несколько парикмахеров или несколько очередей в приемной.

6. Управление памятью
112
6. УПРАВЛЕНИЕ ПАМЯТЬЮ
6.1. Функции управления памятью
Оперативная память компьютера (ОЗУ) – это один из самых важных
разделяемых ресурсов вычислительной системы. При этом она обладает
небольшим объемом по сравнению с постоянным запоминающим устройством, но гораздо более высокой скоростью доступа.
Особой ролью оперативной памяти является возможность хранения
инструкций программного кода для их последующей передачи для выполнения микропроцессору. Более того, микропроцессор может выполнять
программу только в том случае, когда она загружена в оперативную память. Если весь код программы не находится в памяти, выполнение останавливается, пока не будет завершена загрузка с жесткого диска.
Некоторые системы работают вообще без жесткого диска (терминалы) и всё управляющее программное обеспечение располагается непосредственно в ОЗУ.
Следовательно, процесс управления памятью требует тщательного
внимания со стороны разработчиков программного обеспечения как прикладного, так и системного.
В старых версиях операционных систем работа памяти сводилась к
загрузке программы с магнитного носителя, например с ленты, и подаче
потом на выполнение. С появлением возможностей запуска сразу многих
программ на выполнение, перед ОЗУ были поставлены новые задачи, связанные с распределением памяти между потребителями, т.е. между одновременно выполняемыми приложениями.
Функциями операционной системы реального времени по управлению памятью в многопрограммной среде можно назвать следующие.
1. Контроль свободной и занятой памяти.
2. Распределение доступной памяти между потребителями.
3. Подкачка программ и данных с дискового пространства.
4. Загрузка кодов и данных задач в определенные для них области.
5. Настройка адресов программ на отведенные им области конкрет-
ной физической памяти.

6.2. Типы адресов памяти
113
6. Динамическое распределение памяти, т.е. отображение запросов
приложения на выделяемую им дополнительную память непосредственно
во время выполнения.
7. Возврат областей памяти, которые перестали быть необходимы
тому или иному приложению.
8. Освобождение памяти после выгрузки или уничтожения про-
цессов.
9. Вытеснение (выгрузка) программ и данных из оперативной па-
мяти на дисковое пространство.
10. Защита выделенных областей памяти одной программы от не-
санкционированного доступа со стороны других приложений.
11. Контроль операций чтения и записи с анализом одновременного
доступа с запросом обеих операций к одной области.
Помимо начального распределения памяти в момент запуска, ОС РВ
занимается динамическим распределением и перераспределением пространств памяти между запущенными процессами. ОС контролирует процесс удовлетворения запросов приложений на выделение областей основной и дополнительной памяти.
Кроме того, ОС РВ выполняет дополнительные действия по обслуживанию памяти. Примерами таких операций могут служить регенерация
и дефрагментация. Регенерация памяти актуальна для аппаратного обеспечения (планок памяти и контроллеров), которые не способны длительное
время хранить состояние ячеек в неизменном состоянии. В таком случае,
по прерыванию таймера, контроллер памяти должен перезаписывать содержимое памяти само в себя для сохранения состояния между внешними операциями чтения или записи. Дефрагментация памяти может быть описана
как процесс уплотнения записи памяти путем переноса информации, связанной между собой в одну область (на соседние адреса).
6.2. Типы адресов памяти
Для того чтобы находить объекты программных кодов и данные в
памяти, контроллеры ОЗУ и программное обеспечение используют различную адресацию (рис. 12).
Реально выделяются следующие типы адресации.

6. Управление памятью
114
Рис. 12. Типы адресов ОС РВ и их связь
1. Физический адрес. Соответствует фактическому номеру ячейки
данных или программы в пространстве микросхем оперативной памяти.
Сама по себе память линейна, т.е. физические адреса расположены по значению рядом друг с другом. Однако при помощи манипуляций с физическими адресами, можно получить имитацию других организаций памяти,
например циклические буферы или очереди с ограниченным размером.
2. Символьные имена. Предназначены для того, чтобы программа
могла восприниматься программистом, хотя после сборки и компиляции
программы или в момент выполнения символьные адреса заменяются на
физические для непосредственного доступа к памяти.
3. Виртуальные адреса. Так иногда называются результаты матема-
тических и логических операций над адресами (адресная арифметика). Такие адреса вырабатываются трансляторами программ, которые переводят
программу на машинный язык с параллельным преобразованием адресов
из символьных имен в физические значения.

6.2. Типы адресов памяти
115
Совокупность виртуальных адресов называется виртуальным адресным пространством.
Виртуальное адресное пространство или, другими словами, виртуальная память, часто используется как отдельная технология управления
памятью вычислительной системы в том случае, когда она работает как
многозадачная система. Примечательно то, что множество возможных адресов виртуального пространства у всех процессов, исполняемых в системе, одно и то же.
Транслятор присваивает виртуальные адреса каждой программе
независимо от других. Так же часто виртуальные адреса физически расширяют доступный диапазон ОЗУ на дисковое пространство, так что процессор, при осуществлении процесса генерации адреса или обращения по адресу, думает, что работает с огромным пространством оперативной памяти,
хотя реально тот или иной файл или программный код может находиться
на жестком диске.
Применение механизмов виртуальных адресных пространств позволяет использовать следующие возможности:
упрощение адресации для клиентского (пользовательского) про-
граммного обеспечения;
рациональное управление и контроль памяти вычислительной
системы;
изоляция процессов в памяти друг от друга. Здесь каждый про-
цесс считает, что он монопольно владеет всей доступной памятью и находится в ней один.
Если виртуальный адрес совпадает с реальным, или адрес одного
процесса совпадает с адресом другого процесса, то не возникает никакого
конфликта, так как эти переменные или блоки кода одновременно присутствуют в памяти, только по разным физическим адресам.
Размер доступной программисту виртуальной памяти для работы
программы намного превышает реальный размер памяти вычислительной
системы. Когда программист пишет программу, транслятор, используя
виртуальные адреса, переводит ее в машинный код, таким образом, как будет ей одной доступна память большого объема, без учета того, что большая часть программы и ее данных, расположены на внешних накопителях

6. Управление памятью
116
и только при необходимости будут непосредственно загружены в реальную
оперативную память.
Конечно, такая работа виртуальной памяти выполняется медленнее,
чем реальной. На рис. 12 показан пример соотношения типов адресов в операционной системе реального времени.
Выделяемое системой адресное пространство – это набор располо-
женных в непосредственной близости друг от друга виртуальных адресов,
которые действительно необходимы тому или иному процессу для работы.
Здесь можно говорить о том, что, данные, записанные в виртуальной
памяти, составляют “образ” процесса. Так же, как и контекст процесса,
важные данные могут быть выгружены из памяти вместе с задачей, а потом
загружены обратно на “те же самые” места.
Применение концепции виртуальной памяти существенно упрощает
процессы проектирования, разработки и внедрения программного обеспечения любого назначения. Разработчику больше не нужно рассчитывать
фактические физические адреса в оперативной памяти перед запуском программы – эту функцию берет на себя операционная система. Достаточно
лишь определить символьные адреса, типы данных и максимальный объем
занимаемого пространства.
Виртуальные адреса изначально генерируются и назначаются транслятором. Операционная система фиксирует их у себя в особой таблице при
запуске программы на выполнение. В ходе работы процесс может запросить дополнительные ресурсы памяти для хранения изменяемых ресурсов,
увеличив тем самым первоначально определенный объем доступной памяти. Операционная система в любом случае будет следить за правильностью назначения виртуальной памяти и за изменением ее объемов, чтобы
не допустить выход за доступные пределы, так как процессу не разрешено
работать вне назначенной именно ему памяти.
Максимальный объем доступной виртуальной памяти процесса
ограничен только разрядностью системы и объемом подключенного физического носителя. Разрядность системы определяется архитектурой микропроцессора и, следовательно, алгоритмы работы с виртуальной памятью
определяются тем же самым процессором.

6.2. Типы адресов памяти
117
В настоящее время, все современные микропроцессоры имеют
встроенные блоки управления физической и виртуальной памятью. Изначально адресная арифметика реализовывалась в арифметико-логическом
устройстве микропроцессора, теперь – в отдельном генераторе адресов.
Во встраиваемых системах может быть иная ситуация. В основном
отличия наблюдаются в проблемно-ориентированных системах, где микропроцессор должен максимально быстро выполнять несколько самых важных операций с минимальным временем отклика. Однако в таких системах
редко можно встретить не только виртуальную память, но и многозадачности и тем более многопоточность.
В сложных современных системах, наоборот, существуют не только
сложные механизмы распределения и управления памятью, но даже сложные и многоуровневые иерархии виртуальной памяти.
Здесь следует отметить, что виртуальное адресное пространство и
виртуальная память реализуются разными механизмами и совсем не обязательно, что они работают в системе одновременно.
Обычно, виртуальное адресное пространство делится на две непре-
рывные и непересекающиеся части:
системная область;
пользовательская область.
В некоторых типах операционных систем реального времени эти части имеют одинаковые объемы. Например, для 32-битных систем семейства Windows характерен одинаковый объем в 2 Гбайта на каждую. Реже
можно встретить разные значения объемов, например 1 Гбайт для операционной системы и 2-3 Гбайта для пользовательских программ и прикладного
программного обеспечения.
Часть виртуального адресного пространства, для каждого запускаемого процесса, является идентичной. Благодаря этому, при смене адресных пространств, системная область остается неизменной, а меняется
только вторая часть виртуального пространства адресов, в которой содержатся индивидуальные сегменты данных или кода, характерные конкретной программе.
Для управления этими адресными пространствами современные
микропроцессоры содержат два типа системных таблиц:
таблица описания сегментов, общих для всех процессов;

6. Управление памятью
118
таблица для описания индивидуальных областей каждого про-
цесса.
При смене выполняемого процесса первая таблица не меняет сво-
его содержимого, а вторая таблица стирается, и в нее загружаются другие
данные.
6.3. Виртуальная память и подкачка данных
В операционных системах, которые поддерживают многопоточность и одновременный запуск нескольких программ, помимо основного
выполняемого процесса, имеются процессы, которые приостановлены системой. Последние находятся в состоянии готовности и стоят в очереди на
выполнение процессором.
Образы этих процессов могут быть временно перемещены на жесткий диск для последующей загрузки. Ядро операционной системы реального времени знает не только о существовании всех этих процессов, но и в
полной мере учитывает их параметры при распределении как процессорного времени, так и виртуального адресного пространства. Непосредственно перед продолжением выполнения процесса, его данные будут загружены обратно в оперативную память и если будет определено, что для
процесса не хватает свободной памяти, то будет загружен какой-либо другой процесс, а текущий будет выполнен несколько позже, когда в системе
появится достаточно свободной памяти.
Такой механизм манипуляции с виртуальной памятью позволяет повысить уровень программирования, так как программы уже не имеют
столько жестких ограничений со стороны доступной памяти. Ограничения
на число “одновременно запускаемых программ” уже не столь жесткие.
Виртуализация памяти обслуживается несколькими модулями операционной системы и поддерживается блоками микропроцессора. Все они
решают следующие основные задачи.
1. Размещение данных программы сразу в нескольких простран-
ствах: в оперативной памяти и на внешнем дисковом накопителе.
2. Выбор образов процессов или их частей для перемещения с
внешнего носителя в оперативную память.

6.3. Виртуальная память и подкачка данных
119
3. Размещение образов процессов или их частей на внешнем нако-
пителе (вытеснение их из оперативной памяти на диск).
4. Перемещение программ и их данных с ОЗУ на диск и обратно во
время выполнения.
5. Преобразование (отображение) виртуальных адресов в физиче-
ские и обратно.
Важно помнить, что все указанные выше действия выполняются си-
стемой и аппаратурой автоматически, т.е. без участия пользователя, и это
никак не отражается на логике, заложенной в программу разработчиком.
Виртуализация памяти может быть выполнена двумя следующими
основными методами:
1. подкачка (своп), когда образы процессов выгружаются из ОЗУ на
диск и возвращаются обратно целиком;
2. виртуальная память, когда между ОЗУ и дисковым простран-
ством перемещаются только части образов процессов (сегменты, страницы,
отдельные записи данных и блоки кода).
Подкачка – это частный случай виртуализации памяти, а следова-
тельно, она имеет более простую реализацию совместного использования
ОЗУ и дискового пространства. Следует помнить, что процессу подкачки
свойственна некоторая избыточность. Для подкачки операционной системы нужно принимать отдельное решение и лишь после этого начать выполнения. После активации процесса подкачки, ОС достаточно загрузить
небольшую часть кодового сегмента с инструкцией, которую необходимо
сейчас выполнить процессору, а также с данными, которые сейчас необходимы для выполнения. В дополнение к этому, операция может также затронуть часть памяти, которая называется стек.
Аналогичным образом, для освобождения памяти системе не всегда
требуется полная выгрузка всей памяти процесса. Иногда достаточно выгрузить только часть образа процесса на диск, чтобы освободить требуемый объем памяти.
Перемещение избыточной информации затрудняет работу системы,
поэтому, когда ОС активно использует подкачку, ее работа замедляется.
Существует еще одно ограничение: операционная система не может
загрузить для выполнения процесс, адресное пространство которого превышает свободную память системы.

6. Управление памятью
120
Вследствие этих особенностей, современные операционные системы уже не используют подкачку как основной механизм управления памяти. Сейчас применяется более эффективный механизм виртуальной памяти, заключающийся в том, что, если в системе не хватает свободной памяти, то на диск выгружается только необходимая часть процессов.
Другой проблемой использования подкачки и виртуальной памяти
вообще является постоянная трансляция виртуальных адресов в физические и наоборот. Эта проблема возникает при многократном изменении местоположения образов процессов и их данных в ОЗУ вычислительной системы. Решение проблемы зависит в большой степени от способа структуризации виртуального адресного пространства, который реализован в ОС.
На настоящий момент все множество существующих решений указанной проблемы можно свести к следующим примерам:
страничная виртуальная память;
сегментная виртуальная память;
сегментно-страничная виртуальная память.
Страничная виртуальная память работает со страницами при перемещении информации между ОЗУ и дисковым пространством. Страница – это
часть виртуального адресного пространства с фиксированным размером.
Этот размер является небольшим по сравнению с общим объемом ОЗУ.
Сегментная виртуальная память также описывает перемещение информации блоками, но уже произвольного размера с учетом особенностей
хранимых данных.
Сегментно-страничный механизм использует двухуровневое деление виртуальной памяти. Виртуальное адресное пространство делится на
сегменты, а те, в свою очередь, делятся на страницы. Минимальной величиной для перемещения здесь является страница.
6.4. Особенности управления памятью в операционных
системах реального времени
Виртуальная память показала себя удобным инструментом разделе-
ния задач с обеспечением им непрерывного адресного пространства и возможности безопасного переключения. Однако даже в таком удачном решении есть несколько проблем.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
