- •Тема 1. Понятие операционной системы (ос) Лекция №1. История развития операционных систем Операционные системы в архитектуре вычислительных систем
- •Эволюция операционных систем
- •Лекция №2. Назначение, функции и структура операционных систем
- •Структурная организация ос
- •Классификация операционных систем
- •Тема 2. Управление задачами в ос Лекция №3. Понятие вычислительного процесса и ресурса
- •Диаграмма состояний процесса
- •Блок управления процессом и контекст процесса
- •Лекция №4. Операции над процессами Одноразовые операции
- •Многоразовые операции
- •Переключение контекста
- •Процессы и потоки
- •Лекция №5. Планирование процессов и диспетчеризация задач Понятие и стратегии планирования
- •Вытесняющая и не вытесняющая диспетчеризация
- •Дисциплины диспетчеризации
- •Качество диспетчеризации и гарантии обслуживания
- •Лекция №6. Взаимодействие процессов
- •Организация обмена информацией между процессами
- •Лекция №7. Синхронизация процессов и потоков Необходимость взаимной синхронизации
- •Средства синхронизации процессов и потоков
- •Лекция №8. Проблема тупиков и борьба с ними
- •Тема 3. Управление памятью в ос Лекция №9. Физическая память и виртуальное адресное пространство
- •Модели распределения памяти
- •Лекция №10. Свопинг и виртуальная память
- •Сегментная организация виртуальной памяти
- •Страничная организация виртуальной памяти
- •Оптимизация функционирования страничной виртуальной памяти
- •Сегментно-страничная организация виртуальной памяти
- •Разделяемая память
- •Лекция №11. Уровни иерархии памяти и кэш-память
- •Схемы кэширования и согласования данных
- •Лекция №12. Распределение оперативной памяти в современных ос
- •Тема 4. Организация ввода/вывода в ос Лекция №13. Управление вводом/выводом в ос
- •Устройства ввода-вывода
- •Подсистема ввода-вывода
- •Согласование скоростей обмена и кэширования данных
- •Разделение устройств и данных между процессами
- •Поддержка синхронных и асинхронных операций ввода-вывода
- •Многослойная (иерархическая) модель подсистемы ввода-вывода
- •Назначение и функции драйверов
- •Лекция №14. Файловые системы операционных систем
- •Архитектура файловой системы
- •Организация файлов и доступ к ним
- •Логическая организация файла
- •Каталоговые системы
- •Физическая организация файловой системы
- •Физическая организация и адресация файла
- •Файловая система fat
- •Файловая система ntfs
- •Основные отличия fat и ntfs
- •Тема 5. Распределенные операционные системы Лекция №15. Модели сетевых служб и распределенных приложений
- •Способ разделения приложений на части
- •Лекция №16. Механизмы передачи сообщений в распределенных ос
- •Механизм сокетов
- •Вызов удаленных процедур
- •Тема 6. Безопасность в ос Лекция №17. Основные понятия безопасности
- •Классификация угроз
- •Системный подход к обеспечению безопасности
- •Политика безопасности
- •Лекция №18. Базовые технологии безопасности
- •Односторонние функции шифрования
- •Аутентификация, авторизация, аудит
- •Технология защищенного канала
- •Технологии аутентификации
Лекция №12. Распределение оперативной памяти в современных ос
Первый вопрос, который хочется задать, – это какие ОС следует относить к современным, а какие – нет? Стоит ли в наше время изучать такую «несовременную» ОС, как MS-DOS? С нашей точки зрения, прежде всего к современным ОС следует отнести те, что используют аппаратные возможности микропроцессоров, специально заложенные для организации высокопроизводительных и надёжных вычислений. Однако эти ОС, как правило, очень сложны и громоздки. Они занимают большое дисковое пространство, требуют и большого объёма оперативной памяти. Поэтому для решения некоторого класса задач вполне подходят и системы, использующие микропроцессоры в так называемом реальном режиме работы.
В последние годы можно встретить студентов, обучающихся специальностям, непосредственно связанным с вычислительной техникой, которые совсем не знают DOS-систем. Скорее всего, это является доказательством того, что такие ОС уже не являются современными. Однако достаточно часто для обслуживания компьютера необходимо выполнить простейшие программы – утилиты. Эти программы были созданы для DOS, они не требуют больших ресурсов, для их функционирования достаточно запустить MS-DOS или аналогичную простую ОС. Однако без выполнения этих программ невозможно порой установить или загрузить иные ОС (хоть и современные, но очень сложные и громоздкие). Поэтому мы считаем правильным хотя бы первичное, пусть не очень глубокое ознакомление с MS-DOS.
Распределение оперативной памяти в MS-DOS
Как известно, MS-DOS – это однопрограммная ОС. В ней, конечно, можно организовать запуск резидентных или TSR-задач, но в целом она предназначена для выполнения только одного вычислительного процесса. Поэтому распределение памяти в ней построено по самой простой схеме, которую мы уже рассматривали в разделе «Простое непрерывное распределение и распределение с перекрытием (оверлейные структуры)». Здесь мы лишь уточним некоторые характерные детали. В IBM PC использовался 16-разрядный микропроцессор i8088, который за счёт введения сегментного способа адресации позволял адресоваться к памяти объёмом до 1 Мбайт.
В последующих ПК (IBM PC AT, AT386 и др.) было принято решение поддерживать совместимость с первыми, поэтому при работе с DOS прежде всего рассматривают первый мегабайт. Вся эта память разделялась на несколько областей. Памяти может быть и больше, чем 1 Мбайт, но более подробное рассмотрение этого вопроса мы здесь опустим, отослав желающих изучить данную тему глубже к монографии. Если не вдаваться в детали, можно сказать, что в состав MS-DOS входят следующие основные компоненты:
Базовая подсистема ввода/вывода – BIOS (base input-output system), включающая в себя помимо программы тестирования ПК (POST2) обработчики прерываний (драйверы), расположенные в постоянном запоминающем устройстве. В конечном итоге, почти все остальные модули MS-DOS обращаются к BIOS. Если и не напрямую, то через модули более высокого уровня иерархии.
Модуль расширения BIOS – файл IO.SYS (в других DOS-системах он может называться иначе, например, IBMBIO.COM).
Основной, базовый модуль обработки прерываний DOS – файл MSDOS.SYS. Именно этот модуль в основном реализует работу с файловой системой. (В PC-DOS аналогичный по значению файл называется IBMDOS.COM).
Командный процессор (интерпретатор команд) – файл COMMAND.COM.
Утилиты и драйверы, расширяющие возможности системы.
Программа загрузки MS-DOS – загрузочная запись (boot record), расположенная на дискете.
Распределение оперативной памяти в Microsoft Windows 95/98
С точки зрения базовой архитектуры ОС Windows 95/98 они обе являются 32-разрядными, многопотоковыми ОС с вытесняющей многозадачностью. Основной пользовательский интерфейс этих ОС – графический.
Для своей загрузки они используют операционную систему MS-DOS 7.0 (MSDOS 98), и в случае если в файле MSDOS.SYS в секции [Options] прописано BootGUI=0, то процессор работает в обычном реальном режиме. Распределение памяти в MS-DOS 7.0. такое же, как и в предыдущих версиях DOS. Однако при загрузке GUI-интерфейса перед загрузкой ядра Windows 95/98 процессор переключается в защищённый режим работы и начинает распределять память уже с помощью страничного механизма. Использование так называемой плоской модели памяти, при которой все возможные сегменты, которые может использовать программист, совпадают друг с другом и имеют максимально возможный размер, определяемый системными соглашениями данной ОС, приводит к тому, что с точки зрения программиста память получается неструктурированной. За счёт представления адреса как пары (Р, i) память можно трактовать и как двумерную, то есть «плоскую», но при этом её можно трактовать и как линейную, и это существенно облегчает создание системного программного обеспечения и прикладных программ с помощью соответствующих систем программирования.
Таким образом, в системе фактически действует только страничный механизм преобразования виртуальных адресов в физические. Программы используют классическую «small» (малую) модель памяти. Каждая прикладная программа определяется 32-битными адресами, в которых сегмент кода имеет то же значение, что и сегменты данных. Единственный сегмент программы отображается непосредственно в область виртуального линейного адресного пространства, который, в свою очередь, состоит из 4 килобайтных страниц. Каждая страница может располагаться где угодно в оперативной памяти (естественно, в том месте, куда её разместит диспетчер памяти, который сам находится в невыгружаемой области) или может быть перемещена на диск, если не запрещено использовать страничный файл. Младшие адреса виртуального адресного пространства совместно используются всеми процессами. Это сделано для обеспечения совместимости с драйверами устройств реального режима, резидентными программами и некоторыми 16-разрядными программами Windows. Безусловно, это плохое решение с точки зрения надёжности, поскольку оно приводит к тому, что любой процесс может непреднамеренно (или же, наоборот, специально) испортить компоненты, находящиеся в этих адресах. В Windows 95/98 каждая 32-разрядная прикладная программа выполняется в своем собственном адресном пространстве, но все они используют совместно один и тот же 32-разрядный системный код. Доступ к чужим адресным пространствам в принципе возможен.
Другими словами, виртуальные адресные пространства не используют всех аппаратных средств защиты, заложенных в микропроцессор. В результате неправильно написанная 32-разрядная прикладная программа может привести к аварийному сбою всей системы. Все 16-битовые прикладные программы Windows разделяют общее адресное пространство, поэтому они так же уязвимы друг перед другом, как и в среде Windows 3.x. Системный код Windows 95 размещается выше границы 2 Гбайт. В пространстве с отметками 2 и 3 Гбайт находятся системные библиотеки DLL, используемые несколькими программами. Заметим, что в 32-битовых микропроцессорах семейства i80x86 имеются четыре уровня защиты, именуемые кольцами с номерами от 0 до 3. Кольцо с номером 0 является наиболее привилегированным, то есть максимально защищённым. Компоненты системы Windows 95, относящиеся к кольцу 0, отображаются на виртуальное адресное пространство между 3 и 4 Гбайт. К этим DLL (dynamic link library) – динамически загружаемый библиотечный модуль. Компонентам относятся собственно ядро Windows, подсистема управления виртуальными машинами, модули файловой системы и виртуальные драйверы (VxD).
Распределение оперативной памяти в Microsoft Windows NT
В операционных системах Windows NT тоже используется плоская модель памяти. Заметим, что Windows NT 4.0 server практически не отличается от Windows NT 4.0 workstation; разница лишь в наличии у сервера некоторых дополнительных служб, дополнительных утилит для управления доменом и несколько иных значений в настройках системного реестра. Однако схема распределения возможного виртуального адресного пространства в системах Windows NT разительно отличается от модели памяти Windows 95/98. Прежде всего, в отличие от Windows 95/98 в гораздо большей степени используется ряд серьезных аппаратных средств защиты, имеющихся в микропроцессорах, а также применено принципиально другое логическое распределение адресного пространства. Во-первых, все системные программные модули находятся в своих собственных виртуальных адресных пространствах, и доступ к ним со стороны прикладных программ невозможен. Ядро системы и несколько драйверов работают в нулевом кольце защиты в отдельном адресном пространстве. Во-вторых, остальные программные модули самой операционной системы, которые выступают как серверные процессы по отношению к прикладным программам (клиентам), функционируют также в своем собственном системном виртуальном адресном пространстве, невидимом для прикладных процессов.
Прикладным программам выделяется 2 Гбайт локального (собственного) линейного (неструктурированного) адресного пространства от границы 64 Кбайт до 2 Гбайт (первые 64 Кбайт полностью недоступны). Прикладные программы изолированы друг от друга, хотя могут общаться через буфер обмена (clipboard), механизмы DDE2 и OLE3. Между отметками 2 и 4 Гбайт расположены низкоуровневые системные компоненты Windows NT кольца 0, в том числе ядро, планировщик потоков и диспетчер виртуальной памяти. Системные страницы в этой области наделены, которые задаются физическими схемами кольцевой защиты процессора. В верхней части каждой 2-гигабайтной области прикладной программы размещён код системных DLL кольца 3, который выполняет перенаправление вызовов в совершенно изолированное адресное пространство, где содержится уже собственно системный код. Этот системный код, выступающий как сервер-процесс (server process), проверяет значения параметров, исполняет запрошенную функцию и пересылает результаты назад в адресное пространство прикладной программы. Хотя сервер-процесс сам по себе остается процессом прикладного уровня, он полностью защищён от вызывающей его прикладной программы и изолирован от неё.
