Какие минусы у реального режима адресации
Перейти к содержимому

Какие минусы у реального режима адресации

  • автор:

Адреса памяти: физические, виртуальные, логические, линейные, эффективные, гостевые

Мне периодически приходится объяснять разным людям некоторые аспекты архитектуры Intel® IA-32, в том числе замысловатость системы адресации данных в памяти, которая, похоже, реализовала почти все когда-то придуманные идеи. Я решил оформить развёрнутый ответ в этой статье. Надеюсь, что он будет полезен ещё кому-нибудь.
При исполнении машинных инструкций считываются и записываются данные, которые могут находиться в нескольких местах: в регистрах самого процессора, в виде констант, закодированных в инструкции, а также в оперативной памяти. Если данные находятся в памяти, то их положение определяется некоторым числом — адресом. По ряду причин, которые, я надеюсь, станут понятными в процессе чтения этой статьи, исходный адрес, закодированный в инструкции, проходит через несколько преобразований.

На рисунке — сегментация и страничное преобразование адреса, как они выглядели 27 лет назад. Иллюстрация из Intel 80386 Programmers’s Reference Manual 1986 года. Забавно, что в описании рисунка есть аж две опечатки: «80306 Addressing Machanism». В наше время адрес подвергается более сложным преобразованиям, а иллюстрации больше не делают в псевдографике.

Начнём немного с конца — с цели всей цепочки преобразований.

Физический адрес

Конечный результат всех преобразований других типов адресов, перечисленных далее в этой статье — физический адрес. На нём кончается работа внутри центрального процессора по преобразованию адресов.

Конечный результат?!

На самом деле, легко понять, что это ещё не конец. В платформе, которая должна обработать запрос данных от процессора, может быть несколько чипов DRAM, имеющих собственную структуру разбиения на блоки, а также различные периферийные устройства, отображённые на общее пространство физической памяти. Дальнейший путь транзакции с некоторым физическим адресом будет зависеть от конфигурации нескольких декодеров, находящихся на её пути внутри устройств платформы.

Эффективный адрес

Эффективный адрес — это начало пути. Он задаётся в аргументах индивидуальной машинной инструкции, и вычисляется из значений регистров, смещений и масштабирующих коэффициентов, заданных в ней явно или неявно.

Например, для инструкции (ассемблер в AT&T-нотации)

addl %eax, 0x11(%ebp, %edx, 8)

эффективный адрес операнда-назначения будет вычислен по формуле:

eff_addr = EBP + EDX * 8 + 0x11

Логический адрес

Без знания номера и параметров сегмента, в котором указан эффективный адрес, последний бесполезен. Сам сегмент выбирается ещё одним числом, именуемым селектором. Пара чисел, записываемая как selector:offset , получила имя логический адрес. Так как активные селекторы хранятся в группе специальных регистров, чаще всего вместо первого числа в паре записывается имя регистра, например, ds:0x11223344.

Здесь обычно у тех, кто столкнулся с этими понятиями впервые, голова начинает идти кругом. Несколько упростить (или усложнить) ситуацию помогает тот факт, что почти всегда выбор селектора (и связанного с ним сегмента) делается исходя из «смысла» доступа. По умолчанию, если в кодировке машинной инструкции не сказано иного, для получения адресов кода используются логические адреса с селектором CS, для данных — с DS, для стека — с SS.

Линейный адрес

Эффективный адрес — это смещение от начала сегмента — его базы. Если сложить базу и эффективный адрес, то получим число, называемое линейным адресом:

lin_addr = segment.base + eff_addr

Преобразование логический → линейный не всегда может быть успешным, так как при его исполнении проверяется несколько условий на свойства сегмента, записанных в полях его дескриптора. Например, проверяется выход за границы сегмента и права доступа.

Реальный режим

Описанное выше верно при включенной сегментации. В 16-битном реальном режиме смысл селекторов другой, они хранят только базу, а преобразование не осуществляет сегментных проверок. Фактически, обозначения CS, DS, FS, GS, ES, SS имеют совершенно разный смысл в этих двух режимах, что добавляет путаницы.

Сегментация была модной на некотором этапе развития вычислительной техники. В настоящее она почти всюду была заменена другими механизмами, и используется только для специфических задач. Так, в режиме IA-32e (64-битном) только два сегмента могут иметь ненулевую базу. Для остальных четырёх в этом режиме всегда линейный адрес == эффективный.

