8первые версии ОС для AS/400 были внесены изменения, позволявшие уменьшить проблему переполнения адресов. Компоненты стали использовать 64-килобай-тные сегменты вместо 16-мегабайтных, везде, где было возможно. Был также задействован ранее выброшенный квадрант адресного пространства. Разумеется, эти изменения не решили проблему, но они позволили нам продержаться до появления новых RISC-процессоров.
Проблема касалась и постоянных адресов. Их максимальное число ограничено объемом дискового пространства на подключенных к системе устройствах, поскольку даже удаленные объекты продолжают занимать некоторое место на диске. Мы ограничили общий объем дискового пространства, которое могло быть подключено к AS/ 400, чтобы пользователь не мог исчерпать постоянные адреса. Ведь выход за пределы постоянных адресов нельзя исправить с помощью IPL, здесь потребуется полная переустановка системы, что, разумеется, совершенно неприемлемо.
Я потратил несколько разделов на описание структуры адресации System/38 и первых моделей AS/400, чтобы показать причины, заставившие IBM перейти на RISC-процессоры. Еще до выпуска первой AS/400 мы знали, что 48-разрядный адрес ограничивает будущий рост системы. По мере увеличения размеров и скорости работы, системы начинали использовать все больше временных адресов. Заказчики же хотели подключать все больший объем дисков.
Нам потребовалось некоторое время, чтобы убедить руководство в невозможности использовать 48-разрядный адрес в будущих системах. В Рочестере всегда была популярна старая поговорка: «Не надо чинить то, что не ломается». И вот, наконец, мы убедили менеджеров, что то, что сломалось, сломалось безвозвратно. Хорошо еще то, что поломка случилась внутри системы. Независимость AS/400 от технологии защитила наших заказчиков.
Если в вычислительной архитектуре изменяются адреса, то приходится менять и все остальное. Мы восприняли случившееся как шанс избавиться от IMPI и перейти на RISC. Наш первый RISC-процессор, который мы начали разрабатывать в 1990 году и назвали С-RISC («С» — обозначает коммерческий), имел 96-разрядный адрес. У нас появилось место для такого большого адреса в указателях, и мы не стали стесняться. Когда в 1991 году было принято решение использовать архитектуру PowerPC, размер адреса был сокращен до 64 разрядов.
Трансляция адреса
Перед обращением в память виртуальный адрес в любой вычислительной системе должен быть транслирован в реальный. Ранее мы говорили, что в архитектуре PowerPC есть еще один уровень адресов, которые называются эффективными и используются программами. Эффективный адрес должен быть сначала транслирован в виртуальный, и только после этого — в реальный. В этом разделе мы рассмотрим, как выполняются эти трансляции. Приготовьтесь, некоторые детали могут показаться Вам слишком «острыми».
Характеристики модели памяти
Мы уже познакомились с некоторыми характеристиками памяти AS/400. Приведем снова список этих характеристик вместе с другими, которые мы еще пока не рассматривали, но обязательно сделаем это.
Размер страницы — 212 байта (4
Диапазон эффективных адресов — 264 байта:
число эффективных сегментов — 240;
размер эффективного сегмента — 224 байта (16 MБ).
•Два специальных типа эффективных адресов, отменяющих трансляцию, для идентификации которых используются 12 старших разрядов (3 шестнадцатиричные цифры):
800h — эффективный=реальный (E=R) отображают всю реальную память, для них выделено 228 эффективных сегментов;
801h — эффективный=прямое-сохранение (E=DS) отображают пространство ввода-вывода, для них выделено 228 эффективных сегментов.
•Диапазон виртуальных адресов — 264 байта:
число виртуальных сегментов — 240 -229;
размер виртуального сегмента — 224 байта (16 MБ).
•Диапазон реальных адресов — 252 байта.
Все характеристики приведены для используемого в AS/400 режима активных тегов 64-разрядных процессоров.
Регистр состояния машины
Процесс трансляции адресов управляется режимом активных и неактивных тегов и состоянием процессора. Состояние процессора определяется специальным регистром, называемым регистром состояния машины MSR (Machine State Register). Разряды этого регистра управляют некоторыми операциями процессора, в том числе трансляцией адреса. В главе 9 мы рассмотрим этот регистр и способ изменения его разрядов. А пока, чтобы лучше понять трансляцию адреса, затронем лишь несколько разрядов MSR, а именно:
•Разряд 64-разрядного режима (MSRSF):
— процессор работает 32-разрядном режиме;
— процессор работает 64-разрядном режиме.
•Разряд перемещения команд (MSRIR):
— трансляция адреса команды отключена;
— трансляция адреса команды: включена.
•Разряд перемещения данных (MSRDR):
— трансляция адреса данных отключена;
— трансляция адреса данных включена.
•Разряд защиты C2 (MSRC2):
— защита C2 отключена;
— защита C2 включена.
•Проблемное состояние (MSRPR):
— процессор может исполнять любые команды;
— процессор может исполнять только непривилегированные команды.
•Пользовательское состояние (MSRUS):
— исполняется код ОС;
— исполняется пользовательский код.
Для определения размера адреса в процессе его трансляции используется разряд 64-разрядного режима (MSRSF). Например, в 32-разрядном режиме архитектура PowerPC определяет, что эффективный адрес имеет длину лишь 32 разряда. В режиме активных тегов процессоров AS/400 аппаратура поддерживает только 64-разрядный режим. Таким образом, SLIC, управляющий значениями разрядов MSR, будет устанавливать только 64-разрядный режим.
Разряды перемещения команд (MSRIR) и данных (MSRDR) позволяют процессору работать в режиме реальной адресации. Когда SLIC отключает перемещение, механизмы трансляции адреса не используются, и младшие 52 разряда эффективного адреса передаются как реальный адрес непосредственно подсистеме памяти. Подсистема памяти состоит из памятей кэша и основной. В архитектуре PowerPC для команд и данных — раздельные кэши, и соответственно отдельные разряды перемещения. Такая модель называется гарвардским кэшем[ 70 ].
Первоначально бит защиты С2 (MSRC2) предназначался для того, чтобы вынуждать механизм трансляции адреса использовать сегментные регистры для всех пользовательских обращений, если процессор работает в режиме активных тегов и защита С2 включена. Использование системных таблиц гарантировало, что при включенной защите С2 ОС может контролировать и регистрировать доступ пользователей к любым объектам. Хотя данный разряд по-прежнему присутствует в некоторых процессорах PowerPC, он не используется для аудита С2. Вместо этого на уровне защиты 50 (защита С2) мониторинг и регистрацию пользовательского доступа компонент защиты SLIC осуществляет непосредственно, без использования сегментных регистров.
Разряд проблемного состояния (MSRPR) используется в процессе трансляции адреса и для защиты памяти. Он определяет, может ли процессор исполнять привилегированные команды PowerPC. Не следует путать эти привилегированные команды с привилегированными командами MI (такими как «PWRDWNSYS,» с которой мы встречались в главе 7) — привилегированные команды PowerPC исполняет только SLIC. Примером привилегированных команд PowerPC могут служить команды работы с тегами, например «lq».
Разряд пользовательского состояния (MSRUS) поддерживает уровни защиты AS/ 400 от 40 и выше. Он позволяет различать системное и пользовательское состояние процесса. Разряд пользовательского состояния определяет, могут ли полномочия быть помещены в указатель, и может ли процесс выполнять привилегированные команды MI. Данный разряд используется также для защиты памяти. Обратите внимание, что разряд пользовательского состояния также задействован только в режиме активных тегов.