Текст книги "Основы AS/400"
Автор книги: Фрэнк Солтис
Жанр:
ОС и Сети
сообщить о нарушении
Текущая страница: 27 (всего у книги 41 страниц)
Режимы доступа к памяти
Все обращения к памяти в AS/400 выполняются под управлением четырех битов режима: «Сквозная запись» W (Write Through), «Кэширование запрещено» I (Caching Inhibited), «Когерентность памяти» M (Memory Coherence ) и «Отслеживаемая память» G (Guarded Storage). Одна из характеристик RISC-процессоров – способность программ контролировать аппаратуру. Значения этих четырех разрядов устанавливаются SLIC для обеспечения части такого контроля на уровне страниц. При всех транслируемых обращениях значения разрядов берутся из PTE. Для всех реальных адресов (E=R или при отключенном перемещении) подразумевается, что биты имеют значения 0, 0, 1 и 1. Биты W и I управляют тем, как процессор использует свой кэш данных. Бит M (обычно используется на многопроцессорных системах) задает, должен ли процессор гарантировать когерентность памяти. Бит G контролирует выборку данных и команд вне порядка их следования.
Приведем некоторую дополнительную информацию о назначении каждого из этих разрядов:
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 ]72
Здесь следует учитывать, что когда компонент управления дисками записывает объект, особенно большой, на диск, он обычно пытается распределить его между несколькими дисковыми устройствами. Причина этого – стремление повысить производительность и загруженность дисков. Путем распределения объектов на несколько дисков можно сократить время его считывания или записи, так как дисковые операции могут выполняться параллельно.
Даже сегодня диски на AS/400 не считаются устройствами ввода-вывода. Они рассматриваются как память.
[Закрыть]. Если диск в System/ 38 выходил из строя, и восстановление было невозможно, то нигде выше MI не сохранялось сведений, что же было на этом диске. После ремонта или замены диска, приходилось заново восстанавливать данные на всей дисковой подсистеме из последней резервной копии – не очень приятное занятие. Поэтому мы решили, что в OS/400 все же нужны некоторые сведения и возможности управления дисками. Так появились пулы вспомогательной памяти (ASP).
ASP – это набор дисковых устройств. Вся дисковая память пула выглядит как одна непрерывная область в памяти. Отдельные устройства невидимы. Минимальный размер ASP – один диск, а вся дисковая память AS/400 может быть разделена максимум
на 16 ASP.
Первый ASP – всегда системный. OS/400 и некоторые типы системных объектов, управляемые ею, должны располагаться в системном ASP. Кроме того, может быть определено до 15 пользовательских ASP. Объект, который не обязан находиться в системном ASP, может быть помещен в любой пользовательский ASP, на котором должен уместиться целиком. Объекты не могут пересекать границу ASP.
Благодаря такому разделению дисковой памяти, любой сбой диска изолирован внутри одного ASP, что позволяет значительно сократить время восстановления, если таковое потребуется. Некоторые типы объектов, например, приемники журналов, также могут быть изолированы от других частей системы. Управлением ASP занимается компонент управления дисками в SLIC.
Сегменты памяти
Каждый объект состоит из одного или нескольких не перекрывающихся сегментов. При создании сегмента должны быть заданы несколько характеристик. Одна из них – начальный размер. На основании начального размера компонент управления дисками выделяет страницы для сегмента. Как мы отмечали в главе 5, бит авторасширения в заголовке сегмента указывает, может ли сегмент быть расширен. Если это так, то его размер может увеличиваться до максимального размера в 16 МБ.
Дисковые экстенты
При создании нового сегмента дисковое пространство выделяется для него в виде одного или нескольких экстентов. Дисковый экстент – это набор последовательных 520-байтовых секторов диска. Минимальное число секторов в экстенте равно восьми, так как минимальным участком выделяемой памяти является 4-килобайтная страница. Число страниц экстента всегда выражено степенью двойки. Таким образом, возможны размеры экстентов 4, 8, 16, 32, 64 КБ, и т. д. до 16 МБ.
Использование экстентов упрощает управление свободным пространством на диске, так как ограничивает число размеров фрагментов. Управление вспомогательной памятью использует машинный индекс, чтобы отследить свободные экстенты каждого диска и объединяет смежные экстенты в экстент большего размера. Такое объединение очень просто и быстро. Так как величина любого экстента всегда наполовину меньше размера следующего, то при освобождении экстента простая проверка позволяет определить, свободна ли другая половина. Если это так, то обе половины объединяются в экстент большего размера. Процесс продолжается до тех пор, пока дальнейшее слияние не окажется невозможным.
Виртуальный сегмент, особенно расширенный, может состоять из нескольких физически несмежных экстентов диска. Когда сегмент нужно расширить, компонент управления памятью находит комбинацию экстентов, размер которой позволяет хранить запрошенное число страниц. Такие экстенты могут располагаться даже на разных дисковых устройствах, но обязательно в одном ASP.
Выводы:
Объект может состоять из одного или нескольких сегментов.
Сегмент может состоять из одного или нескольких экстентов.
Экстент состоит из одной или нескольких страниц (их число всегда – степень 2).
Страница состоит из восьми секторов диска.
Сектор состоит из 520 байтов диска (512 байтов данных и 8 байтов заголовка)[ 73 ]73
На самом деле в секторе может быть 520 или 522 байта. Формат 522-байтового сектора в сочетании с современными дисковыми контроллерами (типа 6512 или 6532) позволяет улучшить характеристики ввода/вывода. – Прим. консультанта.
[Закрыть].
Сегменты группы доступа
Ранее мы говорили, что сегменты создаются либо как постоянные, либо как временные. Временный сегмент может быть также создан как часть группы доступа. На этих группах доступа мы остановимся немного подробней.
Назначение группы доступа – повышение производительности при считывании в память и переписывании на диск временных сегментов, связанных с каким-либо пользовательским заданием. Типична ситуация, когда с таким заданием связаны десятки временных объектов. Если бы работа с ними велась как с обычными объектами, то каждый занимал бы один или несколько временных сегментов, состоящих, по меньшей мере, из одного экстента. Перемещение всех страниц данного задания на диск потребовало бы минимум по одной операции ввода-вывода на экстент. Те же накладные расходы: требовались бы и при считывании всех страниц задания обратно в память.
Группа доступа – это системный объект, введенный для устранения большей части описанных накладных расходов. Группа доступа состоит из двух сегментов: первый, базовый, включает в себя таблицу содержимого (ТОС); второй – сегмент данных. Каждая запись ТОС содержит эффективный адрес одной из страниц в сегменте данных.
При создании временного объекта в группе доступа, его сегменты будут размещены на следующих доступных местах сегмента данных группы доступа, и ТОС будет соответствующим образом модифицирована. Таким образом, несколько физически небольших временных сегментов могут быть упакованы внутри одного экстента сегмента данных на диске, и их чтение/запись можно будет выполнять одной операцией ввода-вывода.
Обратите внимание, что группы доступа работают только с физически небольшими объектами и их маленькими сегментами. Все сегменты имеют 16 МБ адресного пространства, но большинство временных сегментов задания занимают лишь несколько страниц физической памяти. Группы доступа очень хороши для таких маленьких временных сегментов. Для постоянных объектов они не используются, так как постоянные объекты обычно имеют больший размер.
Каталоги вспомогательной памяти
Теперь рассмотрим каталоги, которые поддерживаются и используются компонентом управления вспомогательной памятью для контроля за дисковым пространством.
Каталог свободного пространства – это машинный индекс (описанный в главе 6), каждая запись которого показывает расположение на диске одного экстента свободного пространства.
Статический каталог представляет собой список экстентов, выделенных предопределенным постоянным сегментам. Статический каталог используется для поиска виртуальных сегментов, которые необходимы для работы системы, когда использование нормальных (постоянного и временного) каталогов невозможно.
Постоянный каталог – машинный индекс, каждая запись которого показывает расположение на диске от одного до четырех экстентов, выделенных постоянному виртуальному сегменту.
Временный каталог – машинный индекс, каждая запись которого указывает расположение на диске от одного до четырех экстентов, выделенных временному виртуальному сегменту.
Справочный каталог – содержит список экстентов из постоянного и временного каталогов, которые недавно были востребованы. Фактически, справочный каталог – это кэш для постоянного и временного каталога. Он предназначен для того, чтобы избежать относительно долгого поиска в этих каталогах.
Каталог членов группы доступа – машинный индекс, каждая запись которого содержит адрес группы доступа, к которой относится данный член (сегмент) группы доступа.
Таблица содержимого группы доступа (TOC)– как уже говорилось, такую таблицу имеет каждая группа доступа. ТОС представляет собой список, каждый элемент которого задает расположение на диске страницы некоторого члена (сегмента) группы.
Так как каталог свободного пространства и постоянный каталог – это машинные индексы, то в результате сбоя системы они могут быть разрушены. При каждой IPL управление вспомогательной памятью проверяет состояние этих каталогов. Если каталоги разрушены, то запускается процедура восстановления каталогов: сканируется содержимое всех дисков и собирается информация, хранящаяся в заголовках секторов и сегментов. Поскольку временные объекты, включая группы доступа, во время IPL исчезают, то восстановление других каталогов не требуется.
Выводы
В 1976 году Белл (Bell) и Стрекер (Strecker) опубликовали работу с критикой Digital PDP-11. По их словам: «При проектировании компьютера только одну ошибку трудно исправить – недостаточное количество адресных разрядов»[ 74 ]74
G. Bell and W.D. Strecker. Computer Structures: What Have We Learned From the PDP-11? / Proc. Third Annual Symposium on Computer Architecture. 1976. January. Pp. 1-14.
[Закрыть]. Они описали несколько причин, по которым Digital пришлось отказаться от архитектуры PDP, имевшей лишь 16-разрядный адрес, и перейти на архитектуру VAX с 32-разрядным адресом. В последние годы Digital перешла на 64-разрядную архитектуру Alpha.
Архитекторы System/38 и AS/400 поклялись, что их архитектура никогда не потерпит неудачу из-за недостатка адресных разрядов. Они определили для хранения адресов 128-разрядный указатель и обеспечили достаточно места для расширения. С точки зрения адресации, у AS/400 – большой запас прочности.
В будущем значение большой одноуровневой памяти AS/400 только усилится. Многие производители компьютеров только сейчас открывают для себя важность постоянства объектов. По мере того как все больше ОС становятся объектно-ориентированными, специалисты осознают, что для совместного использования объектов для последних должна быть возможность существовать вне процесса. В объектно-ориентированном мире системы виртуальной памяти, которые разрушают все объекты процесса после его завершения – не самый лучший вариант. Постоянные объекты AS/400 – элегантное решение этой проблемы.
В следующей главе мы рассмотрим процессы AS/400 и увидим, как связаны друг с другом многие из уже обсужденных нами тем.
Глава 9
Управление процессами
Время – это средство, с помощью которого Природа не дает всему происходить сразу. В компьютерах таким средством служат процессы. Процесс – это исполняющаяся программа. Он состоит из исполняемой программы, данных программы и некоторой информации состояния (определяется ниже), необходимой для ее выполнения. Любая ОС имеет средства поддержки процессов. Ранее мы говорили, что процесс можно считать единицей работы системы. Это положение по-прежнему остается в силе.
Вероятно, наиболее четкое интуитивное представление о процессе можно получить, если представить себе систему с разделением времени. Разделение времени, как отмечалось в главе 8, означает одновременное совместное использование процессора и памяти несколькими пользователями. Разделение времени создает у пользователя иллюзию собственного компьютера. Если в компьютере всего один процессор, то в каждый конкретный момент времени программу может исполнять только один пользовательский процесс. Управление процессами – это компонент SLIC, который не дает всему происходить сразу, переключая между процессами ресурсы единственного процессора.
Периодически ОС принимает решение прекратить один процесс и начать другой, например, если первый использовал весь выделенный ему интервал времени процессора. Если по этой причине процесс временно приостанавливается, то позднее он будет продолжен, начиная в точности с того места, где прекратился. Следовательно, вся информация о процессе, называемая информацией состояния, должна быть на время приостановки процесса где-то сохранена.
Компонент распределения работ OS/400 имеет те же самые функции, но на более высоком уровне. Возможность эффективно распределять работы в системе, важна для производительности широкого класса приложений. Мы начнем с основ управления процессами, а затем обсудим взаимосвязи между управлением процессами и распределением работ.
Лучшая в мире структура задач
Конкурентоспособность вычислительной системы часто достигается лишь благодаря нескольким базовым идеям. Идеи, принесшие заслуженную славу AS/400 – это независимость от технологии, обеспечиваемая MI, и высокая производительность, поддерживаемая одноуровневой памятью. Но есть столь же важные, хотя намного менее известные находки разработчиков. Одна из них – структура задач AS/400, которая пока еще так широко не обсуждалась.
IBM, в соответствии с общепринятыми правилами бизнеса, всегда стремилась запатентовать важные идеологические новшества в своей продукции. Патенты, защищая исключительные права на новые идеи, дают компании-владельцу преимущества перед конкурентами, которые не могут их копировать на законных основаниях. Большую прибыль приносят также продажи прав на использование новых технологий другим компаниям. Поэтому появлению AS/400 на рынке предшествовало исследование, целью которого было выбрать наиболее интересные запатентованные технологические новшества для этой системы.
Наиболее важным был Патент США № 4 177 513, защищавший структуру задач System/38 и AS/400[ 75 ]75
Ни одноуровневая память, ни независимость от технологии запатентованы не были. – Прим. консультанта.
[Закрыть].
Структура задач – основа построения ОС AS/400. На ней базируются компонент управления процессами SLIC и компонент распределения работ OS/400. В предшествующих главах при обсуждении большинства разделов ОС мы начинали с самого «верхнего» уровня системы и постепенно спускались «вниз». Теперь же я намерен изменить привычный порядок и начать обсуждение «снизу». Причина – фундаментальная важность для AS/400 структуры задач. Но, прежде всего, хотелось бы сказать несколько слов о будущих направлениях развития операционных систем. Надеюсь, это поможет Вам понять, почему структура задач так важна,
Технологии микроядра
Микроядро – одна из наиболее горячо обсуждаемых сегодня тем в информатике. Сторонники микроядра утверждают, что эта небольшая центральная часть ОС – основа для модульных, переносимых ОС. Оппоненты же говорят, что микроядро ограничивает возможности многопользовательской ОС. Чуть ли не каждый специалист имеет свою собственную точку зрения на то, как сервисы ОС должны быть распределены относительно микроядра. И все же по одному из положений критики, кажется, договорились – это используемая микроядром схема взаимодействия на основе передачи сообщений. Большинство экспертов считает, что это направление – будущее всех ОС, независимо от того, используют они микроядро или нет.
Чтобы лучше понять схему взаимодействия на основе передачи сообщений, рассмотрим кратко, как традиционно осуществлялось взаимодействие в ОС. Отличным примером может служить ОС Unix.
И первоначальная версия Unix, и большинство современных ее вариантов используют слоеную архитектуру. Группы функций ОС, такие как файловая подсистема, подсистема управления процессами и подсистема ввода-вывода, разделены в ней на слои. Само по себе подобное деление не так уж необычно: большинство ОС, включая ОС AS/ 400, состоят из слоев ПО. Различия между ОС заключаются в способах обмена информацией и взаимодействия между слоями. В системах Unix каждый слой взаимодействует только со слоями, расположенными непосредственно под и над ним. Преимущество такой структуры, на первый взгляд, очевидно: каждый слой «знает» только непосредственных «соседей» снизу и сверху; запросы и отклики передаются от слоя к слою вверх и вниз, как по лестнице. Именно таким образом приложения и сама ОС взаимодействуют с различными компонентами. Такой подход хорошо работает. Лучшее доказательство тому – число Unix-подобных ОС, доживших до сегодняшних дней.
Однако такое решение усложняет введение новых или изменение существующих элементов структуры – мешает монолитность конструкции. Иерархия слоев объединяет систему в единое целое. Нелегко вынуть один слой и заменить его новым, так как интерфейсов между слоями много, и они разные. Так что изменения требуют глубокого знания ОС и массы времени. Кроме того, многие API между слоями не документированы, что ставит под вопрос корректность работы кода после внесения изменений. То есть добавить новые функции или перенести их с одного уровня на другой становится настоящей проблемой.
Микроядро заменяет описанную вертикальную иерархию взаимосвязей горизонтальной. Все компоненты ОС выше микроядра взаимодействуют друг с другом напрямую, используя проходящие через микроядро сообщения. Микроядро проверяет сообщения, обеспечивает их передачу от одного компонента к другому, контролирует доступ к аппаратным ресурсам. ОС на основе микроядра имеет очень большие возможности расширения. Такая модульная архитектура дает возможность легко подключать новые компоненты, о которых даже и не думали разработчики ОС. При этом работа остальных частей системы не будет нарушена.
Однако все имеет свою цену. В ОС на основе микроядра даже тщательно оптимизированная передача сообщений выполняется не столь быстро, как вызов функции в типичной системе Unix. Но производительность системы все равно может быть выше, если удастся избежать прохода через лишние уровни.
Все, что было сказано о характере взаимодействий в архитектуре микроядра, применимо и к AS/400. Структура задач как System/38, так и AS/400 использует сообщения, точно так же, как и микроядро. Сообщения хорошо знакомы пользователям OS/ 400: с их помощью взаимодействуют приложения и компоненты системы, в результате этих взаимодействий осуществляется все распределение работ. Подобно микроядру, структура задач AS/400 реализована на самом нижнем уровне системы. В System/38 и ранних моделях AS/400 управление задачами было реализовано в HLIC, а на RISC-системах AS/400 для достижения оптимальной производительности – в SLIC. В основе SLIC – не микроядро, но аналогичные архитектурные концепции.
История микроядра началась в середине 80-х в Университете Карнеги-Меллон с разработки микроядра Mach. Технологию микроядра используют многие ОС, созданные в последние годы, например, Windows NT, но впервые она появилась в System/
38, а затем – в AS/400.
Важно отметить, что микроядро – это гораздо больше, чем просто основанный на передаче сообщений механизм взаимодействия и диспетчеризации. Чтобы лучше это понять, мы начнем изучать управление процессами в AS/400 с нижних уровней системы.