Что такое виртуальный адрес?

В литературе и в документации других архитектур встречается ещё один термин — виртуальный адрес. Он не используется в документации Intel на IA-32, однако встречается, например, в описании Intel® Itanium, в котором сегментация не используется. Можно смело считать, что для IA-32 виртуальный == линейный.
В советской литературе по вычислительной технике этот вид адресов также именовался математическим.

Страничное преобразование

Следующее после сегментации преобразование адресов: линейный → физический — имеет множество вариаций в своём алгоритме, в зависимости от того, в каком режиме (32-битном, PAE или 64-битном) находится процессор.

Что влияет на paging

Примечательно, сколько различных бит из разных системных регистров процессора влияют на процесс страничного преобразования в настоящее время. Я просмотрел свежую сентябрьскую редакцию Intel SDM [1], и вот полный список: CR0.WP, CR0.PG, CR4.PSE, CR4.PAE, CR4.PGE, CR4.PCIDE, CR4.SMEP, CR4.SMAP, IA32_EFER.LME, IA32_EFER.NXE, EFLAGS.AC.

Однако общая идея всегда одна и та же: линейный адрес разбивается на несколько частей, каждая из которых служит индексом в одной из системных таблиц, хранящихся в памяти. Записи в таблицах — это адреса начала таблицы следующего уровня или, для последнего уровня — искомая информация о физическом адресе страницы в памяти и её свойствах. Самые младшие биты не преобразуются, а используются для адресации внутри найденной страницы. Например, для режима PAE с размером страниц 4 кбайт преобразование выглядит так:

В разных режимах процессора различается число и ёмкость этих таблиц. Преобразование может завершиться неудачей, если очередная таблица не содержит валидных данных, или права доступа, хранящиеся в последней из них, запрещают доступ к странице; например, при записи в регионы, помеченные как «только для чтения», или попытке чтения памяти ядра из непривилегированного процесса.

Гостевой физический

До введения возможностей аппаратной виртуализации в процессорах Intel страничное преобразование было последним в цепочке. Когда же на одной системе работают несколько виртуальных машин, то физические адреса, получаемые в каждой из них, приходится транслировать ещё один раз. Это можно делать программным образом, или же аппаратно, если процессор поддерживает функциональность EPT (англ. Extended Page Table). Адрес, раньше называвшийся физическим, был переименован в гостевой физический для того, чтобы отличать его от настоящего физического. Они связаны с помощью EPT-преобразования. Алгоритм последнего схож с ранее описанным страничным преобразованием: набор связанных таблиц с общим корнем, последний уровень которых определяет, существует ли физическая страница для указанной гостевой физической.

Полная картина

Я попытался собрать все преобразования адреса в одну иллюстрацию. В ней преобразования обозначены стрелками, типы адресов обведены в рамки.

Как уже было сказано выше, каждое из преобразований может вернуть ошибку для адресов, не имеющих представления в следующем по цепочке виде. Устранение подобных проблем — это задача операционных систем и мониторов виртуальных машин, реализующих абстракцию виртуальной памяти.

Заключение

Эволюция, что в природе, что в технике — странная вещь. Она порождает неожиданные структуры, необъяснимые с точки зрения рационального проектирования. Её творения полны атавизмов, правила их поведения иногда почти полностью состоят из исключений. Для того, чтобы понять работу такой системы, часто требуется прокрутить её эволюцию с самого начала, и под нагромождениями всех слоёв найти истину в виде принципа: «ничего не выбрасывать». Я склонен считать архитектуру IA-32 замечательным примером эволюционного развития.

P.S. Всё как у всех

Вскоре после завершения написания этой статьи я натолкнулся на презентацию об архитектуре IBM System z, которая примечательна в том числе своей долгой и интересной историей поддержки виртуализации. В этом документе нашлось перечисление всех типов адресов памяти, используемых в System z:

  1. Virtual: Translated by dynamic address translation (DAT) to real addresses
  2. Real: Translated to absolute addresses using the prefix register
  3. Absolute: After applying the prefix register
  4. Logical: The address seen by the program (this can either be a virtual or a real address)
  5. Physical: translated to absolute addresses by the Config Array

Как можно заметить, их тоже пять.

Спасибо за внимание!

Литература

  1. Intel Corporation. Intel® 64 and IA-32 Architectures Software Developer’s Manual. Volumes 1–3, 2014. www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

Реальный режим

