Лекция № 1
Архитектурные особенности IBM PC
Краткий обзор семейства микропроцессоров фирмы Intel
Микропроцессоры (МП) Intel 8086, 8088, 80286, 80386 и 80486, явившиеся в разные годы основой новых моделей персональных компьютеров фирмы IBM (IBM PC, PC/XT , PC/AT, PS/2) при всех своих различиях и особенностях сохраняют единство архитектурных принципов, системы команд и языка программирования, что обеспечивает программную совместимость многочисленных разновидностей компьютеров «типа IBM PC».
Важнейшей характеристикой любого микропроцессора является разрядность его внутренних регистров, также внешних шин адресов и данных. МП 8086 имеет 16-разрядную внутреннюю архитектуру и такой же разрядности шину данных. Все регистры внутри процессора, в которых могут хранится данные, имеют длину 16 битов. Таким образом, максимальное целое число (данное или адрес), с которым может работать микропроцессор, составляет 216-1=65536 (64К-1). Однако адресная шина МП 8086 содержит 20 линий, что соответствует адресному пространству 220-1 Мбайт. Для того, чтобы с помощью 16-разрядных адресов можно было обращаться в любую точку 20-разрядного адресного пространства, в микропроцессоре предусмотрена сегментная адресация памяти, реализуемая с помощью четырех сегментных регистров.
Суть сегментной адресации заключается в следующем. Исполнительный 20-разрядный адрес любой ячейки памяти вычисляется путем сложения начального адреса сегмента памяти, в котором располагается эта ячейка, со смещением к ней (в байтах) от начала сегмента, которое обычно называют относительным адресом или смещением. Сегментный адрес без четырех младших битов, т. е. Деленный на 16, хранится в одном из сегментных регистров. При вычислении исполнительного адреса процессор умножает содержимое сегментного регистра на 16 (путем сдвига влево на 4 двоичных разряда) и прибавляет к полученному 20-разрядному адресу относительный адрес.
Умножение базового адреса на 16 увеличивает диапазон адресуемых ячеек до величины 64 Кбайт * 16 = 1 Мбайт.
МП 8088 является, по существу, 8-разрядным вариантом МП 8086. В нем, как и в МП 8086, предусмотрена адресация физической памяти объемом до 1 Мбайт с помощью такого же набора сегментных регистров. Однако шина данных МП 8088 имеет ширину не 16, а 8 разрядов, т.е. доступ к памяти осуществляется байтами. Это обстоятельство никак не отражается на работе с процессором, так как, например, при считывании из памяти операнда-слова микропроцессор автоматически генерирует два цикла магистрали, реализующих чтение младшего и старшего байтов. С другой стороны, 8-разрядная шина данных облегчила согласование этого микропроцессора со схемами, разработанными ранее для 8-разрядных МП 8080 и 8085.
МП 80286, используемый как центральный процессор компьютеров IBM PC/AT, является усовершенствованным вариантом МП 8086, дополненным схемами управления памятью и ее защиты. МП 80286 работает с 16-разрядными операндами, но имеет 24-разрядную адресную шину, что соответствует адресному пространству 224=16 Мбайт. Однако описанный выше способ сегментной адресации памяти не позволяет выйти за пределы 1 Мбайт. Для преодоления этого ограничения в МП 80286 (так же, как и в МП 80386) используются два режима работы: реального адреса и виртуального защищенного адреса, или просто защищенный режим. В реальном режиме МП 80286 функционирует фактически так же, как МП 8086 с повышенным быстродействием и может обращаться лишь к 1 Мбайт адресного пространства. Оставшиеся 15 Мбайт памяти, даже если они установлены в компьютере, использоваться не могут.
В защищенном режиме по-прежнему используются сегменты и смещения в них, однако начальные адреса сегментов не вычисляются путем умножения на 16 содержимого сегментных регистров, а извлекаются из таблиц сегментных дескрипторов, индексируемых теми же сегментными регистрами. Каждый сегментный дескриптор занимает 6 байтов, из которых 3 байта (24 двоичных разряда) отводятся под сегментный адрес. Тем самым обеспечивается полное использование 24-разрядного адресного пространства.
В каждом сегментном регистре под индекс таблицы сегментных дескрипторов отводится 14 двоичных разрядов. Полный логический адрес адресуемой ячейки состоит из 14-разрядного индекса (номера) сегмента и 16-разрядного относительного адреса. Это позволяет каждой программе использовать до 230! байт логического, или виртуального пространства, которое, таким образом, в 64 раза превышает максимально возможный объем физической памяти. Операционная система виртуальной памяти хранит все сегменты выполняемых программ в большом дисковом пространстве, автоматически загружая в оперативную память те или иные сегменты по мере необходимости.
МП 80386 и 80486 являются высокопроизводительными процессорами с 32-разрядными шинами данных и адресов и 32-разрядной внутренней архитектурой. Последнее означает, что внутренние регистры этих процессоров, в отличие от процессоров ранних моделей, имеют длину 32 бита. Поэтому максимальное целое число, с который может работать микропроцессор, составляет 232-l=42949б729б (4Г-1). Во многих случаях использование 32-битовых операндов позволяет существенно упростить и ускорить вычисления. Помимо этого, в МП 80386 и 80486 расширен состав регистров, что также предоставляет программисту значительные удобства. Наконец, в новых моделях процессоров имеются встроенные средства поддержки многозадачного режима, а также мультипроцессорных систем. Естественно, что эти процессоры, как и МП 80286, могут работать в реальном и защищенном режимах. В последнем случае микропроцессор позволяет адресовать до 232=4 Гбайт физической памяти и 24б=64 Тбайт виртуальной. При этом следует подчеркнуть, что разработчиками обеспечена полная совместимость новых моделей процессоров со старыми, в том смысле, что программы, написанные для процессоров 8086-80286, т.е. с использованием 16-битовых операндов, выполняются на новых процессорах без всяких исправлений. Фактически программист, создающий программу, предназначенную для работы под управлением MS-DOS, может не задумываться над тем, какой процессор установлен на его компьютере.
Используемые в настоящее время версии MS-DOS работают в реальном режиме и не обеспечивают управление виртуальной памятью. В то же время обширные классы программ, в частности, программы управления технологическими процессами или научно-исследовательскими установками, не требуют использования защищенного режима и успешно работают в среде операционной системы MS-DOS. Вообще во многих случаях относительно простая и надежная система MS-DOS, получившая, к тому же, широчайшее распространение, оказывается удобнее более совершенных, но и значительно более сложных систем, реализующих все возможности современным микропроцессоров.
Распределение адресного пространства
В зависимости от модификации персонального компьютера и состава его периферийного оборудования распределение адресного пространства может несколько различаться. Тем не менее, размещение основных компонентов системы довольно строго унифицировано. Типичная схема использования адресного пространства компьютера приведена на рис. 1.1. Значения адресов на этом рисунке, как и повсюду далее в книге, даны в 16-ричной системе счисления. Признаком 16-ричного числа служит буква h, стоящая после числа.
1 Кбайт Векторы прерываний 00000h
2 56 байтов Область данных BIOS 00400h
5 12 байтов Область данных DOS 00500h
IO.SYS/MSDOS.SYS 00700h Стандартная память
Загружаемые драйверы (640 Кбайт)
COMMAND.COM
Дополнительная
память(EMS)
Свободная память память(EMS)
для загружаемых
прикладных и системных
программ А0000h
6 4 Кбайт Графический буфер EGA B0000h
3 2 Кбайт UMB B8000h
3 2 Кбайт Текстовый буфер EGA C0000h Верхняя память(384 Кбайт)
6 4 Кбайт ПЗУ-расширения BIOS D00000h
6 4 Кбайт UMB E00000h
1 28 Кбайт ПЗУ BIOS 1000000h
6 4 Кбайт HMA 10FFF0h
Д о 15 Мбайт
(80286) XMS Расширенная память
До 4 Гбайт
( 80386/486)
Первые 640 Кбайт, адресного пространства с адресами от OOOOOh до 9FFFFh отводятся под основную оперативную память, которую еще называют стандартной (conventional). Начальный килобайт оперативной памяти занят векторами прерываний (256 векторов по 4 байта). Вслед за векторами прерываний располагается область данных BIOS, которая занимает
адреса от 00400h до 004FFh. В этой области хранятся разнообразные данные, используемые программами BIOS в процессе управления периферийным оборудованием. Так, здесь размещаются:
- входной буфер клавиатуры с системой указателей;
- адреса последовательных и параллельных портов;
- данные, характеризующие настройку видеосистемы (форма курсора и его текущее местоположение на экране, текущий видеорежим, ширина экрана и прочее);
- ячейки для отсчета текущего времени;
- область межзадачных связей и т.д.
Область данных BIOS заполняется информацией в процессе начальной загрузки компьютера и динамически модифицируется системой по мере необходимости; многие прикладные программы обращаются к этой области с целью чтения или модификации содержащейся в ней информации.
В области памяти, начиная с адреса 500h, содержатся некоторые системные данные DOS. Вслед за областью данных DOS располагается собственно операционная система, загружаемая из файлов IO.SYS и MSDOS.SYS (1ВМВЮ.СОМ и IBMDOS.COM для системы PC-DOS). Система обычно занимает несколько десятков Кбайт.
Если в файл CONFIG.SYS включены директивы DEVICE=... загрузки устанавливаемых драйверов (ADM.SYS, SMARTDRV.SYS, EMM386.EXE, ANSI.SYS и др.), то они загружаются вслед за системой. Наконец, ниже драйверов размещается резидентная часть командного процессора COMMAND.COM, занимающая около 3 Кбайт. В функции резидентной части COMMAND.COM входит обработка <Ctrl>/C, <Ctrl>/<Break> и критических ошибок, вывод сообщений об ошибках, завершение текущей задачи, загрузка транзитной части COMMAND.COM. Транзитная, загружаемая часть COMMAND.COM размещается в самом конце оперативной памяти, затирается при загрузке программ и после завершения выполняемой программы должна загружаться с диска заново.
Перечисленные выше компоненты операционной системы занимают обычно 60-90 Кбайт. Вся оставшаяся память до границы 640 Кбайт (называемая иногда транзитной областью) свободна для загрузки любых системных или прикладных программ. Как правило, в начале сеанса в память загружают резидентные программы (русификатор, электронный блокнот, резидентные расширения DOS, программы контроля состояния диска, входящие, например, в состав Нортоновских утилит и др.). При наличии резидентных программ объем свободной памяти уменьшается. Оставшиеся 384 Кбайт адресного пространства, называемого верхней (upper) памятью, первоначально были предназначены для размещения постоянных запоминающих устройств (ПЗУ). Практически под ПЗУ занята только часть адресов. В самом конце адресного пространства, в области FOOOOh...FFFFFh (или EOOOOh... FFFFFh) располагается основное постоянное запоминающее устройство BIOS, а начиная с адреса COOOOh - так называемое ПЗУ расширений BIOS для обслуживания графических адаптеров и дисков. Часть адресного пространства верхней памяти отводится для адресации к видеобуферам графического адаптера. Приведенное на рисунке расположение видеобуферов характерно для адаптера EGA; для других адаптеров оно может быть иным, например, видеобуфер простейшего монохромного адаптера MDA занимает всего 4 Кбайт и располагается, начиная с адреса ВООООЮ.
В состав компьютеров PC/AT наряду со стандартной памятью (640 Кбайт) может входить расширенная (extended) память, максимальный объем которой зависит от ширины адресной шины процессора и при использовании процессора 80286 может достигать 15 Мбайт, а для процессоров 80386/486 - 4 Гбайт. Эта память располагается за пределами первого мегабайта адресного пространства и начинается с адреса lOOOOOh. Реально на машине может быть установлен не полный объем расширенной памяти, а лишь 2-3 Мбайт или даже меньше, например, всего 384 Кбайт.
Поскольку функционирование расширенной памяти подчиняется "спецификации расширенной памяти" (Extended Memory Specification, сокращенно XMS), то и саму память часто называют XMS-памятью. Как уже отмечалось выше, доступ к расширенной памяти осуществляется в защищенном режиме, поэтому для MS-DOS, работающей только в реальном режиме, расширенная память недоступна.
Однако в современные версии MS-DOS включается драйвер HIMEM.SYS, поддерживающий расширенную память, т.е. позволяющий ее использовать, хотя и ограниченным образом. Конкретно в расширенной памяти можно разместить электронные диски (с помощью драйвера RAMDRIVE.SYS) или кош буферы диска (с помощью драйвера SMARTDRV.SYS).
Первые 64 Кбайт расширенной памяти, точнее, 64 Кбайт -16 байт с адресами от lOOOOOh до lOFFEFh, носят специальное название область старшей памяти (High Memory Area, НМА). Эта область замечательна тем, что хотя она находится за пределами первого мегабайта, к ней можно обратиться в реальном режиме работы микропроцессора, если определить сегмент, начинающийся в самом конце мегабайтного адресного пространства. с ялпрся FFFFOh. и разрешить использование адресной линии А20. Первые 16 байтов этого сегмента заняты ПЗУ, область же со смещениями 0010h...FFFFh можно, в принципе, использовать под программы и данные. MS-DOS позволяет загружать в НМА (директивой файла CONFIG.SYS DOS=HIGH) значительную часть самой себя, в результате чего занятая системой, область стандартной памяти существенно уменьшается. Старшую память обслуживает тот же драйвер HIMEM.SYS, поэтому загрузка DOS и НМА возможна, только если установлен HIMEM.SYS.
Как видно из приведенного выше рисунка, часть адресного пространства верхней памяти, не занятая расширениями BIOS и видеобуферами, оказывается свободной. На компьютерах с МП 80386 и 80486 эти свободные участки можно использовать для адресации к расширенной памяти (конечно, не ко всей, а лишь к той ее части, объем которой совпадает с общим объемом свободных адресов верхней памяти). Пере отображение расширенной памяти на свободные адреса верхней памяти выполняет драйвер ЕММ386.ЕХЕ, а сами участки верхней памяти, "заполненные" расширенной, называются блоками верхней памяти (Upper Memory Blocks, UMB). MS-DOS позволяет загружать в UMB устанавливаемые драйверы устройств, а также резидентные программы-расширения DOS (APPEND.EXE, DOSKEY.COM, KEYB.COM и др.). Загрузка системных программ в UMB освобождает от них стандартную память, увеличивая ее транзитную область. В UMB можно загрузить также и прикладные резидентные программы. Загрузка в UMB драйверов осуществляется директивой файла CONFIG.SYS DEVICEHIGH (вместо директивы DEVICE), a загрузка резидентных программы - командой DOS LOADHIGH.
По умолчанию драйвер ЕММ386.ЕХЕ преобразует в UMB 128 Кбайт расширенной памяти, располагая ее по адресам СООО... CFFF. При необходимости (если, например, на эти адреса настроено какое-то нестандартное внешнее устройство) объем, и расположение UMB в адресном пространстве верхней памяти можно изменить с помощью ключей в строке установки драйвера ЕММ386.ЕХЕ.
Независимо от наличия и объема расширенной (XMS) памяти, компьютер может быть укомплектован платой с дополнительной памятью, не отвечающей каким-либо определенным адресам 16-мегабайтного адресного пространства. Эта память функционирует в соответствии со спецификацией Lotus-Intel-Microsoft Expanded Memory Specification (LIM EMS) и может достигать объема (в версии EMS 4/0) 32 Мбайт. Обращение к EMS-памяти осуществляется через относительно узкие окна (физические страницы) размером по 16 Кбайт, в качестве которых используется часть адресного пространства верхней памяти (от границы 640 Кбайт до 1 Мбайт). Любой блок дополнительной памяти, называемый логической страницей, может быть отображен на физическую страницу в верхней памяти, чем и обеспечивается прямая (хотя и не одновременная) адресация всего пространства дополнительной памяти. В дополнительной памяти, как и в расширенной, обычно размещают электронные диски или кеш- буферы, хотя спецификация EMS 4.0 допускает (в отличие, от EMS 3.2) выполнение программ, находящихся в дополнительной памяти.
Компьютеры типа PC/AT или PS/2 обычно оснащаются расширенной памятью того или иного объема, но не всегда дополнительной. Между тем, некоторые программы в процессе своего выполнения обращаются к дополнительной памяти и при ее отсутствии просто не будут функционировать. Для того, чтобы позволить таким программам выполняться на компьютерах без дополнительной памяти, предусмотрена возможность преобразования части расширенной памяти в дополнительную. Это преобразование осуществляет тот же драйвер ЕММ386.ЕХЕ. По умолчанию для отображения дополнительной памяти используется диапазон адресов верхней памяти DOOO...DFFF, который в этом случае, естественно, выпадает из области блоков верхней памяти UMB. При необходимости область отображения дополнительной памяти можно изменить.