Управление оперативной памятью

На главную

Математика
Функции и их графики
Интеграллы примеры
Пределы
Производные
Решить систему методом Гаусса
Интегральное исчисление
Векторная алгебра
Система программирования
Турбо Паскаль
Корни уравнения
Математический анализ
Предел последовательности
Два основных метода
интегрирования
Дискретные источники
Кривые и поверхности
Последовательные алгоритмы
программирования
Функции маршрутизаторов
Комплексные числа
Мультиплексор или
коммутационная схема
Математическая логика
Дифференцирование и
интегральное исчисление
Дифференциальные уравнения
Интегралы
Многопроцессорные ВС
Курсовые задания
Применение интегралов
Теория функций
комплексного переменного
Двойные интегралы
Физические задачи
Элементарная математика
Постулаты квантовой механики
Математический анализ
Степенные ряды
Вычисление пределов
Типовой расчет
Вероятность безотказной
работы системы
Подготовка к экзамену
Примеры решения задач
Лекции матан
Правило Лопиталя
Элементы теории кривых
Производные и дифференциалы
высших порядков
Непрерывные функции
Предел функции
Последовательности
Формула Тейлора
Определенные интегралы
Кратные интегралы
Тензоры
Интегралы, зависящие
от параметра
Отображение рабочего
экрана Adobe Illustrator
Элементы теории поля
Криволинейные интегралы
Тройные интегралы
Задачи по Кузнецову
Вычислить предел
Построить график
Комбинаторика
Ядерная физика
Cвойства атомных ядер
Ядерные реакции
рабочий чертеж
Воздействие радиации на человека
Модели атомных ядер
Задачи по физике
Механика
Термодинамика
Электростатика
Радиоактивность

Геометрическая оптика

Квантовая механика
Атомная физика
Класическая физика
Кинематика
Волновая и квантовая оптика
Электромагнитное и
электростатическое поле
Примеры решения
физических задач
Электромагнетизм
II семестр физики
III семестр физики
Потенциал
Электpостатика

Теория ОС

Классификация ОС
Представление данных
Машинные языки
Загрузка программ
Управление памятью
Виртуальная память
Внешние события
Параллелизм
Реализация многозадачности
Внешние устройства
Драйверы устройств
Файловые системы
Безопасность
Обзор архитектур ОС
Сетевые ОС
Корпоративные ИС
Протоколы TCP/IP
Брандмауэры
Учебник FTP
Системы безопасности
Windows 2000
Windows 2003
Linux
Архитектура ЭВМ
NT 5.0 Справка
Основы Интернет
Атака через Internet
Основы защиты
Компьютерные сети
Введение в КС
Принципы построения ВС
Local Area Network
Монтаж сети
Передача дискр. данных
Базовые технологии ЛС
Построение локальных сетей
Сетевой уровень
Глобальные сети
Средства анализа
Топология ЛС
Глобальные КС
Глоссарий
Информатика
Турбо Паскаль
Процедуры и функции Pascal
Pascal Курс лекций
Базы данных
Язык запросов SQL
Программирование на СИ
Логическое программирование
Примеры программирования

 

Как уже говорилось, в системах с открытой памятью возникают большие сложности при организации многозадачной работы. Самым простым способом разрешения этих проблем оказалось предоставление каждому процессу своего виртуального адресного пространства. Простейшим методом организации различных адресных пространств является так называемая базовая адресация. По-видимому, это наиболее ранний способ виртуальной адресации (рис. 4.18).

Рис. 4.18. Виртуальная память на основе базовой адресации

Вы можете заметить, что термин базовая адресация уже занят — мы называли таким образом адресацию по схеме reg[offset]. Метод, о котором сейчас идет речь, состоит в формировании адреса по той же схеме. Отличие состоит в том, что регистр, относительно которого происходит адресация, не доступен прикладной программе. Кроме того, его значение прибавляется Ко всем адресам, в том числе к "абсолютным" адресным ссылкам или переменным типа указатель. По существу, такая адресация является способом организации виртуального адресного пространства.
правило, машины, использующие базовую адресацию, имеют два региcтра. Один из регистров задает базу для адресов, второй устанавливает верхний предел. В системе IСL900/Одренок эти регистры называются соответственно BASE и DATUM. Если адрес выходит за границу, установленную значением DATUM, возникает исключительная ситуация (exception) ошибочной адресации. Как правило, это приводит к тому, что система принудительно завершает работу программы.
При помощи этих двух регистров мы сразу решаем две важные проблемы.
Во-первых, мы можем изолировать процессы друг от друга — ошибки в программе одного процесса не приводят к разрушению или повреждению образов других процессов или самой системы. Благодаря этому мы можем обеспечить защиту системы не только от ошибочных программ, но и от злонамеренных действий пользователей, направленных на разрушение системы или доступ к чужим данным.
Во-вторых, мы получаем возможность передвигать образы процессов по физической памяти так, что программа каждого из них не замечает перемещения. За счет этого мы решаем проблему фрагментации памяти и даем процессам возможность наращивать свое адресное пространство. Действительно, в системе с открытой памятью процесс может добавлять себе память только до тех пор, пока не доберется до начала образа следующего процесса. После этого мы должны либо говорить о том, что памяти нет, либо мириться с тем, что процесс может занимать несмежные области физического адресного пространства. Второе решение резко усложняет управление памятью как со стороны системы, так и со стороны процесса, и часто оказывается неприемлемым (подробнее связанные с этим проблемы обсуждаются в разд. Открытая память (продолжение)). В случае же базовой адресации мы можем просто сдвинуть мешающий нам образ вверх по физическим адресам (рис. 4.19).

