Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 1016
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
102
мере в три раза больше, чем при простой прямой адресации. Чтобы избежать этой неприятности, вводится кэширование, причем кэш, как правило, строится по ассо- циативному принципу. Другими словами, просмотры двух таблиц в памяти могут быть заменены одним обращением к ассоциативной памяти.
Рис. 2.9. Сегментно-страничный способ организации виртуальной памяти
Напомним, что принцип действия ассоциативного запоминающего устройства предполагает, что каждой ячейке памяти такого устройства ставится в соответствие ячейка, в которой записывается некий ключ (признак, адрес), позволяющий одно- значно идентифицировать содержимое ячейки памяти. Сопутствующую ячейку с
Регистр таблицы
сегментов (таблицы
дескрипторов сегментов)
32 000
11
612
+
32 017
Виртуальный адрес
S(Segment) P(Page) I(Index)
Таблица сегментов текущей задачи
Адрес начала
сегмента
Число
страниц
Права
доступа
1
11 000
20
R-X
+
17
Страница №23
23 000
23 612
Номер
физической
страницы
Права дос-
тупа
1
23
R-X
||
103
информацией, позволяющей идентифицировать основные данные, обычно называ- ют полем тега. Просмотр полей тега всех ячеек ассоциативного устройства памяти осуществляется одновременно, то есть в каждой ячейке тега есть необходимая ло- гика, позволяющая посредством побитовой конъюнкции найти данные по их при- знаку за одно обращение к памяти (если они там, конечно, присутствуют). Часто поле тегов называют аргументом, а поле с данными – функцией. В качестве аргу- мента при доступе к ассоциативной памяти выступают номер сегмента и номер виртуальной страницы, а в качестве функции от этих аргументов получаем номер физической страницы. Остается приписать номер ячейки в странице к полученно- му номеру, и мы получаем искомую команду или операнд.
Оценим достоинства сегментно-страничного способа. Разбиение программы на сегменты позволяет размещать сегменты в памяти целиком. Сегменты разбиты на страницы, все страницы сегмента загружаются в память. Это позволяет умень- шить обращения к отсутствующим страницам, поскольку вероятность выхода за пределы сегмента меньше вероятности выхода за пределы страницы. Страницы ис- полняемого сегмента находятся в памяти, но при этом они могут находиться не ря- дом друг с другом, а «россыпью», поскольку диспетчер памяти манипулирует страницами. Наличие сегментов облегчает реализацию разделения программных модулей между параллельными процессами. Возможна и динамическая компонов- ка задачи. А выделение памяти страницами позволяет минимизировать фрагмента- цию.
Однако, поскольку этот способ распределения памяти требует очень значи- тельных затрат вычислительных ресурсов и его не так просто реализовать, исполь- зуется он редко, причем в дорогих, мощных вычислительных системах. Возмож- ность реализовать сегментно-страничное распределение памяти заложена и в се- мейство микропроцессоров i80x86, однако вследствие слабой аппаратной под- держки, трудностей при создании систем программирования и операционной сис- темы, практически он не используется в ПК.
104
Распределение оперативной памяти в
современных ОС для ПК
Первый вопрос, который хочется задать, – это какие ОС следует относить к современным, а какие – нет? Стоит ли в наше время изучать такую «несовремен- ную» ОС, как MS-DOS?
1
С нашей точки зрения, прежде всего к современным ОС
следует отнести те, что используют аппаратные возможности микропроцессоров,
специально заложенные для организации высокопроизводительных и надёжных вычислений. Однако эти ОС, как правило, очень сложны и громоздки. Они зани- мают большое дисковое пространство, требуют и большого объёма оперативной памяти. Поэтому для решения некоторого класса задач вполне подходят и системы,
использующие микропроцессоры в так называемом реальном режиме работы (см.
об этом в следующей главе).
В последние годы можно встретить студентов, обучающихся специальностям,
непосредственно связанным с вычислительной техникой, которые совсем не знают
DOS-систем. Скорее всего, это является доказательством того, что такие ОС уже не являются современными. Однако достаточно часто для обслуживания компьютера необходимо выполнить простейшие программы – утилиты. Эти программы были созданы для DOS, они не требуют больших ресурсов, для их функционирования достаточно запустить MS-DOS или аналогичную простую ОС. Однако без выпол- нения этих программ невозможно порой установить или загрузить иные ОС (хоть и современные, но очень сложные и громоздкие). Поэтому мы считаем правильным хотя бы первичное, пусть не очень глубокое ознакомление с MS-DOS.
1
Широко известно, что было много версий ОС, которые мы, упрощая ситуацию, относим к MS-DOS. MS-DOS –
это вариант фирмы Microsoft реализации дисковой операционной системы [3, 28]. Фирма Microsoft прекратила раз- работку подобных систем, и последней их реализацией была MS-DOS 6.22. Были (и есть ныне) реализации такого рода систем и от других разработчиков. Поскольку у MS-DOS 6.22 существуют известные проблемы с 2000 годом,
большой популярностью пользуется PC-DOS 7.0 от IBM.
105
Распределение оперативной памяти в MS-DOS
Как известно, MS-DOS – это однопрограммная ОС. В ней, конечно, можно ор- ганизовать запуск резидентных или TSR-задач
1
, но в целом она предназначена для выполнения только одного вычислительного процесса. Поэтому распределение па- мяти в ней построено по самой простой схеме, которую мы уже рассматривали в разделе «Простое непрерывное распределение и распределение с перекрытием
(оверлейные структуры)». Здесь мы лишь уточним некоторые характерные детали.
В IBM PC использовался 16-разрядный микропроцессор i8088, который за счёт введения сегментного способа адресации позволял адресоваться к памяти объ-
ёмом до 1 Мбайт. В последующих ПК (IBM PC AT, AT386 и др.) было принято решение поддерживать совместимость с первыми, поэтому при работе с DOS пре- жде всего рассматривают первый мегабайт. Вся эта память разделялась на не- сколько областей, что проиллюстрировано на рис. 2.10. На этом рисунке изобра- жено, что памяти может быть и больше, чем 1 Мбайт, но более подробное рас- смотрение этого вопроса мы здесь опустим, отослав желающих изучить данную тему глубже к монографии [9].
Если не вдаваться в детали, можно сказать, что в состав MS-DOS входят сле- дующие основные компоненты:
♦ Базовая подсистема ввода/вывода – BIOS (base input-output system), вклю- чающая в себя помимо программы тестирования ПК (POST
2
) обработчики преры- ваний (драйверы), расположенные в постоянном запоминающем устройстве. В ко- нечном итоге, почти все остальные модули MS-DOS обращаются к BIOS. Если и не напрямую, то через модули более высокого уровня иерархии.
♦ Модуль расширения BIOS – файл IO.SYS (в других DOS-системах он может называться иначе, например, IBMBIO.COM).
1
TSR (terminate and stay resident) – резидентная в памяти программа, которая благодаря изменениям в таблице векто- ров прерываний позволяет перехватывать прерывания и в случае обращения к ней выполнять необходимые нам дей- ствия. Подробно об этом можно прочесть, например, в книгах [3, 23, 24, 35].
2
POST (power on self test) – программа самотестирования при включении компьютера. После выполнения этой про- граммы, входящей в состав ROM BIOS, опрашиваются устройства, которые могут содержать программы для загруз- ки ОС.
106
♦ Основной, базовый модуль обработки прерываний DOS – файл
MSDOS.SYS. Именно этот модуль в основном реализует работу с файловой систе- мой. (В PC-DOS аналогичный по значению файл называется IBMDOS.COM).
♦ Командный процессор (интерпретатор команд) – файл COMMAND.COM.
♦ Утилиты и драйверы, расширяющие возможности системы.
♦ Программа загрузки MS-DOS – загрузочная запись (boot record), располо- женная на дискете (подробнее о ней и о других загрузчиках см. главу 4).
Рис. 2.10. Распределение оперативной памяти в MS-DOS
Таблица векторов прерываний
00000 - 003FF 1 Кб
Глобальные переменные BIOS
Глобальные переменные DOS
00400- 005FF 512б
Модуль IO.SYS
Модуль MSDOS.SYS:
- обслуживающие функции;
- буферы, рабочие и управляющие
области;
- инсталируемые драйверы;
Резидентная часть
COMMAND.COM:
- обработка программных прерыва-
ний;
- системная программа загрузки;
- программа загрузки транзитной части
COMMAND.COM
00600- 0A000
35 – 60Kб
Область памяти для выполнения про-
грамм пользователя и утилит MS-DOS.
В эту область попадают программы
типа *.COM и *.EXE
Область расположения стека испол-
няющейся программы
Транзитная часть командного процес-
сора COMMAND.COM
Видеопамять. Область и размер ис-
пользуемого видеобуфера зависит от
используемого режима
Зарезервировано для расширения
BIOS
Область ROM BIOS
(System BIOS)
High Memory Area
При наличии драйвера HIMEM.SYS
здесь можно расположить основные
системные файлы MS-DOS, освобож-
дая тем самым область основной па-
мяти в первом мегабайте
≈≈≈≈580Kб
18Kб
A0000- C7FFF 160Kб
C8000- E0000 96Kб
F0000- FFFFF 64Kб
100000-
В ранних версиях здесь распо-
лагались глобальные перемен-
ные интерпретатора Basic
Размер этой области зависит от
версии MS-DOS и, главное, от
конфигурационного файла
CONFIG.SYS
Размер этой области сильно
зависит от объёма, занимаемого
1 ... 5 6 7 8 9 10 11 12 ... 37
ядром ОС. Программа может
перекрывать транзитную
область COMMAND.COM.
Стек «растёт» снизу вверх
Собственно командный
интерпретатор
При работе в текстовом режиме
область памяти А0000-В0000
Свободна и может быть исполь-
зована в программе
Обычно объём этой области
равен 32Кб. Но может достигать
и 128 Кб, занимая и младшие
адреса
Может использоваться при на-
личии специальных драйверов.
Используются спецификации
XMS и EMS
107
Вся память в соответствии с архитектурой IBM PC условно может быть разби- та на три части.
В самых младших адресах памяти (первые 1024 ячейки) размещается таблица векторов прерываний (см. раздел «Система прерываний 32-разрядных микропро- цессоров i80x86», глава 3). Это связано с аппаратной реализацией процессора i8088, на котором была реализована ПК. В последующих процессорах (начиная с i80286) адрес таблицы прерываний определяется через содержимое соответст- вующего регистра, но для обеспечения полной совместимости с первым процес- сором при включении или аппаратном сбросе в этот регистр заносятся нули. При желании, однако, в случае использования современных микропроцессоров i80x86
можно разместить векторы прерываний и в другой области.
Вторая часть памяти отводится для размещения программных модулей самой
MS-DOS и для программ пользователя. Рассмотрим их размещение чуть ниже.
Здесь, однако, заметим, что эта область памяти называется Conventional Memory
(основная, стандартная память).
Наконец, третья часть адресного пространства отведена для постоянных запо- минающих устройств и функционирования некоторых устройств ввода/вывода. Эта область памяти получила название UMA (upper memory areas – область верхней па- мяти).
В младших адресах основной памяти размещается то, что можно назвать ядром этой ОС – системные переменные, основные программные модули, блоки данных для буферирования операций ввода/вывода. Для управления устройствами,
драйверы которых не входят в базовую подсистему ввода/вывода, загружаются так называемые загружаемые (или инсталлируемые) драйверы. Перечень инсталли- руемых драйверов определяется специальным конфигурационным файлом CON-
FIG.SYS. После загрузки расширения BIOS – файла IO.SYS – последний (загрузив модуль MSDOS.SYS) считывает файл CONFIG.SYS и уже в соответствии с ним подгружает в память необходимые драйверы. Кстати, в конфигурационном файле
CONFIG.SYS могут иметься и операторы, указывающие на количество буферов,
отводимых для ускорения операций ввода/вывода, и на количество файлов, кото-
108
рые могут обрабатываться (для работы с файлами необходимо зарезервировать ме- сто в памяти для хранения управляющих структур, с помощью которых выполня- ются операции с записями файла). В случае использования микропроцессоров i80x86 и наличия в памяти драйвера HIMEM.SYS модули IO.SYS и MSDOS.SYS
могут быть размещены за пределами первого мегабайта в области, которая получи- ла название HMA (high memory area).
Память с адресами, большими, чем 10FFFFh, может быть использована в DOS- программах при выполнении их на микропроцессорах, имеющих такую возмож- ность. Так, например, микропроцессор i80286 имел 24-разрядную шину адреса, а i80386 – уже 32-разрядную шину адреса. Но для этого с помощью специальных драйверов необходимо переключать процессор в другой режим работы, при кото- ром он сможет использовать адреса выше 10FFFFh. Широкое распространение по- лучили две основные спецификации: XMS (eXtended Memory Specification) и EMS
(Expanded Memory Specification). Поскольку основные утилиты, необходимые для обслуживания ПК, как правило, не используют эти спецификации, мы не будем здесь их рассматривать. Остальные программные модули MS-DOS (в принципе,
большинство из них является утилитами) оформлены как обычные исполняемые файлы. В основном они являются транзитными модулями, то есть загружаются в память только на время своей работы, хотя среди них имеются и TSR-программы.
Для того чтобы предоставить больше памяти программам пользователя, в MS-
DOS применено то же решение, что и во многих других простейших ОС – команд- ный процессор COMMAND.COM сделан состоящим из двух частей. Первая часть является резидентной, она размещается в области ядра. Вторая часть – транзитная;
она размещается в области старших адресов раздела памяти, выделяемой для про- грамм пользователя. И если программа пользователя перекрывает собой область, в которой была расположена транзитная часть командного процессора, то последний при необходимости восстанавливает в памяти свою транзитную часть, поскольку после выполнения программы она возвращает управление резидентной части
COMMAND.COM.
109
Поскольку размер основной памяти (conventional memory) относительно не- большой, то очень часто системы программирования реализуют оверлейные струк- туры. Для этого в MS-DOS есть специальные вызовы.
Распределение оперативной памяти в Microsoft Windows 95/98
С точки зрения базовой архитектуры ОС Windows 95/98 они обе являются 32- разрядными, многопотоковыми ОС с вытесняющей многозадачностью. Основной пользовательский интерфейс этих ОС – графический.
Для своей загрузки они используют операционную систему MS-DOS 7.0 (MS-
DOS 98), и в случае если в файле MSDOS.SYS в секции [Options] прописано
BootGUI = 0, то процессор работает в обычном реальном режиме (см. следующий раздел). Распределение памяти в MS-DOS 7.0. такое же, как и в предыдущих вер- сиях DOS. Однако при загрузке GUI-интерфейса перед загрузкой ядра Windows
95/98 процессор переключается в защищённый режим работы и начинает распре- делять память уже с помощью страничного механизма.
Использование так называемой плоской модели памяти, при которой все воз- можные сегменты, которые может использовать программист, совпадают друг с другом и имеют максимально возможный размер, определяемый системными со- глашениями данной ОС, приводит к тому, что с точки зрения программиста память получается неструктурированной. За счёт представления адреса как пары (Р, i) па- мять можно трактовать и как двумерную, то есть «плоскую», но при этом её можно трактовать и как линейную, и это существенно облегчает создание системного про- граммного обеспечения и прикладных программ с помощью соответствующих сис- тем программирования.
Таким образом, в системе фактически действует только страничный механизм преобразования виртуальных адресов в физические. Программы используют клас- сическую «small» (малую) модель памяти [73]. Каждая прикладная программа оп- ределяется 32-битными адресами, в которых сегмент кода имеет то же значение,
что и сегменты данных. Единственный сегмент программы отображается не- посредственно в область виртуального линейного адресного пространства, кото-