Ответ: Адресное пространство первого ПК составляло всего 1 Мбайт, при этом верхние 384 Кбайт были зарезервированы для использования самой системой. Размещение зарезервированного пространства в верхней области (между 640 Кбайт и 1 Мбайт) вместо использования нижней области памяти (между 0 и 384 Кбайт) привело к появлению так называемого барьера основной памяти. Постоянная необходимость совмещать систему и периферийное оборудование и сегодня не всегда позволяет разработчикам отступать от стандартной конфигурации первого ПК. Вот почему вопросы распределения памяти в современных персональных компьютерах так и остались неразрешенными. Несмотря на то что со времени появления первого ПК прошло более 20 лет, в системах с процессорами Core 2 Extreme и Athlon 64 X2 по-прежнему используется то же распределение памяти, что и в первых компьютерах.
Рассмотрим вопрос логической организации памяти в исторической перспективе. Существуют два основных режима работы компьютера, которые сильно отличаются один от другого. Первые ПК на базе процессора Intel 8088 могли выполнять только 16-разрядные инструкции, и этот режим был назван реальным режимом процессора. Эти первые процессоры позволяли адресовать до 1 Мбайт памяти, последние 384 Кбайт которой были зарезервированы для использования видеокартами (в качестве видеопамяти), прочими адаптерами (для выгрузки собственной системы BIOS и хранения буферов памяти) и самой материнской платой (также для выгрузки BIOS).
Процессоры 286 позволяли адресовать уже 16 Мбайт оперативной памяти. Для ее использования процессор должен был переходить в так называемый защищенный
режим. К сожалению, все операционные системы того времени позволяли адресовать только первый мегабайт памяти, так что программам, которым требовался больший объем, приходилось прибегать к помощи разного рода дополнительных драйверов. Только с помощью таких приемов в DOS и Windows 3.x стало возможным получать доступ к первым 16 Мбайт памяти. Одна из сложностей состояла в том, что доступная операционной системе область памяти была сегментированной. Ей были доступны первые 360 Кбайт и последние 15 Мбайт; 385 Кбайт, лежащие между ними, оставались зарезервированными для аппаратных нужд.
Когда в 1985 году компания Intel выпустила первый 32-разрядный процессор (386DX), произошли серьезные изменения в архитектуре памяти. Теперь процессор уже мог адресовать до 4 Гбайт оперативной памяти, однако она была доступна только в 32-разрядном защищенном режиме, в котором могли выполняться только 32-разрядные инструкции. Этот режим был предназначен для новых, более совершенных операционных систем, таких как Windows 9x/NT/2000/XP/Vista, Linux, OS/2, Unix и др. На смену старой пришла новая архитектура памяти, с которой могло работать 32-разрядное программное обеспечение. К сожалению, до появления первой 32-разрядной операционной системы оставалось еще десять лет. С точки зрения программных инструкций все процессоры начиная с 386 являются всего лишь его ускоренными версиями. Если не учитывать.дополнительные инструкции работы с мультимедиа MMX и SSE (или 3DNow! в процессорах от AMD), даже процессоры Pentium 4 и Athlon представляли всего лишь разогнанные версии процессора 386. И что еще более интересно, 64-разрядные процессоры для серверных систем, такие как Intel Itanium и AMD Opteron, также можно отнести к этой категории, поскольку на них выполнялось все то же 32-разрядное программное обеспечение.
Основная проблема состояла в том, что 32-разрядные процессоры имели два совершенно различных режима работы, каждый из которых использовал свою архитектуру памяти. Из соображений обратной совместимости эти процессоры могут работать в реальном режиме, обслуживая только 16-разрядные программы, способные обращаться только к первым одному или шестнадцати мегабайтам памяти (в зависимости от того, как они были написаны). К примеру, 16-разрядные драйверы могут быть загружены только в первый мегабайт памяти и только к нему могут обращаться. В категорию 16-разрядных программ входят системная BIOS, включая процедуру POST, программа настройки BIOS, загрузочный код и все внутренние драйверы. Причиной этого является то, что при включении питания компьютера все Intel-совместимые процессоры начинают работу в реальном режиме. Процессоры переключаются в защищенный режим только инструкциями загружаемой 32-разрядной операционной системы.
Переключение в 32-разрядный защищенный режим происходит на начальной стадии загрузки операционной системы. После этого загружаются все 32-разрядные драйверы устройств и только затем — все остальные компоненты операционной системы. Находясь в защищенном режиме, операционная система и все программы могут обращаться ко всей памяти, установленной в системе, вплоть до верхнего предела процессора (в процессорах, начиная с Pentium II, это 64 Гбайт). Аналогично происходит переключение 64-разрядных процессоров в защищенный режим при загрузке 64-разрядной операционной системы.
Простите за тавтологию, но основной проблемой защищенного режима является его защищенность. Свое название этот режим получил из-за того, что в нем обращаться к устройствам могут только драйверы. Программы, загружаемые операционной системой (например, двойным щелчком на значке в Windows), не могут обращаться напрямую к памяти или каким-либо устройствам. Эта защита была введена для того, чтобы некорректные действия одной программы не могли нарушить общую работоспособность системы. Если вы уже работали в Windows, то наверняка сталкивались с ситуацией, когда внезапно открывается окно с сообщением, что программа выполнила недопустимую операцию и будет закрыта.
Программы диагностики по своей природе должны напрямую обращаться к оборудованию. Это значит, что в среде операционных систем, работающих в защищенном режиме (таких, как Windows 9x/NT/2000/XP/Vista и Linux), возможности тестирования ограничены. Для выполнения полного тестирования необходимо загрузиться с дискеты или компактдиска DOS или прервать загрузку Windows с помощью клавиши <F8> и выбрать в меню режим поддержки командной строки. В системах семейства Windows 9x (кроме Windows Me) можно выполнить перезагрузку в режим MS-DOS. Большинство профессиональных программ диагностики содержат собственные 16-разрядные операционные системы, позволяющие обращаться ко всей памяти даже из DOS. Работая в операционных системах Windows 2000 и XP, можно отформатировать загрузочную дискету MS-DOS, установив соответствующий флажок в диалоговом окне форматирования. Это окно открывается после щелчка правой кнопкой мыши на значке дисковода в окне Мой компьютер и выбора в контекстном меню пункта Форматировать (Windows 2000/XP) или с помощью меню Форматировать в окне Компьютер (Windows Vista).
К примеру, после загрузки с загрузочного диска Windows 9x на самом деле запускается 16-разрядная версия DOS, и, если вам нужен доступ к приводу оптических дисков (к примеру, для установки Windows), с этого же диска необходимо загрузить соответствующий 16-разрядный драйвер устройства. В этом режиме можно выполнять разбиение жесткого диска на разделы и их форматирование, устанавливать Windows и выполнять полноценную диагностику системы. Все OEM-версии Windows 98 и более новые поставляются на загрузочных компакт-дисках, так что, если система поддерживает загрузку с компакт-диска, установите в настройках BIOS привод CD-ROM в качестве первого загрузочного устройства. Таким образом можно избежать необходимости создания отдельной загрузочной дискеты.
Подытожим сказанное. Даже несмотря на то, что сегодня система MS-DOS не находит широкого применения в компьютерном мире, такие операции, как установка и конфигурирование системы, а также полноценное тестирование устройств и восстановление данных, все же необходимо выполнять в среде 16-разрядной ОС. В этом режиме архитектура системы изменяется, становится доступным меньший объем памяти, в результате чего все программное обеспечение (т.е. 16-разрядные драйверы и код приложений) должно вместиться в первые 1 Мбайт (или в 640 Кбайт) оперативной памяти.
Области системной памяти, включая верхние 384 Кбайт первого мегабайта (используемые для BIOS адаптеров и материнской платы, а также для видеопамяти), являются частью общей архитектуры компьютера. Они существуют независимо от того, какие приложения запускаются: 16- или 32/64-разрядные. В то же время ограничения на их использование в 16-разрядной среде более строгие. Современные 3-разрядные операционные системы Windows 9x/2000/XP/Vista и Linux, под управлением которых работает большинство компьютерных систем, а также их 64-разрядные версии автоматически управляют использованием оперативной памяти. Это значит, что нет никакой необходимости управлять распределением памяти вручную, что было характерно для 16-разрядных операционных систем.
Если в силу тех или иных обстоятельств вам приходится работать в DOS или 16-разрядных версиях Windows или если в системе установлены старые адаптеры ISA, EISA, MCA и VL-Bus, необходимо четко понимать логическую карту памяти, чтобы избежать конфликтов между устройствами и оптимизировать общую производительность системы.
Более подробно о структуре логической памяти и методах оптимизации ее использования можно узнать из главы 6 предыдущего издания данной книги, электронная версия которого доступна на прилагаемом диске.