Рис. 4.19. Дефрагментация при использовании базовой адресации

Часто ОС, работающие на таких архитектурах, умеют сбрасывать на диск образы тех процессов, которые долго не получают управления. Это самая простая из форм своппинга (swapping— обмен) (русскоязычный термин "страничный обмен" довольно широко распространен, но в данном случае его использование было бы неверным, потому что обмену подвергаются не страницы, а целиком задачи).
решив перечисленные выше проблемы, мы создаем другие, довольно неожиданные. Мы оговорили, что базовый регистр недоступен прикладным задачам. Но какой-то задаче он должен быть доступен! Каким же образом процессор узнает, исполняет ли он системную или прикладную задачу, и не сможет ли злонамеренная прикладная программа его убедить в том, что является системной?
Другая проблема состоит в том, что, если мы хотим предоставить прикладным программам возможность вызывать систему и передавать ей параметры, мы должны обеспечить процессы (как системные, так и прикладные) теми или иными механизмами доступа к адресным пространствам друг друга.
На самом деле, эти две проблемы тесно взаимосвязаны — например, если мы предоставим прикладной программе свободный доступ к системному адресному пространству, нам придется распрощаться с любыми надеждами на защиту от злонамеренных действий пользователей. Раз проблемы взаимосвязаны, то и решать их следует в комплексе.
Стандартное решение этого комплекса проблем состоит в следующем. Мы снабжаем процессор флагом, который указывает, исполняется системный или пользовательский процесс. Код пользовательского процесса не может манипулировать этим флагом, однако ему доступна специальная команда. В различных архитектурах эти специальные команды имеют разные мнемонические обозначения, далее мы будем называть эту команду SYSCALL. SYSCALL одновременно переключает флаг в положение "системный" и передает управление на определенный адрес в системном адресном пространстве. Процедура, находящаяся по этому адресу, называется диспетчером системных вызовов (рис. 4.20).
Возврат из системного вызова осуществляется другой специальной командой, назовем ее SYSRET. Эта команда передает управление на указанный адрес в указанном адресном пространстве и одновременно переводит флаг в состояние "пользователь". Необходимость выполнять эти две операции одной командой очевидна: если мы сначала сбросим флаг, мы потеряем возможность переключать адресные пространства, а если мы сначала передадим управление, никто не может нам гарантировать, что пользовательский код добровольно выйдет из системного режима.

Рис. 4.20. Диспетчер системных вызовов

Протокол общения прикладной программы с системой состоит в следующем: программа помещает параметры вызова в оговоренное место — обычно в регистры общего назначения или в стек — и исполняет SYSCALL. Одним из параметров передается и код системного вызова. Диспетчер вызовов анализирует допустимость параметров и передает управление соответствующей процедуре ядра, которая и выполняет требуемую операцию (или не выполняет, если у пользователя не хватает полномочий). Затем процедура помещает в оговоренное место (чаще всего опять-таки в регистры или в пользовательский стек) возвращаемые значения и передает управление диспетчеру, или вызывает SYSRET самостоятельно.
Сложность возникает, когда ядру при исполнении вызова требуется доступ к пользовательскому адресному пространству. В простейшем случае, когда все параметры (как входные, так и выходные) размещаются в регистрах и преД' ставляют собой скалярные значения, проблемы нет, но большинство системных вызовов, особенно запросы обмена данными с внешними устройствами, в эту схему не укладываются.
В системах с базовой адресацией эту проблему обычно решают просто: "системном" режиме базовый и ограничительный регистры не используют-вообще, и ядро имеет полный доступ ко всей физической памяти, в том и к адресным пространствам всех пользовательских задач (рис. 4.21). решение приводит к тому, что, хотя система и защищена от ошибок пользовательских программах, пользовательские процессы оказываются совершенно не защищены от системы, а ядро — не защищено от самого себя. Ошибка в любом из системных модулей приводит к полной остановке работы.

Рис. 4.21. Системный и пользовательский режимы


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

 

 

Уравнение Шрёдингера Представление речи в виде цифровых сигналов и их передача Поверхности второго порядка
Классификация операционных систем Виртуальная память Реализация многозадачности
Системы безопасности Операционная система Linux Введение в компьютерные сети Принципы построения вычислительных систем Базовые технологии локальной сетиСредства анализа Процедуры и функции Pascal Язык запросов SQL Программирование на СИ Брандмауэры Протоколы TCP/IP Файловые системы Драйверы устройств
макросы