Литмир - Электронная Библиотека
Содержание  
A
A

Для сообщения процессору ввода-вывода о страничной ошибке SLIC использует адрес другого типа, называемый адресом прямого сохранения (direct store address). Такие адреса употребляются при взаимодействии с любым внешним устройством. Они начинаются с шестнадцатиричного значения 801. Часть адреса прямого сохранения передается непосредственно процессу, управляющему внешним устройством.

Когда страница переносится с диска, она замещает в памяти страницу, которая давно не использовалась. С любой страницей связаны специальные разряды, которые устанавливаются при каждом обращении к ней. Измененные страницы также помечаются, чтобы в случае замещения в памяти они были записаны обратно на диск.

Память содержит команды программ, данные и указатели. Под данными здесь понимается все, что не является исполняемой командой или указателем: все объекты OS/400, кроме объектов-программ, а также неисполняемые части объектов-программ. Сравните этот подход с подходом команды «WRSYSSTS» (Work With System Status), которая различает только страничные ошибки, связанные с работой базы данных, и все остальные. Страничные ошибки базы данных относятся только к физическим и логическим файлам. Прочие страничные ошибки, такие как ошибки для программы, курсора или любого пространства из нашего примера последовательного чтения относятся ко все остальным.

Ранее мы рассмотрели страничные ошибки. Для считывания страницы с диска не обязательно ждать, пока такая ошибка произойдет. Любой компонент SLIC или любая транслированная программа MI может запросить у управления главной памятью SLIC явный перенос (считывание) в память диапазона виртуальных страниц (одной или более). Функционально явный перенос страниц в память не нужен, так как требуемые страницы всегда будут перенесены по страничной ошибке, но тогда процесс, вызывавший ее, ожидает завершения чтения с диска. Запрос на операцию переноса до того, как страницы фактически потребуются, позволяет выполнять операции дискового чтения параллельно с другой обработкой. Таким образом, явные переносы снижают временные затраты и повышают производительность.

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

При запросе на перенос или очистку может быть выбран параметр обмена. Он задает диапазон виртуальных страниц, которые компонент управления главной памятью SLIC может использовать для замещения вместо выбранных по нормальному алгоритму. Обмен применяется для того, чтобы не удалять из памяти страницы, к которым постоянно обращаются, и не заменять их страницами, которые вряд ли будут нужны больше одного раза. Обмен полезен и в том случае, когда значительное число страниц переносится в небольшую память или небольшой пул памяти. (Память часто разделяется на несколько пулов меньшего размера и вся подкачка страниц для данного процесса выполнятся в одном пуле. Подробнее о пулах — в главе 9.).

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

Дополняет перенос и очистку страниц возможность сбросить (переписать) одну или нескольких страниц на диск. Сброс имеет смысл только тогда, когда страница в памяти были изменена, то есть копия страницы на диске неактуальна. В отличие от переноса и очистки, которые не являются функционально необходимыми (эти задачи выполнит обработка страничной ошибки), сброс иногда необходим, например, при журналировании базы данных. В этом случае компонент базы данных в SLIC должен гарантировать, что записи журнала в журнальном пространстве записаны на диск, причем он обязан использовать функцию сброса, не дожидаясь, пока страницы журнального пространства будут записаны на диск в результате страничных ошибок. Кроме того, сбросом можно снять фиксацию в памяти одной или нескольких страниц.

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

Процессор PowerPC имеет отдельные кэши данных и команд, играющие роль буфера между основной памятью и процессором. По сути дела кэши — это регистры на микросхеме процессора, обеспечивающие быстрый доступ к недавно использовавшимся командам или данным. В AS/400 часть виртуальных адресов используется для доступа к кэшам.

Указатели должны быть защищены от повреждений. Программа пользователя, работающая на уровне MI, вполне способна изменить указатель, так как указатели хранятся в ассоциированном пространстве объектов MI вместе с другими структурами, к которым программа должна иметь доступ. Значения указателей также могут быть разрушены физическими явлениями, такими как флуктуации напряжения. Если указатель изменен «незаконно» (то есть не процедурой SLIC с помощью команды, недоступной непосредственно в MI), а каким-либо иным способом, то аппаратура сбрасывает разряд тега, делая тем самым указатель недействительным.

Все временные и постоянные объекты подлежат страничному обмену (переносу их на диск и обратно в память по мере необходимости). Некоторые структуры (таблица страниц) и программы SLIC не откачиваются; они загружаются в процессе IPL и должны находиться в памяти постоянно. Их адреса не требуют трансляции, так как виртуальные адреса подобных структур или команд — реальные адреса памяти. Такого рода адреса всегда начинаются с шестнадцатиричного 800.

Теперь, после краткого обзора, перейдем к детальному рассмотрению этих тем: разберем подробно влияние одноуровневой памяти на производительность, работу указателей, трансляцию адреса, и, наконец, управление дисками. Внимание! Для индикации «горячих» тем, будет использоваться «перечная» система.

Одноуровневая память и производительность

Как уже отмечалось, основное достоинство одноуровневой памяти — в сокращении числа команд, требуемых для выполнения определенных функций ОС. Можно привести множество примеров функций, производительность которых повышается благодаря одноуровневому хранилищу. Значительно упрощается за счет ненужности перемещения файлов файловая система, эффективней работает база данных. Но одно преимущество сразу бросается в глаза — это резкий рост производительности AS/ 400 при работе в интерактивном режиме, непосредственно зависящей от времени на переключение процессов. Рассмотрим пример, иллюстрирующий, как переключение процессов влияет на общую производительность AS/400.

В обычной ОС, использующей адресацию относительно сегмента, при переключении процессов требуется изменение содержимого сегментных регистров. Если этого не сделать, то меньшие эффективные адреса в новой программе будут ошибочно транслироваться в виртуальные, принадлежащие программе предыдущего процесса. Проблема возникает потому, что каждый процесс в системах такого типа имеет собственную эффективную память, которая начинается с адреса 0. Данный тип адресации используется большинством современных версий Unix, а также AIX IBM.

67
{"b":"137615","o":1}