Реальный режим (или режим реальных адресов) — это название было дано прежнему способу адресации памяти после появления процессора 80286, поддерживающего защищённый режим. Но только с появлением процессора 80386 можно говорить о защищённом режиме в современном понимании, так как в процессоре 80286 нет страничной адресации памяти.

Описание

В реальном режиме при вычислении линейного адреса, по которому процессор собирается читать содержимое памяти или писать в неё, сегментная часть адреса умножается на 16 (или, что то же самое, сдвигается влево на 4 бита) и суммируется со смещением (если процессору передаётся не полный адрес из двух 16-битных значений — сегмента и смещения, — а только 16-битное смещение, то сегмент берётся из одного из сегментных регистров). Таким образом, адреса 0400h:0001h и 0000h:4001h ссылаются на один и тот же физический адрес, так как 400h×16+1 = 0×16+4001h.

Такой способ вычисления физического адреса позволяет адресовать 1 Мб + 64 Кб − 16 байт памяти (диапазон адресов 0000h…10FFEFh). Однако в процессорах 8086/8088 всего 20 адресных линий, поэтому реально доступен только 1 мегабайт (диапазон адресов 0000h…FFFFFh), а при адресации выше (в диапазоне 100000h…10FFEFh) происходит «заворот» — старший единичный бит адреса игнорируется и доступ идёт к 64 килобайтам в начальных адресах (0000h…FFEFh).

В процессорах 80286/80288 адресная шина 24-битная (возможна адресация 2 24 = 16 Мб памяти), поэтому в них переполнения не происходит. Компьютеры IBM PC/AT построены на процессоре Intel 80286, но из соображений совместимости с IBM PC и IBM PC/XT, построенных на Intel 808x, в них был введён логический элемент (вентиль), отключающий 21-й адресный провод (A20) от схемы управления памятью. Этот логический элемент (Gate A20) управляется через контроллер клавиатуры (микросхема Intel 8042) и по умолчанию он включён.

Подробнее по этой теме см.: High Memory Area.

Использование

После подачи сигнала Reset или включения питания процессор работает в реальном режиме, в этом режиме происходит инициализация части аппаратуры, которая необходима для запуска в защищённом режиме. Например, контроллер памяти современного компьютера полностью программируемый, для того, чтобы запрограммировать его, необходимо считать содержимое микросхем EPD, декодировать его, и по таблицам запрограммировать временные параметры в регистрах чипсета, которые управляют режимом контроллера динамического ОЗУ. Если размеры кода и данных программы невелики, она может целиком исполняться в реальном режиме. Так, например, DOS использует реальный режим, как основной, и сама не пытается перевести процессор в защищённый режим, предоставляя это пользовательским программам. Ранние версии Microsoft Windows до 3.0 могли работать только в реальном режиме. Адресовать в реальном режиме дополнительную память за пределами 1 Мб нельзя (хотя можно использовать драйвера вроде HIMEM.SYS на машинах с процессором 80286 и выше). Несмотря на то, что фирма Intel не предусмотрела возврат процессора 80286 из защищённого в реальный режим, компьютер IBM PC-AT имеет такую возможность, так как в нём предусмотрена программная подача сигнала Reset на процессор, с возможностью отличить этот вариант от обычного аппаратного «сброса», при этом компьютер не выполняет начальную загрузку, а управление передаётся процедуре, поместившей адрес возврата в стек. В процессоре 80386 возможность программного возврата в реальный режим появилась, но большее значение имеет другой специальный режим — режим виртуальных адресов V86. При этом программы получают возможность использовать прежний способ вычисления линейного адреса, в то время как процессор находится в защищённом режиме. Режим V86 позволил организовать работу DOS внутри многозадачных систем вроде OS/2 и Microsoft Windows. При этом каждой DOS-машине доступен только 1 мегабайт адресного пространства, но их может быть запущено одновременно большое количество.

Структура адресного пространства IBM PC в реальном режиме

Основная область памяти

В область, называемую основной областью памяти (англ. conventional memory ), загружается таблица векторов прерываний, различные данные BIOS, а также могут загружаться 16-битные программы DOS. Основная область памяти занимает 640 Кбайт начиная с адреса 0000:0000.

Upper Memory Area

