Основы AS/400
Шрифт:
Приведем некоторую дополнительную информацию о назначении каждого из этих разрядов:
1.W (Write Through)— сквозная запись.
Если W=1, то любое изменение кэша данных записывается и в основную память. Этот разряд устанавливается, если данные в основной памяти должны быть постоянно в актуальном состоянии, например, потому что они используются несколькими процессорами. Команды загрузки будут использовать копию данных из кэша, если она там есть. При сохранении будут обновляться копии в кэше и основной памяти.
2.I (Caching Inhibited)— кэширование запрещено.
Если I=1, то доступ выполняется непосредственно к основной памяти. Во время обращения ни данные по этому адресу, ни содержащий их блок памяти не копируются в кэш. Отключение кэширования может быть полезно при последовательной обработке больших блоков
3.M (Memory Coherence) — когерентность памяти.
Если M=1, то процессор должен гарантированно обеспечивать когерентность данных. Под когерентностью понимают упорядочение операций записи по данному адресу памяти. Дело в том, что для повышения производительности аппаратура управления памятью иногда может записывать данные в память не в том порядке, в котором процессор выдает команды сохранения. Такой механизм может вызвать проблемы, если область памяти совместно используется несколькими процессорами и порядок операций записи в данную область памяти важен. Установка данного бита для страницы упорядочивает операции записи в эту страницу, выполняемые всеми процессорами.
4.G (Guarded Storage) — отслеживаемая память.
Если G=1, то выборка данных и команд вне порядка их следования с данной страницы запрещена. Для более высокой производительности некоторые процессоры могут выполнять команду до того, как это потребуется при последовательном выполнении. Предположим, например, что у некоторого процессора имеется конвейер команд, не занятый в течение данного цикла. Если далее в потоке команд есть подходящая для конвейера, то процессор начнет ее выполнять. Это называется выполнением вне порядка следования. Конечно, машина должна вести себя в соответствии с моделью последовательного выполнения. Если до того момента, когда процессор в нормальном случае дошел бы до команды, выполненной вне порядка следования, происходит переход или прерывание, то состояние процессора должно быть восстановлено так, как если бы он никогда не выполнял эту команду. Иногда поведение области памяти может не соответствовать модели опережающего выполнения. Например, если область памяти используется устройством ввода-вывода, то опережающая запись в нее может вызвать выполнение ошибочной операции. Если SLIC необходимо гарантировать, что подобного не произойдет, то для соответствующей страницы можно включить бит G.
Защита страниц
С трансляцией адреса связан еще один вопрос — защита памяти. Механизм защиты памяти AS/400 обеспечивает защиту для блоков размером в одну страницу, в отличие от битов тега, защищающих указатели в 16-байтовых блоках памяти. Разница и в том, что теги не предотвращают доступа к указателю, а лишь определяют факт модификации после того, как она уже произошла. Механизм защиты страниц может предохранить страницу от чтения или записи.
Рисунок 8.7. Защита страниц
PTE содержит два бита защиты страниц (PP), которые вместе с битом MSRUS используются для определения разрешенного типа доступа к странице. Вспомним, что бит MSRUS установлен в 1 при исполнении пользовательского кода, и в 0 — при исполнении кода ОС. На рисунке 8.7 показаны типы доступа, разрешенные для каждого сочетания. Доступ «чтение/запись» означает, что исполняющаяся программа может читать и изменять страницу; доступ «только чтение» — что программа может читать, но не изменять страницу; и «нет доступа» — что программа не может ни читать, ни изменять страницу. На рисунке также показано основное назначение режимов защиты и разрешенные типы доступа к странице по значению ключа и разрядов PP. Например, весь сгенерированный MI код и константы хранятся на страницах, доступных только для чтения.
Ну, вот, мы и выбрались из этих «наперченных» разделов. Давайте теперь рассмотрим управление дисками, и то, как оно сочетается с одноуровневой памятью. Эта тема должна быть для большинства читателей значительно более удобоваримой.
Управление дисками
Компонент SLIC, отвечающий за управление дисками AS/400, называется управлением вспомогательной памятью (auxiliary storage management). В его обязанности входит:
управление пулами вспомогательной памяти ASP (набор из одного или нескольких дисковых устройств);
создание, расширение, усечение и разрушение сегментов на диске;
управление свободным пространством на каждом диске;
управление справочниками, связывающими виртуальные адреса с областями на диске.
Пулы вспомогательной памяти
В основе System/38 лежала мысль: локализовать все сведения о дисковых устройствах ниже границы MI. Никакой код выше MI, будь то прикладная программа, или ОС, не должны были владеть какой-либо информацией, даже о том, подключены ли к системе диски. Независимость от технологии предполагает, что никакое ПО не должно зависеть от особенностей устройств ввода-вывода. Однако ПО, конечно, необходимо иметь информацию о таких устройствах, как терминалы и принтеры. Так почему диски должны быть исключением?
Дело в том, что некоторые из нас, разработчиков System/38, были тогда, середине 70-х, твердо убеждены, что у дисков нет будущего. В конце концов, сколько еще может продержаться технология, занимающаяся покрытием пластин ржавчиной? Мы полагали, что диски скоро и неизбежно будут вытеснены какими-нибудь новыми полупроводниковыми устройствами: цилиндрическими магнитными доменами, или приборами с зарядовой связью... А может быть, технологии основной памяти станут настолько дешевы, что никакой иной формы хранилища и не потребуется [ 71 ]
71
Очевидно, однако, что не все перечисленные технологии оправдывают возлагавшиеся на них ожидания. Так что, похоже, дискам суждена еще очень долгая жизнь.
Так вот, для того, чтобы эти новые технологии по мере готовности можно было легко встроить в System/38, мы изолировали все сведения о дисках ниже MI. Однако, это «незнание» о дисках, привело к возникновению проблем [ 72 ] . Если диск в System/ 38 выходил из строя, и восстановление было невозможно, то нигде выше MI не сохранялось сведений, что же было на этом диске. После ремонта или замены диска, приходилось заново восстанавливать данные на всей дисковой подсистеме из последней резервной копии — не очень приятное занятие. Поэтому мы решили, что в OS/400 все же нужны некоторые сведения и возможности управления дисками. Так появились пулы вспомогательной памяти (ASP).
72
Здесь следует учитывать, что когда компонент управления дисками записывает объект, особенно большой, на диск, он обычно пытается распределить его между несколькими дисковыми устройствами. Причина этого — стремление повысить производительность и загруженность дисков. Путем распределения объектов на несколько дисков можно сократить время его считывания или записи, так как дисковые операции могут выполняться параллельно.
Даже сегодня диски на AS/400 не считаются устройствами ввода-вывода. Они рассматриваются как память.
ASP — это набор дисковых устройств. Вся дисковая память пула выглядит как одна непрерывная область в памяти. Отдельные устройства невидимы. Минимальный размер ASP — один диск, а вся дисковая память AS/400 может быть разделена максимум
на 16 ASP.
Первый ASP — всегда системный. OS/400 и некоторые типы системных объектов, управляемые ею, должны располагаться в системном ASP. Кроме того, может быть определено до 15 пользовательских ASP. Объект, который не обязан находиться в системном ASP, может быть помещен в любой пользовательский ASP, на котором должен уместиться целиком. Объекты не могут пересекать границу ASP.