Меню

Организация памяти в SAP AS ABAP - II

|

В первой части статьи про организацию памяти в SAP системе я обрисовал общую картину. Теперь вы знаете, что в SAP системе существует понятие виртуальной памяти, которая состоит из общей (Shared memory) и локальной (Local memory) памяти. Основные области памяти были также обозначены. Продолжим.

В первой части статьи про организацию памяти в SAP системе я обрисовал общую картину. Теперь вы знаете, что в SAP системе существует понятие виртуальной памяти, которая состоит из общей (Shared memory) и локальной (Local memory) памяти. Основные области памяти были также обозначены. Продолжим.

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

Во время входа в SAP систему каждый пользователь занимает небольшой объем памяти, который называется контекстом или начальным контекстом пользователя. В данном объеме памяти хранятся такие данные, как полномочия пользователя, значения SET/GET параметров и т.п. Во время работы пользователя в системе к его контексту добавляются данные необходимые для работы транзакций, например, номера документов. Логически и физически контекст каждого пользователя хранится в Roll area.

Стоит отметить, что когда пользователь открывает еще одну сессию (режим работы) в рамках одного логина в систему, нажимая в SAP GUI на панели кнопку "Create new session" (Рис. 1), то создается еще одна копия контекста пользователя. Обе копии хранят данные отдельно друг от друга.

Рис. 1. Открытие новой сессии.

Все запросы от пользователей (шаги диалога) попадают в очередь к диспетчеру рабочих процессов, или ABAP диспетчеру. Он выбирает свободный рабочий процесс, который будет выполнять шаг диалога конкретного пользователя. Для выполнения шага диалога рабочему процессу необходимы данные текущего пользователя - его контекст. Процесс копирования контекста из Roll area в локальную память рабочего процесса называется roll-in (Рис. 2).

Рис. 2. Мультиплексирование рабочих процессов.

После выполнения шага диалога, контекст выгружается из локальной памяти обратно в Roll area. Данный процесс, в свою очередь, называется roll-out. И как я уже упоминал в первой части, Roll area состоит из двух областей - буфер в памяти и физический файл.

Последовательность выделения памяти для шага диалога в рамках рабочего процесса диалога (DIA WP) представлена на Рис. 3.

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти

Обсуждения Количество комментариев2

Комментарий от  

Денис Озорнов

  |  24 ноября 2015, 10:19

У вас написано, что контекст хранит данные SET\GET параметров пользователя и что при открытии нового окна в рамках одного логина происходит создание обособленной копии контекста. Скажите пожалуйста, как это согласуется  тем, что изменение SET\GET параметра в одном окне видно и во втором? Т.е. я открыл новое окно, в нем выполнил действие устанавливающее значение параметра, и если переключаюсь на начальное окно и вызываю транзакцию считывающую значение этого параметра, то я получаю в первом окне значение введенное во втором окне.

Комментарий от  

Вячеслав Шиболов

  |  24 ноября 2015, 11:18

У вас написано, что контекст хранит данные SET\GET параметров пользователя и что при открытии нового окна в рамках одного логина происходит создание обособленной копии контекста. Скажите пожалуйста, как это согласуется  тем, что изменение SET\GET параметра в одном окне видно и во втором? Т.е. я открыл новое окно, в нем выполнил действие устанавливающее значение параметра, и если переключаюсь на начальное окно и вызываю транзакцию считывающую значение этого параметра, то я получаю в первом окне значение введенное во втором окне.

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