Upper Memory Area (UMA) занимает 384 Кбайт и используется для размещения информации об аппаратной части компьютера. Область условно делится на три области по 128 Кбайт. Первая область служит для видеопамяти. Через вторую область доступны BIOS адаптеров. Третья область используется системной BIOS, но, как правило, не полностью (обычно остаётся 64 Кбайт). Остальное адресное пространство из верхней области с помощью специальных драйверов (например, EMM386.EXE, EMS.EXE, LIMEMS.EXE и т. п.) и/или устройств расширения может использоваться для доступа к расширенной памяти через спецификацию расширенной памяти (англ. Expanded Memory Specification, EMS ).

Дополнительная область памяти

Дополнительная память для 16-битных программ доступна через спецификацию дополнительной памяти (англ. eXtended Memory Specification, XMS ). Дополнительная память начинается с адресов выше первого мегабайта и её объём зависит от общего объёма оперативной памяти, установленной на компьютере.

High Memory Area

High Memory Area (HMA) — это область дополнительной памяти сразу за первым мегабайтом размером 64 Кбайт минус 16 байт. Её появление обусловлено особенностью процессора 80286, в котором 24 линии адреса и при обращении по адресам выше FFFF:000F обращение идёт ко второму мегабайту памяти (вместо начала первого мегабайта, как в 8086/8088). Таким образом, программы реального режима получили доступ к HMA.

См. также

  • Защищённый режим
  • Unreal mode
  • Архитектура ядер операционных систем
  • Архитектура компьютеров

Wikimedia Foundation . 2010 .

Реальный режим

Реальный режим (или режим реальных адресов) — это название было дано прежнему способу адресации памяти после появления процессора 80286, поддерживающего защищённый режим. Но только с появлением процессора 80386 можно говорить о защищённом режиме в современном понимании, так как в процессоре 80286 нет страничной адресации памяти.

Описание [ править ]

В реальном режиме при вычислении линейного адреса, по которому процессор собирается читать содержимое памяти или писать в неё, сегментная часть адреса умножается на 16 (или, то же самое, что и сдвиг влево на 4 бита) и суммируется со смещением (если процессору передаётся не полный адрес из двух 16-битных значений — сегмента и смещения, — а только 16-битное смещение, то сегмент берётся из одного из сегментных регистров). Таким образом, адреса 0400h:0001h и 0000h:4001h ссылаются на один и тот же физический адрес, так как 400h×16+1 = 0×16+4001h.

Такой способ вычисления физического адреса позволяет адресовать 1 Мб + 64 Кб − 16 байт памяти (диапазон адресов 0000h…10FFEFh). Однако в процессорах 8086/8088 всего 20 адресных линий, поэтому реально доступен только 1 мегабайт (диапазон адресов 0000h…FFFFFh), а при адресации выше (в диапазоне 100000h…10FFEFh) происходит «заворот» — старший единичный бит адреса игнорируется и происходит обращение к 64 килобайтам в начальных адресах (0000h…FFEFh).

Процессор 80286 имеет 24-битную адресную шину (возможна адресация 2 24 = 16 Мб памяти), поэтому в них переполнения не происходит. Компьютеры IBM PC/AT построены на процессоре Intel 80286, но, из соображений совместимости с IBM PC и IBM PC/XT, построенных на Intel 808x, в них был введён логический элемент (вентиль), управляющий работой 21-го адресного провода (A20). Этот логический элемент, получивший название «Gate A20», по умолчанию отключен, что соответствует режиму совместимости, но управляется через контроллер клавиатуры (микросхема Intel 8042).

Подробнее по этой теме см. High Memory Area.

Использование [ править ]

После подачи сигнала сброса или включения питания процессор начинает работу в реальном режиме; в этом режиме начинается исполнение BIOS IBM PC-совместимого компьютера. В реальном режиме может быть выполнена инициализация части аппаратуры (например, контроллер ОЗУ чипсета), которая необходима для работы программ после переключения в защищённый режим.

Если размеры кода и данных программы невелики, она может целиком исполняться в реальном режиме. Так, например, DOS использует реальный режим, как основной, и сама не пытается перевести процессор в защищённый режим, предоставляя это пользовательским программам. Ранние версии Microsoft Windows могли работать только в реальном режиме. Даже Windows 3.0, среди трёх режимов работы, предусматривала запуск в реальном режиме и могла выполняться на 8086.

