по дисциплине«Операционные системы и оболочки

advertisement
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
СТАВРОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ
Экономический факультет
УТВЕРЖДАЮ
Заведующий кафедрой
______________________
«___»_____________2014 г.
ЛЕКЦИЯ №6
по дисциплине«Операционные системы и оболочки»
Тема №5
Управление памятью
для студентов специальности
230400.62–Информационные системы и технологии
ШИФР
наименование
Рассмотрено УМК
" " ___________ 2014 года
протокол N ______________
Ставрополь - 2014 г.
1
Учебные и воспитательные цели:
1. Дать систематизированные научные знания о принципах управления памятью
Время:_______________________________________________________________ 90 мин.
Учебно-материальное обеспечение:
1. Опорная лекция.
2. ГОС ВПО по направлению 230400.62 – Информационные системы и технологии.
3. Рабочая программа дисциплины «Операционные системы и оболочки».
4. Основная и дополнительная литература.
5. Методические указания по изучению дисциплины «Операционные системы и оболочки».
6. Комплект слайдов по Теме №5
Распределение времени
I. Вступительная часть
II. Учебные вопросы:
1. Функции ОС по управлению памятью
2. Типы адресов
3. Простоенепрерывноераспределение ираспределениесперекрытием
4. Алгоритмы распределения памяти
II. Заключительная часть
2
СОДЕРЖАНИЕ ЗАНЯТИЯ
Первый учебный вопрос -Функции ОС по управлению памятью
Если не оговорено иное, под памятью (memory) понимается оперативная
память компьютера, в отличие от внешней памяти (storage).
Процессор может выполнять только инструкции, находящиеся в
оперативной памяти. Память распределяется как между модулями прикладных
программ, так и между модулями самой операционной системы.
Функции ОС по управлению памятью в мультипрограммной системе:
 отслеживание свободной и занятой памяти;
 выделение памяти процессам и ее освобождение при завершении процесса;
 вытеснение процессов из оперативной памяти на диск при нехватке
