Указатели должны быть защищены от повреждений. Программа пользователя, работающая на уровне MI, вполне способна изменить указатель, так как указатели хранятся в ассоциированном пространстве объектов MI вместе с другими структурами, к которым программа должна иметь доступ. Значения указателей также могут быть разрушены физическими явлениями, такими как флуктуации напряжения. Если указатель изменен «незаконно» (то есть не процедурой SLIC с помощью команды, недоступной непосредственно в MI), а каким-либо иным способом, то аппаратура сбрасывает разряд тега, делая тем самым указатель недействительным.
Все временные и постоянные объекты подлежат страничному обмену (переносу их на диск и обратно в память по мере необходимости). Некоторые структуры (таблица страниц) и программы SLIC не откачиваются; они загружаются в процессе IPL и должны находиться в памяти постоянно. Их адреса не требуют трансляции, так как виртуальные адреса подобных структур или команд — реальные адреса памяти. Такого рода адреса всегда начинаются с шестнадцатиричного 800.
Теперь, после краткого обзора, перейдем к детальному рассмотрению этих тем: разберем подробно влияние одноуровневой памяти на производительность, работу указателей, трансляцию адреса, и, наконец, управление дисками. Внимание! Для индикации «горячих» тем, будет использоваться «перечная» система.
Одноуровневая память и производительность
Как уже отмечалось, основное достоинство одноуровневой памяти — в сокращении числа команд, требуемых для выполнения определенных функций ОС. Можно привести множество примеров функций, производительность которых повышается благодаря одноуровневому хранилищу. Значительно упрощается за счет ненужности перемещения файлов файловая система, эффективней работает база данных. Но одно преимущество сразу бросается в глаза — это резкий рост производительности AS/ 400 при работе в интерактивном режиме, непосредственно зависящей от времени на переключение процессов. Рассмотрим пример, иллюстрирующий, как переключение процессов влияет на общую производительность AS/400.
В обычной ОС, использующей адресацию относительно сегмента, при переключении процессов требуется изменение содержимого сегментных регистров. Если этого не сделать, то меньшие эффективные адреса в новой программе будут ошибочно транслироваться в виртуальные, принадлежащие программе предыдущего процесса. Проблема возникает потому, что каждый процесс в системах такого типа имеет собственную эффективную память, которая начинается с адреса 0. Данный тип адресации используется большинством современных версий Unix, а также AIX IBM.
Роль сегментных регистров в системах такого типа — в отображении эффективных адресов в виртуальную память большего размера. Для этого содержимое сегментных регистров должно сохранятся где-то в памяти при всяком переключении с данного процесса на другой, и снова восстанавливаться, когда первый процесс опять начинает выполняться. Использование в процессорах PowerPC таблицы сегментов вместо сегментных регистров делает ненужным сохранение содержимого регистров в памяти — там уже и так находится таблица сегментов. Однако при переключении процессов необходимо очистить регистры SLB от информации предыдущего процесса.
При трансляции эффективных адресов в виртуальные с использованием таблицы сегментов, регистры SLB обновляются по одному. Использование таблицы в памяти до заполнения всех регистров SLB может привести к увеличению числа тактов процессора на каждое обращение к памяти. В результате, производительность процесса снизится, пока не будет загружено некоторое число регистров. Если, например, процесс, на который происходит переключение — последовательное чтение из базы данных, потребуется протранслировать, по крайней мере, четыре адреса (по одному для программы, индекса, курсора и пространства данных) лишь для того, чтобы начать работу. Более того, так как каждый из таких объектов имеет несколько сегментов (со своими виртуальными адресами), вероятно, потребуется протранслировать с помощью таблицы в памяти от 8 до 12 адресов, прежде чем регистры SLB можно будет эффективно использовать.
Как мы уже говорили, одноуровневая память AS/400 не использует ни таблицу сегментов, ни регистры SLB. Эффективный адрес соответствует виртуальному, и никакого преобразования не требуется, так как вся виртуальная память адресуется программой напрямую. Следовательно, при переключении процессов не происходит спада производительности, связанного с таблицей сегментов.
Читать дальше