Процессоры 80286 и более поздние, работая в реальном режиме, в основном, сохраняют те же ограничения на размер адресного пространства, что и 8086. Для использования большего объёма памяти программам, разработанным для реального режима, необходимы специальные средства. На машинах с процессором 80286 и выше, можно, например, использовать драйверы вроде HIMEM.SYS. Есть также средства, предоставляемые недокументированной командой LOADALL (что, однако, сопряжено с целым рядом трудностей). Начиная с 80386 появилась опять же не документированная фирмой Intel возможность перевести процессор в режим, неофициально называемый «Unreal mode», позволяющий, хоть и с некоторыми ограничениями, использовать 32-битное физическое адресное пространство (4 Гбайт).

Несмотря на то, что Intel не предусмотрела возврат процессора 80286 из защищённого в реальный режим, компьютер IBM PC/AT имеет такую возможность, благодаря аппаратным особенностям и BIOS. Так, в нём предусмотрена программная подача сигнала сброса на процессор. BIOS также может различать причины/режимы перезапуска, анализируя содержимое ячейки памяти 40h:72h и байта по адресу 0Fh в конфигурационной памяти (CMOS). Поэтому можно заставить BIOS не выполнять начальную загрузку, оставить содержимое ОЗУ тем же, что и до сброса, а управление передать по адресу, помещённому в ячейку 40h:67h. Таким образом программа может многократно переключаться между защищённым и реальным режимами, хотя этот способ требует сравнительно большого расхода времени на каждое переключение.

Возможность «нормального», без ухищрений, программного возврата в реальный режим была предусмотрена Intel только в процессорах 80386 и выше. Однако в 80386 большую ценность имеет другая новая возможность — Режим виртуального 8086 (V86, VM86). При этом программы получают возможность использовать как бы прежний способ адресации 8086, в то время как процессор находится в защищённом режиме, а линейный адрес, вычисленный по правилам 8086, подвергается страничной трансляции. Режим V86 позволил создавать виртуальные машины. Операционная система может ограничить доступ к той или иной области памяти (см. Защита памяти) для каждой виртуальной машины, выделять для них виртуальную память вместо реальной физической и контролировать обращения к портам ввода-вывода. Всё это используется для организации работы DOS внутри многозадачных систем вроде OS/2 и Microsoft Windows. При этом каждой виртуальной DOS-машине доступен только 1 мегабайт адресного пространства, но их может быть запущено одновременно большое количество.

Структура адресного пространства IBM PC в реальном режиме [ править ]

Основная область памяти [ править ]

В область, называемую основной областью памяти (англ. conventional memory ), загружается таблица векторов прерываний, различные данные BIOS, а также могут загружаться 16-битные программы DOS. Основная область памяти занимает 640 Кбайт начиная с адреса 0000:0000.

Upper Memory Area [ править ]

Upper Memory Area (UMA) занимает 384 Кбайт и используется для размещения информации об аппаратной части компьютера. Область условно делится на три области по 128 Кбайт. Первая область служит для видеопамяти. Через вторую область доступны BIOS адаптеры. Третья область используется системной BIOS, но, как правило, не полностью (обычно остаётся 64 Кбайт). Остальное адресное пространство из верхней области с помощью специальных драйверов (например, EMM386.EXE, EMS.EXE, LIMEMS.EXE и т. п.) и/или устройств расширения может использоваться для доступа к расширенной памяти через спецификацию расширенной памяти (англ. Expanded Memory Specification, EMS ).

Дополнительная область памяти [ править ]

Дополнительная память для 16-битных программ доступна через спецификацию дополнительной памяти (англ. eXtended Memory Specification, XMS ). Дополнительная память начинается с адресов выше первого мегабайта и её объём зависит от общего объёма оперативной памяти, установленной на компьютере.

High Memory Area [ править ]

High Memory Area (HMA) — это область дополнительной памяти сразу за первым мегабайтом размером 64 Кбайт минус 16 байт. Её появление обусловлено особенностью процессора 80286, в котором 24 линии адреса и при обращении по адресам выше FFFF:000F обращение идёт ко второму мегабайту памяти (вместо начала первого мегабайта, как в 8086/8088). Таким образом, программы реального режима получили доступ к HMA.

Реальный режим — Real mode

Реальный режим, также называемый режим реального адреса, является рабочим режимом для всех x86 -совместимых Процессоры. Этот режим получил свое название от того факта, что адреса в реальном режиме всегда соответствуют реальным ячейкам памяти. Реальный режим характеризуется 20- бит сегментированным пространством адреса памяти (что дает ровно 1 MiB адресуемой памяти) и неограниченным прямым программным доступом ко всей адресуемой памяти, Адреса ввода-вывода и периферийное оборудование. Реальный режим не поддерживает защиту памяти, многозадачность или уровни привилегий кода.

