Основы AS/400 - Фрэнк Солтис
Шрифт:
Интервал:
Закладка:
Виртуальная память для систем разделения времени
В связи с появлением в конце 60-х годов систем разделения времени — раннего этапа эволюции мультипрограммных ОС — многие производители компьютеров приняли виртуальную память на вооружение. При мультипрограммировании системная память разделена на несколько порций, в каждой из которых находится некоторая программа. Пока одна из программ ожидает завершения операции ввода-вывода, другая может использовать процессор. Если в памяти находится достаточное количество программ, то можно обеспечить постоянную загруженность процессора. Мультипрограммные ОС занимались тогда преимущественно пакетной обработкой.
Разделение времени — это разновидность мультипрограммирования, когда у каждого пользователя есть подключенный к компьютеру терминал. Так как при этом пользователи интерактивны (то есть программа управляется командами пользователя за терминалом), то на «раздумья» пользователей уходит какое-то время. Соответственно снижается загрузка процессора. Компьютер такого типа поддерживает больше пользователей, так что в памяти одновременно находится довольно много фрагментов программ. Интерактивным пользователям требуется быстрое время отклика, так что эффективное управление множеством фрагментов программ критически важно. Именно его и должна была обеспечить виртуальная память.
В основе систем разделения времени лежала возможность аренды времени центрального компьютера отдельными пользователями из разных организаций. Такой подход был популярен, так как большинство малых фирм не могли позволить себе собственный компьютер. Разделение времени предоставляло им ресурсы большого компьютера за часть цены. Так как пользователи компьютера представляли разные организации, совместное использование информации ими не требовалось.
Поддерживая разделение времени, системы виртуальной памяти предоставляли каждому пользователю отдельное адресное пространство. Адресные пространства разных пользователей были изолированы друг от друга, что в определенной степени обеспечивало защиту. При переключении ресурсов компьютера на выполнение программы другого пользователя использовалось новое адресное пространство. Такая операция называлась переключением процессов, где процесс рассматривался как единица работы в системе, выполняемая для пользователя.
В прошлом переключение процессов было связано с большими накладными расходами. Нужно было изменить таблицы памяти, очистить регистры и загрузить новые данные. Выполнение всех этих действий требовало большого числа команд процессора, и явно чрезмерных затрат времени. Тогда, в конце 60-х, многие искали способы упростить эту операцию и повысить ее эффективность[ 63 ].
К сожалению, разработчики систем разделения времени решили вынести файловую систему за пределы виртуальной памяти. Они создали два места хранения данных и программ: виртуальную память и файловую систему. В подобной архитектуре данные и программы могут использоваться или изменяться, только если находятся в виртуальной памяти. То есть, прежде чем что-либо сделать, данные и программы нужно переместить в виртуальную память.
Менеджер файлов обычной системы поддерживает каталог, связывающий имена файлов с местоположением на диске данных, которые в них содержатся. Менеджер файлов предоставляет некий интерфейс, позволяющий программе открыть файл. Затем данные копируются в буферы памяти, обычно являющиеся частью виртуальной памяти. После этого данные могут использоваться и обрабатываться. Когда программа завершает работу с данными, выполняется операция закрытия, переносящая данные из виртуальной памяти обратно в файловую систему.
Простой и знакомый большинству из нас пример подобного механизма — использование текстового процессора на ПК. Сначала пользователь открывает файл, содержащий нужный документ, а затем наблюдает мигание индикатора жесткого диска, пока документ считывается в память. На самом деле, документ сначала переносится в виртуальную память, а затем частично — в реальную память. Когда-то раньше, при конфигурировании ОС нашего ПК, мы определяли размер места на жестком диске, зарезервированный для виртуальной памяти. В мире ПК это пространство иногда называется файлом подкачки. Прокручивая текст на экране, пользователь снова видит, как мигает индикатор жесткого диска. По мере необходимости, новые фрагменты документа считываются в память из зарезервированного пространства на диске.
Операция открытия файла создает копию документа. Оригинал же по-прежнему находится на жестком диске в неизменном виде. Копия располагается в дисковом пространстве, зарезервированном под виртуальную память. Менеджер виртуальной памяти и ОС автоматически переносят фрагменты документа по мере необходимости из зарезервированной дисковой области в память, а когда надобность в них отпадает — возвращают обратно. Фактически, если учесть копию в памяти, некоторые фрагменты документа существуют в трех копиях.
Когда пользователь заканчивает редактирование и сохраняет документ, текстовый процессор запрашивает, сохранить ли изменения. Другими словами, нужно ли записать обновленную в виртуальной памяти копию обратно в файл на диске для постоянного хранения. Если ответ утвердительный, то копия из виртуальной памяти замещает копию на диске.
Одноуровневая виртуальная память
В только что описанной реализации виртуальной памяти программист имеет дело с двумя уровнями хранилища: файловая система и виртуальная память разделены. Двухуровневая система хранения вызывает дополнительные накладные расходы. Открытие файла связано с записью на диск в файлы подкачки, а закрытие — требует записи обратно на место постоянного хранения.
Сам собой напрашивается альтернативный вариант — работать только с одной копией файла. Ведь если нет двух отдельных копий, то не нужно резервировать пространство на диске для файла подкачки. При таком подходе вся файловая система становится частью виртуальной памяти. Менеджер файлов по-прежнему ведет справочник, но теперь он связывает имя файла с местом в памяти, где находятся данные файла. При открытии и закрытии файла не требуется копировать весь файл из его постоянной области хранения на диске. В буфер памяти копируется только та порция (или запись) с которой пользователь в данный момент работает. Часто говорят и так: файлы всегда используются там же, где хранятся. Все это позволяет повысить общую производительность системы.
Одноуровневая память — это именно то, что ставили своей целью создатели первой виртуальной памяти, и именно эта модель была реализована в System/38. В честь первооткрывателей мы решили назвать нашу виртуальную память одноуровневой памятью.
И двухуровневая виртуальная память, и одноуровневая используются как буфер. Процессоры могут работать только с данными в памяти, но не на диске. Отличие одноуровневой схемы в том, что память в ней — кэш для всего дискового пространства, а не только для зарезервированной области диска. Кроме того, после изменения файла одним пользователем, это изменение немедленно становится видимым всем остальным, работающим с тем же файлом.
Недостаток одноуровневой памяти — большой размер адреса. Адрес должен быть достаточно велик, чтобы покрывать все подключенное к системе дисковое пространство. Возьмем 32-разрядный адрес, используемый во многих современных системах. С его помощью можно адресовать до 4 ГБ, что совершенно недостаточно для адресации всего дискового пространства даже на большом ПК. Таким образом, обычные системы просто вынуждены копировать дисковые данные в свои относительно небольшие виртуальные памяти и обратно.
Чтобы устранить это ограничение, в System/38 и первые модели AS/400 был включен 48-разрядный адрес. Теперь AS/400 использует 64-разрядный адрес и для будущих расширений предусмотрены дополнительные разряды адреса. Хоть все это и связано с аппаратными затратами, последние вполне компенсируются возможностями по совместному использованию данных и ростом производительности.
Постоянная виртуальная память
Размер адреса AS/400 значительно превышает необходимый для покрытия всего дискового пространства. Причина такого положения — другая характеристика одноуровневой памяти, называемая постоянством (persistence). Мы уже говорили об этом в главе 5, посвященной объектам. Объект, обладающий постоянством, остается в памяти системы вечно, даже после своего разрушения, и виртуальное адресное пространство такого постоянного объекта никогда не используется повторно. При разрушении постоянного объекта освобождается все занятое им дисковое пространство, за исключением заголовков. Освобожденное дисковое пространство затем используется для других объектов.