- •1.Состав системного программного обеспечения.
- •1.1.Операционная система (ос) как посредник между уровнем пользователя и аппаратурой эвм.
- •1.2.Функции операционной системы
- •1.3.Классификация операционных систем
- •2.Структура операционной системы
- •2.1.Ядро и вспомогательные модули ос. Ядро в привилегированном режиме
- •2.2.Многослойная структура ос
- •2.3.Аппаратная зависимость и переносимость ос
- •2.4.Типовые средства аппаратной поддержки ос
- •3.Организация вычислительных процессов.
- •3.1.Понятия вычислительного процесса и ресурса.
- •3.2.Понятие системы программирования.
- •3.3. Системы интерактивной отладки
- •3.4.Принципы трансляции программ
- •3.5.Особенности построения интерпретаторов
- •3.6.Лексический и синтаксический анализ и генерация кода.
- •3.7.Загрузчик.
- •3.8.Жизненный цикл программы.
- •3.9.Система исполнения программы (run-time system).
- •4.Процессы и потоки
- •4.1.Понятия «процесс» и «поток»
- •4.2.Создание процессов и потоков
- •4.3.Планирование и диспетчеризация потоков
- •4.4.Состояния потока
- •4.5.Вытесняющие и невытесняющие алгоритмы планирования
- •4.6.Алгоритмы планирования, основанные на квантовании
- •4.7.Алгоритмы планирования, основанные на приоритетах
- •4.8.Смешанные алгоритмы планирования
- •4.9.Мультипрограммирование на основе прерываний
- •4.10.Назначение и типы прерываний
- •4.11.Механизм прерываний
- •4.12.Диспетчеризация и приоритезация прерываний в ос
- •4.13.Синхронизация процессов и потоков. Цели и средства синхронизации
- •4.14.Необходимость синхронизации и гонки
- •4.15.Критическая секция. Блокирующие переменные. Семафоры. Тупики
- •4.16.Средства коммуникации процессов
- •5.Управление памятью
- •5.1.Функции ос по управлению памятью
- •5.2.Типы адресов
- •5.3.Алгоритмы распределения памяти
- •5.4.Механизмы реализации виртуальной памяти
- •5.5.Страничное распределение
- •5.6.Сегментное распределение
- •5.7.Сегментно-страничное распределение
- •5.8.Кэширование данных. Иерархия запоминающих устройств
- •5.10.Проблема согласования данных
- •5.11.Способы отображения основной памяти на кэш
- •6.Управление устройствами ввода-вывода и файлами
- •6.1.Задачи ос по управлению файлами и устройствами
- •6.2.Многослойная модель подсистемы ввода-вывода
- •6.3. Менеджер ввода-вывода
- •6.4.Многоуровневые драйверы
- •6.5.Специальные файлы
- •6.6.Цели и задачи файловой системы
- •6.7.Типы файлов. Иерархическая структура файловой системы
- •6.8.Имена файлов. Атрибуты файлов. Логическая организация файла
- •6.9.Физическая организация и адресация файла
- •6.10.Файловые операции. Способы организации файловых операций.
- •6.11.Стандартные файлы ввода и вывода, перенаправление вывода
- •6.12.Контроль доступа к файлам. Механизм контроля доступа и защиты от сбоев
5.3.Алгоритмы распределения памяти
Следует ли назначать каждому процессу одну непрерывную область физической памяти или можно выделять память «кусками»? Должны ли сегменты программы, загруженные в память, находиться на одном месте в течение всего периода выполнения процесса или можно ее время от времени сдвигать? Что делать, если сегменты программы не помещаются в имеющуюся память? Разные ОС по-разному отвечают на эти и другие базовые вопросы управления памятью.
На рис. 5. 2 представлена схема алгоритмов распределения памяти.
Рис. 5. 2. Классификация методов распределения памяти
Все алгоритмы разделены на два класса: алгоритмы, в которых используется перемещение сегментов процессов между оперативной памятью и диском, и алгоритмы, в которых внешняя память не привлекается.
В случае распределения памяти машины динамическими разделами каждому вновь поступающему на выполнение приложению на этапе создания процесса выделяется вся необходимая ему память (изначально вся память, отводимая приложениям, свободна). Если достаточный объем памяти отсутствует, то приложение не принимается на выполнение и процесс для него не создается. После завершения процесса память освобождается, и на это место может быть загружен другой процесс. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера.
При этом операционной системе, использующей этот метод управления памятью, приходится решать перечисленные ниже задачи.
Ведение таблиц свободных и занятых областей. В этих областях указываются начальные адреса и размеры участков памяти.
Анализ требований к памяти. При создании нового процесса просматриваются таблицы свободных областей и выбирается раздел, размер которого достаточен для размещения кодов и данных нового процесса. Выбор раздела может осуществляться по разным правилам, например: «первый попавшийся раздел достаточного размера», «раздел, имеющий наименьший достаточный размер» или «раздел, имеющий наибольший достаточный размер».
Загрузка программы в выделенный ей раздел и корректировка таблиц свободных и занятых областей. Данный способ предполагает, что программный код не перемещается во время выполнения, а значит, настройка адресов может быть проведена единовременно во время загрузки.
Корректировка таблиц свободных и занятых областей. Эта операция проводится после завершения процесса.
Однако этому методу распределения присущ серьезный недостаток, связанный с фрагментацией памяти. Фрагментация это наличие большого числа несмежных участков свободной памяти малого размера (фрагментов), настолько малого, что ни одна из вновь поступающих программ не может уместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти. Этот метод управления памятью лежит в основе подсистем управления памятью первых ОС 60–70-х годов.
Перемещаемые разделы
Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших или младших адресов с тем, чтобы вся свободная память образовала единую свободную область. В дополнение к задачам, которые решает ОС при распределении памяти динамическими разделами, в данном случае она должна еще время от времени копировать содержимое разделов из одного места памяти в другое, при этом корректируя таблицы свободных и занятых областей. Эта процедура называется сжатием. Сжатие может выполняться либо при каждом завершении процесса, либо только тогда, когда для вновь создаваемого процесса нет свободного раздела достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц свободных и занятых областей, а во втором реже выполняется процедура сжатия.
Так как программы перемещаются по оперативной памяти в ходе своего выполнения, то в данном случае невозможно выполнить настройку адресов с помощью перемещающего загрузчика. Здесь более подходящим оказывается динамическое преобразование адресов.
Хотя процедура сжатия и приводит к более эффективному использованию памяти, она может потребовать значительного времени, что часто перевешивает преимущества данного метода.
Концепция сжатия применяется и при использовании других методов распределения памяти, когда отдельному процессу выделяется не одна сплошная область памяти, а несколько несмежных участков памяти произвольного размера (сегментов). Такой подход был использован в ранних версиях OS/2, в которых память распределялась сегментами, а возникавшая при этом фрагментация устранялась путем периодического перемещения сегментов.