До выпуска 80286, который вводил защищенный режим, реальный режим был единственным доступным режимом для процессоров x86; и для обратной совместимости все процессоры x86 при сбросе запускаются в реальном режиме, хотя при запуске в других режимах можно эмулировать реальный режим в других системах.

  • 1 История
  • 2 Емкость адресации
  • 3 Линия A20
  • 4 Переключение в реальный режим
  • 5 Отклонение
  • 6 См. Также
  • 7 Справочные материалы
  • 8 Внешние ссылки

История

Архитектура 286 представила защищенный режим, позволяющий (среди прочего) защитить память на уровне оборудования. Однако для использования этих новых функций требовалась новая операционная система, специально разработанная для защищенного режима. Поскольку основной проектной спецификацией микропроцессоров x86 является их полная обратная совместимость с программным обеспечением, написанным для всех микросхем x86 до них, микросхема 286 была создана для запуска в « реальном режиме », то есть в режиме который отключил новые функции защиты памяти, чтобы можно было запускать операционные системы, написанные для 8086 и 8088. По состоянию на 2018 год текущие процессоры x86 (включая процессоры x86-64 ) могут загружать операционные системы в реальном режиме и могут запускать программное обеспечение, написанное практически для любого предыдущего чипа x86, без эмуляции или виртуализации.

BIOS ПК, представленный IBM, работает в реальном режиме, как и операционные системы DOS (MS-DOS, DR-DOS, так далее.). Ранние версии Microsoft Windows работали в реальном режиме. Windows / 386 позволила частично использовать защищенный режим, и это было более полно реализовано в Windows 3.0, которая могла работать как в реальном режиме, так и в защищенном режиме в на манер Windows / 386. В Windows 3.0 на самом деле было несколько режимов: «реальный режим», «стандартный режим» и «386-расширенный режим», последний требовал некоторых функций виртуализации процессора 80386 и, таким образом, не мог работать на 80286. Windows 3.1 удалила поддержку для реального режима, и это была первая основная операционная среда, для которой требовался как минимум процессор 80286. Архитектура Windows 95 является развитием Windows for Workgroups «386 расширенного режима». Ни одна из этих версий не могла считаться современной операционной системой x86, поскольку они перешли в защищенный режим только для определенных функций. (Unix, Linux, OS / 2, Windows NT 3.x и выше и т. Д. Считаются современными ОС, поскольку они переключаются ЦП переходит в защищенный режим при запуске, никогда не возвращается в реальный режим и постоянно обеспечивает все преимущества защищенного режима.) 64-разрядные операционные системы используют это только как еще один шаг к переходу в длинный режим. Стоит отметить, что защищенный режим 80286 значительно более примитивен, чем улучшенный защищенный режим, представленный в 80386; последний иногда называют защищенным режимом 386, и это режим, в котором работают современные 32-разрядные операционные системы x86.

Емкость адресации

8086, 8088 и 80186 имеют 20-битный адрес шина, но необычная схема сегментированной адресации, которую Intel выбрала для этих процессоров, фактически дает эффективные адреса, которые могут иметь 21 значащий бит. Эта схема сдвигает 16-разрядный номер сегмента на четыре бита влево (делая 20-разрядное число с четырьмя младшими нулями) перед добавлением к нему 16-разрядного смещения адреса; максимальная сумма возникает, когда и сегмент, и смещение равны 0xFFFF, что дает 0xFFFF0 + 0xFFFF = 0x10FFEF. На 8086, 8088 и 80186 результат эффективного адреса, который выходит за пределы 20 битов, заключается в том, что адрес «оборачивается» до нулевого конца диапазона адресов, то есть берется по модулю 2 ^ 20 (2 ^ 20 = 1048576 = 0x100000). Однако 80286 имеет 24 бита адреса и вычисляет эффективные адреса до 24 бит даже в реальном режиме. Следовательно, для сегмента 0xFFFF и смещения больше 0x000F 80286 фактически будет осуществлять доступ к началу второго мебибайта памяти, тогда как 80186 и более ранние будут обращаться к адресу, равному [смещение] — 0x10, что находится в начале первого мебибайта. (Обратите внимание, что на 80186 и более ранних версиях первый кибибайт адресного пространства, начиная с адреса 0, является постоянным неподвижным местом таблицы векторов прерываний.) Итак, фактический объем памяти, адресуемой процессоры x86 80286 и более поздних версий в реальном режиме: 1 MiB + ​​64 KiB — 16 B = 1114096 B.