оперативной памяти и возвращение в оперативную память при освобождении
места в ней (механизм виртуальной памяти);
 настройка адресов программы на конкретную область физической памяти;
 динамическое выделение памяти процессам (выделение памяти по запросу
приложения во время его выполнения); выделяются свободные участки,
расположенные произвольным образом, что приводит к фрагментации
памяти;
 дефрагментация освобожденной динамической памяти;
 выделение памяти для создания служебных структур ОС (дескрипторы
процессов
и
потоков,
таблицы
распределения
ресурсов,
буферы,
синхронизирующие объекты и т.д.;
 защита памяти – выполняемый процесс не должен записывать или читать
данные из памяти, назначенной другому процессу.
Второй учебный вопрос - Типы адресов
Преобразование адресов в процессе обработки программы
Для идентификации переменных и команд на разных этапах обработки
3
программы
операционной
системой
используются
символьные
имена,
преобразуемые в виртуальные адреса и в итоге – в физические адреса (рис. 1).
Символьные
имена
Идентификаторы в программе на
алгоритмическом языке. Присваиваются
программистом.
Транслятор
Виртуальные
адреса
Для
специализированн
ых систем, когда
известно, в какой
области памяти
будет выполняться
программа
Условные адреса. Вырабатываются
транслятором и считаются относительно
адреса начала программы, принимаемого
за ноль.
Адреса ячеек физической памяти, где
располагаются переменные и команды
готовой к исполнению программы.
Физические
адреса
Рис. 1. Типы адресов
Виртуальное
адресное
пространство:
структура
и
отображение
на
физическую память
Виртуальное адресное пространство.
Виртуальные адреса для различных программ назначаются транслятором
независимо.
Диапазон
виртуальных
адресов
определяется
программно-
аппаратным обеспечением компьютера, в частности, разрядностью его схем
адресации. Совокупность всех возможных адресов из этого диапазона
называется виртуальным адресным пространством.
Так, 32-разрядный процессор семейства x86 дает возможность адресовать
до 232 байтов, т.е. до 4 Гбайт памяти с диапазоном виртуальных адресов от
00000000h до FFFFFFFFh.
Реальные процессы используют только часть доступного виртуального
пространства (на 1-2 порядка меньше максимума).
Совпадение виртуальных адресов переменных и команд различных
программ не приводит к конфликтам, так как в случае, когда эти переменные
или команды одновременно присутствуют в памяти, операционная система
4
отображает совпадающие виртуальные адреса на разные физические (если эти
переменные
или
команды
не
должны
разделяться
соответствующими
процессами).
Образ процесса – термин, обозначающий содержимое назначенного
процессу виртуального адресного пространства, т.е. коды команд и данные
(исходные, промежуточные и результаты).
Способы структуризации виртуального адресного пространства в ОС.
Структура адреса, или модель адресации определяется в совокупности
компилятором,
операционной
системой
и
аппаратным
обеспечением.
Компилятор должен обеспечить простоту работы с адресом, но с минимальным
разрывом между программистом и ОС. Поэтому в языке программирования
отображается та модель, которая используется в ОС. Эта модель, в свою
очередь, определяется заложенной в ОС идеей адресации с учетом
необходимости реализации этой идеи на конкретной аппаратной платформе.
Таким образом, ОС «сверху» должна обеспечить достаточно простую модель
адресации для компилятора, а «снизу» уметь преобразовать эту модель в
модель, навязанную аппаратурой.
Рассмотрим две наиболее характерных модели структуризации адресного
пространства – плоскую и двухуровневую модель «сегмент-смещение». Эти
модели представлены на рис. 2.
а
б
Сегмент k
q
Сегмент p
……
m
Сегмент 1
5
(p,q) –
двухкомпонентный
адрес
Рис.
2
Типы
виртуальных
адресных
пространств:
Виртуальное
адресное
плоское
(а),
сегментированное (б)
Плоская
(flat)структура.
пространство
представлено в виде непрерывной линейной последовательности адресов.
Линейный виртуальный адрес – число, представляющее собой смещение
относительно начала виртуального адресного пространства (обычно это нулевое
значение).
Сегментированная
структура.
Виртуальное
адресное
пространство
представляется разделенным на сегменты, а адрес любого объекта в памяти
определяется номером сегмента и смещением относительно начала этого
сегмента, т.е. парой сегмент-смещение.
Более конкретно способы структуризации виртуального адресного
пространства рассмотрены в п. 4 темы в связи с механизмами виртуальной
памяти.
Важно отметить следующее.
Использование и реализация универсального принципа сегментирования
структуры адресного пространства в разные периоды развития вычислительной
техники были принципиально различными и менялись по крайней мере
трижды.
В ранних ОС на сегменты фиксированного размера делилась физическая
память, о чем пользователь должен был знать и что при необходимости
учитывал в программе. Необходимость структуризации адреса диктовалась
архитектурой процессора и памяти. Так, модель памяти «сегмент-смещение»
была реализована в 32-разрядной архитектуре IBM-360 (объем памяти
оказывался меньше потенциально адресуемого, но тем не менее была
реализована модель «сегмент-смещение») и в 16-разрядной
архитектуре x-86
(по причине сугубо аппаратного свойства: процессор использовал 20-разрядную
шину адреса, располагая 16-разрядными регистрами, и для формирования
6
адреса использовалось два регистра).
Для программы адресное пространство представляется плоским.
Подходы к преобразованию виртуальных адресов в физические
Загрузка совместно с заменой виртуальных адресов физическими. Замена
адресов выполняется один раз. Программа перемещающий загрузчик, имея
начальный адрес загрузки (т.е. адрес оперативной памяти, начиная с которого
будет размещена программа) и код в относительных (виртуальных) адресах,
выполняет загрузку с одновременным увеличением виртуальных адресов на
величину начального адреса загрузки.
Динамическое
преобразование
виртуальных
адресов.
Программа
загружается в память в виртуальных адресах. Начальный адрес загрузки ОС
фиксирует в специальном регистре. Преобразование виртуальных адресов в
физические
(также
путем
прибавления
начального
адреса
загрузки)
производится во время выполнения программы при обращении к памяти. Таким
образом, некоторый виртуальный адрес пересчитывается в физический столько
раз, сколько обращений по нему производится.
Этот способ более гибок, так как позволяет перемещать программный код
процесса во время выполнения, но менее экономичен из-за многократных
преобразований одних и тех же адресов.
Понятие виртуальной памяти
Сегодня для компьютеров универсального назначения типична ситуация,
когда объем виртуального адресного пространства превышает доступный объем
оперативной памяти. Это достигается за счет отображения виртуального
адресного пространства на физическую память посредством использования
механизма виртуальной памяти.
Виртуальная память – картина памяти, формируемая операционной
системой для процесса (вспомним, что одна из функций ОС – предоставление
виртуальной машины; естественно предположить, что память такой машины
тоже должна быть виртуальной). Деятельность ОС по созданию такой картины
правомерно назвать виртуализацией памяти.
7
Например, для процессов (потоков) в Windows NT память представляется
плоской (линейной) и имеет объем 4 Гб.
Реально ОС имеет в своем распоряжении некоторый объем физической
оперативной памяти в виде установленных модулей (этот объем может
варьироваться до 4 Гб) плюс объем, который ей разрешено использовать на
диске (от 2 Мб, сверху ограничивается администратором). Эта память
распределяется между всеми процессами, включая системные, отдельными
фрагментами (например, страницами, см. далее). Страницы отдельного
процесса располагаются частью в оперативной памяти, частью на диске в
порядке,
устанавливаемом
последовательности
в
ОС
самом
и
в
общем
процессе
случае
(его
отличном
виртуальном
от
их
адресном
пространстве). Эффект увеличения объема памяти достигается за счет
вытеснения неактивных страниц на диск.
Таким образом, 4Гб оперативной памяти, с которой работает процесс, –
фикция, создаваемая для него операционной системой.
Поскольку виртуальная память – механизм управления памятью, а не
предоставляемое
ее
пространство,
предоставляемой
процессу
корректнее
посредством
этого
говорить
механизма.
о
памяти,
Ее
объем
складывается из доступного объема оперативной памяти и объема разрешенной
к использованию дисковой памяти. Тогда справедливо утверждение: объем
памяти,
предоставляемой
процессу
механизмом
виртуальной
памяти,
потенциально позволяет адресовать все виртуальное адресное пространство
данного процесса. Реально на взаимодействие процессов накладывается целый
ряд различных ограничений, в силу которых процессы должны вести себя
корректно друг по отношению к другу, и ни один процесс не должен
претендовать на всю доступную память. На сегодня «правила хорошего тона»
предписывают использовать не более 200 – 500 Мб памяти, самостоятельно
организуя программным путем обмен с диском в случае наличия более
громоздких структур данных (как, например, это делает AdobePhotoshop).
8
Третий учебный вопрос - Простое непрерывное распределение и
распределение с перекрытием
Простое непрерывное распределение — это самая простая схема,
согласно которой вся память условно может быть разделена на три области:
 область, занимаемая операционной системой;
 область, в которой размещается исполняемая задача;
 незанятая ничем (свободная) область памяти.
Изначально являясь самой первой схемой, схема простого непрерывного
распределения
памяти
продолжает
и
сегодня
быть
достаточно
распространенной. Эта схема предполагает, что операционная система не
поддерживает мультипрограммирование, поэтому не возникает проблемы
распределения памяти между несколькими задачами. Программные модули,
необходимые для всех программ, располагаются в области самой операционной
системы, а вся оставшаяся память может быть предоставлена задаче. Эта
область памяти получается непрерывной, что облегчает работу системы
программирования. Поскольку в различных однотипных вычислительных
комплексах может быть разный состав внешних устройств (и, соответственно,
они содержат различное количество драйверов), для системных нужд могут
быть отведены отличающиеся объемы оперативной памяти, и получается, что
можно не привязывать жестко виртуальные адреса программы к физическому
адресному пространству. Эта привязка осуществляется на этапе загрузки задачи
в память.
Для того чтобы для задач отвести как можно больший объем памяти,
операционная система строится таким образом, чтобы постоянно в оперативной
памяти располагалась только самая нужная ее часть. Эту часть операционной
системы стали называть ядром. Прежде всего, в ядро операционной системы
входят основные модули супервизора. Для однопрограммных систем понятие
супервизора вырождается в модули, получающие и выполняющие первичную
обработку запросов от обрабатывающих и прикладных программ, и в модули
9
подсистемы памяти. Ведь если программа по ходу своего выполнения
запрашивает некоторое множество ячеек памяти, то подсистема памяти должна
их выделить (если они есть), а после освобождения этой памяти подсистема
памяти должна выполнить действия, связанные с возвратом памяти в систему.
Остальные модули операционной системы, не относящиеся к ее ядру, могут
быть обычными диск-резидентными (или транзитными), то есть загружаться в
оперативную память только по необходимости, и после своего выполнения
вновь освобождать память.
Такая
схема
распределения
вычислительных ресурсов -
влечет
за
собой
два
вида
потерь
потеря процессорного времени, потому что
процессор простаивает, пока задача ожидает завершения операций вводавывода, и потеря самой оперативной памяти, потому что далеко не каждая
программа использует всю память, а режим работы в этом случае
однопрограммный. Однако это очень недорогая реализация, которая позволяет
отказаться от многих функций операционной системы. В частности, такая
сложная проблема, как защита памяти, здесь почти не стоит. Единственное, что
желательно защищать — это программные модули и области памяти самой
операционной системы.
Если есть необходимость создать программу, логическое адресное
пространство которой должно быть больше, чем свободная область памяти, или
даже больше, чем весь возможный объем оперативной памяти, то используется
распределение с перекрытием — так называемые оверлейные структуры (от
overlay
—
перекрытие,
расположение
поверх
чего-то).
Этот
метод
распределения предполагает, что вся программа может быть разбита на части
— сегменты. Каждая оверлейная программа имеет одну главную (main) часть и
несколько сегментов (segments), причем в памяти машины одновременно могут
находиться только ее главная часть и один или несколько не перекрывающихся
сегментов.
Пока в оперативной памяти располагаются выполняющиеся сегменты,
остальные
находятся
во
внешней
памяти.
10
После того
как
текущий
(выполняющийся) сегмент завершит свое выполнение, возможны два варианта:
либо он сам (если данный сегмент не нужно сохранить во внешней памяти в его
текущем состоянии) обращается к операционной системе с указанием, какой
сегмент должен быть загружен в память следующим; либо он возвращает
управление главному сегменту задачи, и уже тот обращается к операционной
системе с указанием, какой сегмент сохранить (если это нужно), а какой
сегмент загрузить в оперативную память, и вновь отдает управление одному из
сегментов, располагающихся в памяти. Простейшие схемы сегментирования
предполагают, что в памяти в каждый конкретный момент времени может
располагаться только один сегмент (вместе с главным модулем). Более
сложные
позволяют
схемы, используемые
располагать
в
в больших
памяти
несколько
вычислительных
сегментов.
В
системах,
некоторых
вычислительных комплексах могли существовать отдельно сегменты кода и
сегменты данных. Сегменты кода, как правило, не претерпевают изменений в
процессе своего исполнения, поэтому при загрузке нового сегмента кода на
место отработавшего последний можно не сохранять во внешней памяти, в
отличие от сегментов данных, которые сохранять необходимо.
Первоначально программисты сами должны были включать в тексты
своих программ соответствующие обращения к операционной системе (их
называют системными вызовами) и тщательно планировать, какие сегменты
могут находиться в оперативной памяти одновременно, чтобы их адресные
пространства не пересекались. Однако с некоторых пор такого рода обращения
к операционной системе системы программирования стали подставлять в код
программы сами, автоматически, если в том возникает необходимость. Так, в
известной и популярной в недалеком прошлом системе программирования
TurboPascal программист просто указывал, что данный модуль является
оверлейным. И при обращении к нему из основной программы модуль
загружался в память и получал управление. Все адреса определялись системой
программирования автоматически, обращения к DOS для загрузки оверлеев
тоже генерировались системой TurboPascal.
11
Распределение оперативной памяти в MSDOS
Как известно, MSDOS1 — это однопрограммная операционная система
для персонального компьютера типа IBMPC. В ней, конечно, можно
организовать запуск резидентных, или TSR-задач2, в результате которого в
памяти будет находиться не одна программа, но в целом система MSDOS
предназначена для выполнения только одного вычислительного процесса.
Поэтому распределение памяти в ней построено по схеме простого
непрерывного распределения. Система поддерживает механизм распределения
памяти с перекрытием (оверлейные структуры).
Как известно, в IBMPC использовался 16-разрядный микропроцессор
i8088, который за счет введения сегментного способа адресации позволял
указывать адрес ячейки памяти в пространстве объемом до 1 Мбайт. В
последующих персональных компьютерах (IBMPCAT, AT386 и др.) было
принято решение поддерживать совместимость с первыми, поэтому при работе
в DOS прежде всего рассматривают первый мегабайт. Вся эта память
разделялась на несколько областей, что иллюстрирует рис. 3.2. На этом рисунке
показано, что памяти может быть и больше, чем 1 Мбайт, но более подробное
рассмотрение этого вопроса мы здесь опустим, отослав желающих изучить
данную тему глубже к монографии [2].
Если не вдаваться в детали, можно сказать, что в состав MSDOS входят
следующие основные компоненты.
Подсистема BIOS (BaseInput-OutputSystem — базовая подсистема вводавывода), включающая в себя помимо программы POST (PowerOnSelfTest —
самотестирование
при
включении
компьютера)
программные
модули
обработки прерываний, с помощью которых можно управлять основными
контроллерами на материнской плате компьютера и устройствами вводавывода. Эти модули часто называют обработчиками прерываний. По своей
функциональной сути они представляют собой драйверы. BIOS располагается в
постоянном запоминающем устройстве компьютера. В конечном итоге почти
все остальные модули MSDOS обращаются к BIOS. Если и не напрямую, то
12
через модули более высокого уровня иерархии.
Модуль расширения BIOS — файл IO.SYS (в других DOS-системах он
может называться иначе, например _ВЮ.С0М).
Основной, или базовый, модуль обработки прерываний DOS — файл
MSDOS.SYS. Именно этот модуль в основном реализует работу с файловой
системой.
Командный
процессор
(интерпретатор
команд)
—
файл
COMMAND.COM.
Утилиты и драйверы, расширяющие возможности системы.
Программа загрузки MSDOS — загрузочная запись (BootRecord, BR),
расположенная на дискете или на жестком диске
Вся память в соответствии с архитектурой IBMPC условно может быть
разбита на следующие три части.
В самых младших адресах памяти (первые 1024 ячейки) размещается
таблица векторов прерывания. Это связано с аппаратной реализацией
процессора i8088. В последующих процессорах (начиная с i80286) адрес
таблицы прерываний определяется через содержимое соответствующего
регистра, но для обеспечения полной совместимости с первым процессором
при включении или аппаратном сбросе в этот регистр заносятся нули. При
желании, однако, в случае использования современных микропроцессоров
i80x86 вектора прерываний можно размещать и в других областях.
13
Рис.2. Распределение оперативной памяти в MSDOS
Вторая часть памяти отводится для программных модулей самой системы
MSDOS и для программ пользователя. Эту область памяти мы рассмотрим чуть
позже, здесь только заметим, что она называется основной, или стандартной,
памятью (conventionalmemory).
Наконец, третья часть адресного пространства отведена для постоянных
запоминающих устройств и функционирования некоторых устройств вводавывода. Эта область памяти получила название UMA (UpperMemoryArea —
14
область памяти, адрес которой выше основной).
В младших адресах основной памяти размещается то, что можно условно
назвать ядром этой операционной системы — системные переменные,
основные программные модули, блоки данных для буферизации операций
ввода-вывода. Для управления устройствами, драйверы которых не входят в
базовую подсистему ввода-вывода, загружаются так называемые загружаемые,
или устанавливаемые, драйверы. Перечень устанавливаемых драйверов
определяется специальным конфигурационным файлом CONFIG.SYS. После
загрузки расширения BIOS — файла IO.SYS — последний (загрузив модуль
MSDOS.SYS) считывает файл CONFIG.SYS и уже в соответствии с ним
подгружает в память необходимые драйверы. Кстати, в конфигурационном
файле CONFIG.SYS могут иметься операторы, указывающие на количество
буферов, отводимых для ускорения операций ввода-вывода, и на количество
файлов, которые могут обрабатываться (для работы с файлами необходимо
зарезервировать место в памяти для хранения управляющих структур, с
помощью которых выполняются операции с записями файла). В случае
использования микропроцессоров i80x86 и наличия в памяти драйвера
HIMEM.SYS модули IO.SYS и MSDOS.SYS могут быть размещены за
пределами первого мегабайта в области, которая получила название
НМA(HighMemoryArea — область памяти с большими адресами).
Память с адресами, большими чем l0FFFFh, может быть использована в
DOS-программах при выполнении их на микропроцессорах, имеющих такую
возможность (например, микропроцессор i80286 имел 24-разрядную шину
адреса, а i80386 — уже 32-разрядную). Но для этого с помощью специальных
драйверов необходимо переключать процессор в другой режим работы, при
котором
он
сможет
распространение
использовать
получили
XMS(ExtendedMemorySpecification)
адреса
две
и
выше
основные
l0FFFFh.
Широкое
спецификации:
EMS(ExpandedMemorySpecification).
Последние годы система MSDOS практически перестала применяться. Теперь
ее используют в основном для запуска некоторых утилит, с помощью которых
15
подготавливают дисковые устройства, или для установки других операционных
систем. И поскольку основным утилитам, необходимым для обслуживания
персонального компьютера, спецификации EMS и XMS, как правило, не
нужны, мы не будем здесь их рассматривать.
Остальные программные модули MSDOS (в принципе, большинство из
них является утилитами) оформлены как обычные исполняемые файлы.
Например, утилита форматирования диска представляет собой и двоичный
исполняемый файл, и команду операционной системы. В основном такого рода
утилиты являются транзитными модулями, то есть загружаются в память
только на время своей работы, хотя среди них имеются и TSR-программы. Для
того чтобы предоставить больше памяти программам пользователя, в MSDOS
применено то же решение, что и во многих других простейших операционных
системах, — командный процессор COMMAND.COM состоит из двух частей.
Первая часть является резидентной и размещается в области ядра, вторая часть
транзитная и размещается в области старших адресов раздела памяти,
выделяемой для программ пользователя. И если программа пользователя
перекрывает собой область, в которой была расположена транзитная часть
командного процессора, то последний при необходимости восстанавливает в
памяти свою транзитную часть, поскольку после выполнения программы она
возвращает управление резидентной части C0MMAND.COM.
Поскольку размер основной памяти относительно небольшой, то очень
часто системы программирования реализуют оверлейные структуры. Для этого
в MSDOS поддерживаются специальные вызовы.
Четвертый учебный вопрос - Виды алгоритмов распределения памяти
Исторически выделяются два наиболее общих подхода к распределению
памяти, в рамках каждого из которых реализуется ряд алгоритмов:
1. распределение памяти без использования внешней памяти:
 фиксированными разделами;
16
 динамическими разделами;
 перемещаемыми разделами;
2. распределение памяти с использованием внешней памяти:
 страничное распределение;
 сегментное распределение;
 сегментно-страничное распределение.
Алгоритмы первого класса предполагают, что размер виртуального
адресного пространства каждого процесса меньше объема оперативной памяти.
Эти алгоритмы использовались в ранних мультипрограммных ОС (OS/360,
ранние версии OS/2) в 60-70 годах и в силу неактуальности здесь опущены.
Алгоритмы второго класса реализуют механизм виртуальной памяти и
подлежат рассмотрению.
Вопросы для самопроверки:
1. Что такое «виртуальный адрес», «виртуальное адресное пространство»?
2. Имеются ли виртуальные адреса в программах, написанных для работы в
среде DOS?
3. Функции ОС по управлению памятью в мультипрограммной среде?
4. Типы виртуальных адресов
5. Виды алгоритмов распределения памяти
6. Подходы к преобразованию виртуальных адресов в физические
7. Назначение перемещающего загрузчика
Список литературы:
1. Сетевые операционные системы/ В.Г. Олифер, Н.А. Олифер. – СПб.: Питер,
2009. - 672 с.: ил.
2. Операционные системы: Учебник для вузов. 2-е изд. /А.В. Гордеев. – СПб.:
Питер, 2006. - 416 с.: ил.
Лекцию разработал
Доцент кафедры «Информационных систем»
к.т.н.,
Д. Резеньков
«___»__________________2014 г.
17
Download