Управление памятью
Управление основной памятью в z/OS базируется на концепции виртуальной памяти, основные принципы которой были изложены при рассмотрении эволюции системы в п. 5.1.1. Важно подчеркнуть, что в z/OS фактически сохранена архитектура, реализованная в MVS/ESA и развитая в дальнейшем в OS/390. Конечно, расширение разрядности адреса (и, следовательно, объема адресного пространства) не могло не привести к целому ряду нововведений, о которых далее и пойдет речь. Но начнем, однако, с общих понятий и терминов, принятых в MVS, OS/390 и z/OS и необходимых для понимания механизмов управления памятью [4], [5].
В соответствии с концепцией MVS, каждая прикладная программа, а также некоторые системные функции получают в свое распоряжение отдельное виртуальное адресное пространство (virtual address space), размер которого для OS/390 составлял 231 байт, а для z/OS увеличился до 264
байт. Виртуальная память (virtual storage) является воображаемым объектом и фактически представлена в системе как совокупность специальных структур (таблиц), описывающих размещение данных и кода программы в выделенном для нее адресном пространстве. В реальности же выполнение приложений может осуществляться только тогда, когда данные и код загружены в основную память. На рис. 5.8 представлен обобщенный механизм реализации технологии виртуальной памяти.
Рис. 5.8. Элементы системы управления памятью
Некоторое приложение (MYPROG) "размещается" операционной системой в выделенном для него виртуальном адресном пространстве, занимая некоторое количество блоков памяти фиксированной длины, называемых страницами (page). Размер каждой страницы равен 4 KB. Приложение использует виртуальные страничные адреса, и ему доступна любая область собственного адресного пространства.
Чтобы начать выполнение приложения, система загружает его виртуальные страницы в основную память (Central storage), отмечая их местоположение в специальной таблице страниц (page table). Основная память также представлена в виде набора блоков размером 4 KB, называемых фреймами
(frame). При загрузке значения виртуальных адресов сохраняются в неизменном виде. Понятно, что при обращении к памяти требуются реальные физические адреса. Для преобразования виртуальных адресов в физические используется специальный аппаратный механизм динамического преобразования адресов DAT (Dynamic Address Translation), который учитывает реальное размещение виртуальных страниц в основной памяти в момент выполнения адресных команд. Механизм DAT подробно описан в п. 2.1.3. Напомним, что для повышения эффективности управления в системе поддерживается иерархическая модель сегментации виртуальной памяти, в соответствии с которой страницы объединяются в сегменты размером 1 MB (256 страниц на сегмент), а те в свою очередь - в более крупные разделы виртуальной памяти, называемые регионами.
При нехватке основной памяти некоторые страницы могут быть временно перемещены в специальные страничные наборы данных (page data set) во внешнюю вспомогательную память (Auxiliary storage) на магнитных дисках. Блок памяти в страничных наборах получил название слот (slot) и также имеет размер 4 KB. Вытесненные во вспомогательную память страницы находятся там до тех пор, пока не возникнет необходимость в их использовании при выполнении приложения. В этом случае генерируется программное прерывание по отсутствию страницы (page fault) и, при наличии свободных фреймов, запускается процедура "подкачки" страницы из вспомогательной памяти. При занятии страницей свободного фрейма в таблицу страниц вносится его указатель и затем формируется физический адрес.
Конечно, возможна ситуация, когда в основной памяти для загрузки отсутствующей страницы не осталось ни одного свободного фрейма. В этом случае запускается процедура изъятия страниц (page stealing), в результате которой одна или несколько виртуальных страниц "откачиваются" из основной памяти во вспомогательную, чтобы освободить место. Выбор изымаемых страниц основан на классическом методе LRU, использующем формируемые аппаратно биты ключа защиты памяти: бит обращения R и бит изменения С (см.
п. 2.1.3).
Перемещение страниц приложения из основной памяти во вспомогательную и обратно называют страничным обменом (paging), который может происходить многократно в течение всего времени выполнения. При этом следует обратить внимание, что для работы программ вовсе не требуется одновременное присутствие в основной памяти всех ее страниц, равно как и размещение этих страниц в соседних фреймах. Некоторые страницы, содержащие важную системную информацию, могут не участвовать в страничном обмене. Они имеют статус неперемещаемых (fixed) и постоянно находятся в основной памяти. Остальные же страницы считаются перемещаемыми (pagable).
Наряду со страничным обменом в z/OS поддерживается еще одна процедура, управляющая перемещением страниц, - свопинг (swapping). В некоторые критические моменты работы системы (например, при нехватке ресурсов или когда приложение долгое время не проявляет активности) операционная система по инициативе менеджера управления рабочей нагрузкой WLM может принять решение о выгрузке (swap out) всех страниц адресного пространства приложения из основной памяти во вспомогательную. Для этой цели могут создаваться специальные наборы данных свопинга (swap data set). Вытесненным таким образом приложениям не предоставляется процессорное время до тех пор, пока не будет выполнена операция swap in, возвращающая страницы приложения в основную память.
Необходимо отметить, что в операционных системах MVS/ESA и OS/390 для повышения эффективности страничного обмена применялась так называемая расширенная память (Expanded storage), которая, являясь фактическим продолжением основной памяти, использовалась для хранения вытесненных оттуда страниц. Это позволило существенно уменьшить время страничного обмена по сравнению с использованием для той же цели дисковой памяти. Благодаря применяемой для расширенной памяти блочной (а не побайтной) адресации (размер блока - 4 KB), объем расширенной памяти мог достигать 8 GB, в то время как основная память была ограничена размером 2 GB.
В z/OS необходимость в поддержке расширенной памяти отпала, поскольку появилась возможность просто увеличить объем основной памяти (в z900 до 64 GB)!
Таким образом, можно увидеть, что в z/OS виртуальные страницы приложения в процессе выполнения могут быть физически размещены частично в основной, а частично во вспомогательной памяти. Для учета текущего местонахождения и хранения атрибутов виртуальных страниц операционная система создает специальные таблицы, называемые таблицами страниц, сегментов и регионов. В любой момент при необходимости некоторые виртуальные страницы могут сменить "место жительства" на основе страничного обмена или свопинга.
Для управления памятью в базовой управляющей программе z/OS представлены три менеджера памяти (VSM, RSM, ASM), каждый из которых отвечает за свой участок работы (рис. 5.8).
Менеджер виртуальной памяти VSM (Virtual Storage Manager) осуществляет постраничное размещение данных и кода приложений в виртуальном адресном пространстве по запросу, определяет структуру адресных пространств, предоставляет необходимую информацию об использовании виртуальной памяти менеджеру управления нагрузкой WLM. Для этих целей VSM, как и другие менеджеры памяти, предоставляет программисту набор специальных макросредств. Для каждого виртуального адресного пространства VSM строит управляющий блок, получивший название блок управления адресным пространством ASCB (Address Space Control Block). Этот блок содержит информацию и указатели, используемые при управлении адресным пространством. Для идентификации каждое создаваемое адресное пространство получает уникальный номер (идентификатор) ASID (Address Space IDentificator).
Менеджер физической памяти RSM (Real Storage Manager) производит размещение виртуальных страниц в основной памяти, создает и корректирует таблицы страниц, сегментов и регионов, управляет страничным обменом и свопингом. В OS/390 RSM также брал на себя функции управления расширенной памятью.
Менеджер вспомогательной памяти ASM (Auxiliary Storage Manager) предназначен для создания и управления наборами данных страничного обмена и свопинга на DASD, а также для перемещения виртуальных страниц между основной и вспомогательной памятью по указанию RSM.
Следующим важным вопросом является структура виртуального адресного пространства. Ранее отмечалось, что адресное пространство MVS включает общую область (common area), в которой размещаются доступные всем приложениям системные программы и данные, и защищенную приватную область (private area), используемую для размещения кода и данных приложения, а также ассоциированных с приложением системных структур. Начиная с MVS/XA, когда состоялся переход на 31-разрядную архитектуру, включая OS/390, структура виртуальной памяти приложения выглядит так, как представлено на рис. 5.9 [6]. Эта структура полностью соответствует структуре младших 2 GB виртуальной памяти z/OS, поэтому рассмотрим ее подробнее.
Для поддержки 24-разрядных приложений структура виртуального адресного пространства в младших 16 MB соответствует требованиям архитектуры MVS/370. Свыше границы 16 MB размещаются расширенная общая область
(Extended Common), как продолжение общей области MVS/370, и расширенная приватная область (Extended Private), которая может использоваться 31-разрядными приложениями. Следует отметить, что содержимое общей области, включая расширенную ее часть, для всех адресных пространств совпадает. Фактически это достигается путем создания в системе единого набора виртуальных страниц с определенными виртуальными адресами, разделяемого всеми адресными пространствами. Содержимое же приватной области для каждого адресного пространства уникально.
Состав ядра определяется системным программистом путем настройки раздела NUCLST системного реестра SYS1.PARMLIB. Виртульные страницы области ядра являются неперемещаемыми, то есть всегда загружены в основную память и в страничном обмене не участвуют.
Область системных очередей SQA/ESQA служит для размещения общесистемных таблиц, блоков управления и очередей, состав и содержание которых определяется конфигурацией системы и общим количеством создаваемых в процессе работы адресных пространств. Настройка размера области SQA (ESQA) осуществляется с помощью параметра SQA в разделе IEASYS реестра SYS1.PARMLIB или с консоли оператора. При нехватке памяти для SQA система пытается "занять" необходимое пространство в области CSA. Страницы SQA (ESQA) также являются неперемещаемыми и всегда остаются в основной памяти.
Область загрузки модулей LPA/ELPA предназначена для размещения дополнительных реентерабельных загрузочных модулей ядра, включая SVC-программы и методы доступа, а также некоторые пользовательские приложения. Все указанные программы могут одновременно вызываться множеством задач, работающих в различных адресных пространствах. Модули, загружаемые в LPA/ELPA, должны быть предварительно записаны в библиотечный набор данных SYS1.LPALIB или другие наборы данных, определяемые в разделе LPALST реестра SYS1.PARMLIB. Таким образом, размер области LPA/ELPA зависит от количества размещаемых модулей. Учитывая особую роль модулей LPA, система требует их авторизации на основе технологии APF (Authorized Program Facility). Авторизованные модули получают право обращаться к защищенным областям системной и приватной памяти.
Область LPA/ELPA в свою очередь делится на три подобласти:
- Pageable LPA (PLPA/EPLPA) - содержит перемещаемые модули;
- Fixed LPA (FLPA/EFLPA) - содержит неперемещаемые модули;
- Modified LPA (MLPA/EMLPA) - может использоваться на этапе начальной загрузки системы для временного хранения модифицируемых или обновляемых модулей PLPA.
Область общих сервисов CSA/ECSA служит для размещения общих данных, используемых несколькими активными адресными пространствами, и в том числе для организации обмена (межпространственной связи) между адресными пространствами.
Размер области CSA/ECSA устанавливается с помощью параметра CSA в разделе IEASYS реестра SYS1.PARMLIB или с консоли оператора. По умолчанию страницы CSA являются перемещаемыми.
Область префиксации PSA служит для хранения содержимого регистра PSW (старого и нового) при реализации механизма обработки прерываний, а также содержит указатели на важные системные управляющие блоки и таблицы. Данная область поддерживается аппаратно, всегда привязана к началу виртуального адресного пространства и имеет размер 4 KB в системах с архитектурой S/370, 370/XA, ESA/390 и 8 KB в системах с z/Architecture.
Для знакомства со структурой приватной области сначала рассмотрим, как она выглядит в OS/390, то есть в режиме 31-разрядной адресации (рис. 5.9). Мы уже отмечали, что часть виртуальной памяти в пределах первых 2 GB сохранила свою структуру в z/OS. В приватной области выделяются следующие элементы:
- регион пользователя - User Region и Extended User Region;
- область локальных системных очередей - LSQA (Local System Queue Area) и ELSQA (Extended Local System Queue Area);
- область планировщика работ - SWA (Scheduler Work Area) и ESWA (Extended Scheduler Work Area);
- подпулы (Subpools) 229, 230 и 249;
- системный регион - System Region.
Рис. 5.9. Структура 31-разрядного виртуального адресного пространства
Регион пользователя предназначен для размещения пользовательских приложений и данных. После загрузки программ в регион пользователя система исключает из использования оставшиеся незанятыми страницы до поступления запроса на выделение дополнительных страниц в данном регионе. У пользователя есть возможность управлять размером региона с помощью одноименного параметра REGION операторов языка управления заданиями JOB и EXEC (см. п. 5.1.5).
Область локальных системных очередей LSQA/ELSQA содержит таблицы и очереди, ассоциируемые с текущим адресным пространством и выполняемыми в нем приложениями. В частности, здесь хранятся таблицы страниц, сегментов и регионов, формируемые менеджером физической памяти RSM.
Отметим, что указанные таблицы участвуют в страничном обмене наряду с прочими перемещаемыми страницами.
Область планировщика работ SWA/ESWA служит для размещения блоков управления задачами (TCB) и других блоков управления, создаваемых для обслуживания приложений адресного пространства. Назначение блоков управления будет рассмотрено позднее.
Подпулы (Subpools) 229, 230 и 249 предоставляют локальную память, доступ к которой реализуется на основе запрашиваемых ключей защиты. Эта область служит для размещения управляющих блоков, которые могут использовать только авторизованные программы, имеющие соответствующее значение ключа. Эти управляющие блоки создаются системными компонентами для нужд пользовательских приложений.
LSQA, SWA и подпулы фактически разделяют одну область виртуальной памяти, которая примыкает к границе области CSA, а ELSQA, ESWA - к границе 2 GB. Эти области могут увеличиваться за счет незанятых страниц региона пользователя. Следует отметить, что подпулы могут выделяться и в других областях виртуальной памяти. Они служат для группирования логически связанных между собой блоков виртуальной памяти, например по значению ключа защиты, по возможности откачки или свопинга и т.п.
Системный регион System Region резервирует 16 KB виртуальной памяти для хранения служебной информации при выполнении некоторых системных функций.
Рассмотрим далее, какова структура 64-разрядного виртуального адресного пространства, впервые реализованного в z/OS, начиная с версии V1R2. В 64-разрядных пространствах исполняемый программный код по-прежнему может размещаться только в границах младших 2 GB, однако данные, к которым эти программы обращаются, могут быть загружены в виртуальную память свыше 2 GB. В настоящий момент при запуске приложения первоначально создается адресное пространство размером 2 GB, однако по запросу программы оно может быть увеличено (для этого предусмотрена специальная макрокоманда IARV64).
Рис. 5.10. Структура 64-разрядного виртуального адресного пространства
На рис. 5.10 представлена структура 64- разрядного виртуального адресного пространства, которая включает следующие области:
- от 0 до 2 GB - сохраняет ранее рассмотренную структуру (см. рис. 5.9) и служит для размещения программного кода и данных для всех типов приложений;
- от 2 GB до 4 GB - не используемая по архитектурным соображениям область, получившая название Bar1);
- от 4 GB до 2 TB - нижний регион пользователя (low user region). Используется первым для предоставления памяти свыше границы 2 GB под данные;
- от 2 TB до 512 TB - разделяемая область (shared area) для совместного использования различными адресными пространствами. В настоящее время не поддерживается;
- от 512 TB до 16 EB - верхний регион пользователя (high user region). Используется при нехватке памяти в нижнем регионе.
При освоении новых объемов памяти полезно напомнить используемые единицы измерения: 1 терабайт (TB) равен 240 байт или 1024 GB, 1 петабайт (PB) равен 250 байт или 1024 TB, 1 экзабайт (EB) равен 260
байт или 1024 PB.
Для управления объемом выделяемой виртуальной памяти свыше 2 GB в рамках языка управления заданиями для операторов JOB и EXEC реализован новый параметр MEMLIMIT.
Как отмечалось ранее, при переходе к 64-разрядной виртуальной памяти z/OS механизм динамического преобразования адресов DAT модернизируется путем расширения иерархической модели сегментации за счет образования наряду с сегментами более крупных разделов виртуальной памяти. Эти разделы получили название первый (RF), второй (RS) и третий (RT) регионы (region first, region second, region third). Самый маленький по размеру третий регион объединяет 2048 мегабайтных сегментов и, таким образом, имеет объем 2 GB. Второй регион объединяет 2048 третьих регионов и имеет объем 4 TB. И наконец, регионы первого типа объединяют 2048 вторых регионов и занимают объем 8 PB каждый. Всего в 64-разрядном виртуальном адресном пространстве может быть создано 2048 первых регионов.
Для управления виртуальной памятью в каждом из дополнительных регионов z/OS формирует три типа таблиц: RTT, RST и RFT.
Таблицы третьего региона (RTT) содержат 2048 указателей на размещение "своих" таблиц сегментов (SGT), таблицы второго региона (RST) - указатели на таблицы третьего региона, таблица первого региона (одна на 64-разрядное виртуальное адресное пространство) - указатели на таблицы второго региона. Очевидно, что пятиступенчатый механизм преобразования адресов требует значительных накладных расходов (памяти и времени). В связи с этим разработчики предусмотрели гибкую схему создания и использования таблиц регионов, реализуемую менеджером физической памяти RSM. Если приложение не требует больше 2 GB памяти, то таблицы регионов не используются вообще, и применяется "старая" 31-разрядная процедура DAT, в которой используются только таблица сегментов и таблицы страниц. Когда приложение запрашивает виртуальную память свыше 2 GB ("за барьером") но не более 4 TB, создается таблица третьего региона (RTT) и соответствующее количество таблиц сегментов. Теперь первой в процедуре DAT будет обрабатываться RTT. Менеджер RSM будет создавать все новые уровни таблиц регионов по мере увеличения объема виртуальной памяти, запрашиваемой приложениями. Для управления доступом к памяти на основе механизма DAT в z/OS используется специальная структура, получившая название управляющий элемент адресного пространства ASCE (Address Space Control Element), размещаемый в аппаратных регистрах. ASCE определяет, в частности, какой уровень таблиц региона является старшим для данного адресного пространства.