A20 line

Некоторые программы, предшествующие 80286, были спроектированы так, чтобы использовать преимущества циклической адресации памяти (по модулю), поэтому 80286 представлял проблему для обратной совместимости. Принуждение 21-й адресной строки (фактического провода логического сигнала, выходящего из микросхемы) к низкому логическому уровню, представляющему ноль, приводит к эффекту по модулю 2 ^ 20, чтобы соответствовать арифметике адресов более ранних процессоров, но 80286 не имеет внутреннего возможность выполнять эту функцию. Когда IBM использовала 80286 в своем IBM PC / AT, они решили эту проблему, включив программно настраиваемый вентиль для включения или отключения (принудительного обнуления) адресной линии A20 между контактом A20 на 80286. и системная шина; он известен как Gate-A20 (вентиль A20) и до сих пор используется в наборах микросхем для ПК. Большинство версий драйвера расширенной памяти HIMEM.SYS для IBM- / MS-DOS, как известно, отображалось при загрузке сообщения о том, что они установили «обработчик A20», часть программного обеспечения для управления Gate-A20 и согласования его с потребностями программ.. В защищенном режиме необходимо включить линию A20, иначе возникнут ошибки физической адресации, которые могут привести к сбою системы.

Переключение в реальный режим

Intel ввела защищенный режим в семейство x86 с намерением, чтобы операционные системы, в которых он использовался, работали полностью в новом режиме и чтобы все программы, работающие в защищенном режиме, работали система также будет работать в защищенном режиме. Из-за существенных различий между реальным режимом и даже довольно ограниченным 286 защищенным режимом программы, написанные для реального режима, не могут работать в защищенном режиме без перезаписи. Поэтому, имея широкую базу существующих приложений реального режима, от которых зависели пользователи, отказ от реального режима создавал проблемы для отрасли, и программисты искали способ переключаться между режимами по желанию. Тем не менее, Intel, в соответствии со своими намерениями в отношении использования процессора, предоставила простой способ переключения в защищенный режим на 80286, но не простой способ вернуться в реальный режим. До модели 386 единственным способом переключения из защищенного режима обратно в реальный режим был сброс процессора; после сброса он всегда запускается в реальном режиме, чтобы быть совместимым с более ранними процессорами x86 обратно на 8086. Сброс процессора не очищает оперативную память системы, поэтому это, хотя и неудобно и неэффективно, на самом деле возможно. В защищенном режиме состояние процессора сохраняется в памяти, затем процессор сбрасывается, перезапускается в реальном режиме и выполняет некоторый код реального режима для восстановления сохраненного состояния из памяти. Затем он может запускать другой код реального режима, пока программа не будет готова вернуться в защищенный режим. Переключение в реальный режим требует больших затрат времени, но этот метод позволяет программам в защищенном режиме использовать такие службы, как BIOS, который работает полностью в реальном режиме (изначально был разработан для 8088 на основе IBM Personal Computer модель (тип машины) 5150). Этот метод переключения режимов также используется DPMI (в реальном, не эмулируемом, DOS) и расширителями DOS, такими как DOS / 4GW, чтобы разрешить защищенный режим программы для работы под DOS; система DPMI или расширитель DOS переключается в реальный режим для вызова вызовов DOS или BIOS, а затем переключается обратно, чтобы вернуться к прикладной программе, которая работает в защищенном режиме.

Отклонить

Переход к ядру NT привел к тому, что операционная система не нуждалась в DOS для загрузки компьютера, а также не могла ее использовать. После Windows 3.1x необходимость перезагружать компьютер в реальном режиме MS-DOS уменьшалась, пока она больше не поддерживалась в Windows ME. Единственный способ в настоящее время запускать приложения DOS, которые требуют реального режима из более новых версий Windows, — это использовать эмуляторы, такие как продукты DOSBox или x86 virtualization.

См. Также

Ссылки

Внешние ссылки

  • Чурдакис, Майкл (21 мая 2015 г.). «Настоящее, защищенное, длинное руководство по сборке для ПК». Проект кода.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *