Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы реального времени и технологии разработки кроссплатформенного программного обеспечения. Ч.1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
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. Особенности управления памятью в операционных системах реального времени
Виртуальная память показала себя удобным инструментом разделе-
ния задач с обеспечением им непрерывного адресного пространства и воз­можности безопасного переключения. Однако даже в таком удачном реше­нии есть несколько проблем.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]