В операционной системе VMS секцией (section) называется файл, или часть файла на диске, содержащего данные или программу, которая может быть загружена в память и стать доступной процессу для обработки или выполнения. Глобальные секции могут быть доступны сразу нескольким процессам, таким образом позволяя разным процессам обмениваться данными через область памяти. Глобальная секция может являться как частью обычного файла, так и частью файла подкачки виртуальной памяти.
Глобальные секции (global sections) естественным образом имеют такой же механизм защиты доступа как и файлы. Что позволяет определить, кто имеет право читать, писать или исполнять данную область памяти. Тот факт, что глобальные секции могут хранить свой образ на диске, дает возможность сохранить текущее состояние системы между запусками процессов или после перезагрузки компьютера. Механизм глобальных секций также используется операционной системой для работы разделяемых библиотек (shareable libraries) и наиболее часто запускаемых программ.
Флаги событий (event flags) являются статусными битами, предоставляемыми операционной системой VMS для синхронизации внутри процесса или группы процессов. Флаги можно установить, снять, прочитать или приостановить выполнение процесса до возведения одного или комбинации из нескольких флагов. Множество системных вызовов используют флаги для сигнализации окончания своей работы. Общие флаги, объединенные в кластера (common event flag clusters), могут быть одновременно использованы более чем одним процессом, тем самым создавая механизм синхронизации между процессами, выполняющимися в рамках одной группы пользователей.
В системе сбора данных установки ВЕС глобальные секции используются для передачи/сохранения текущего состояния системы сбора, предоставления данных прочитанных из установки (или из файла, в режиме эмуляции) процессам записи, отладки и анализа, и передачи информации от мониторирующего процесса в программу анализа и визуализации.
Буфер данных является постоянной (permanent) групповой секцией с именем "BUFFER", которая поделена на части одного размера для хранения данных от нескольких (до 4-х) циклов ускорителя. Определение буфера содержится в файле ONL$LIB:BUFFER.INC и представлено одним большим массивом данных (в настоящее время 40 Мбайт). Для получения доступа к данным необходимо вызвать функцию DAQ$MAP_BUFFER библиотеки DAQLIB, или DAQ$GET_SPILL, которая сама позаботится о доступе к секции. Число и объем данных для одного сброса определяется настройками системы и доступно из статусной секции. Буфер создается менеджером чтения данных ROM во время стадии конфигурирования.
Статус системы сбора данных является постоянной групповой
глобальной файловой секцией, сохраняемой на диск после каждого
цикла ускорителя. Содержимое статусной секции с именем "STATUS"
определено в файле ONL$LIB:STATUS.INC. Секция определена
как общий блок данных (common block) из нескольких записей (records)
и содержит следующую информацию:
Структура первых двух приведена ниже:
STRUCTURE / Readout_Status /
INTEGER RUN ! Run number
INTEGER RESTART ! Restart number
INTEGER MEASURE ! Measure number
INTEGER BUFFERS ! Buffers in data section
INTEGER PAGES ! Pages in one buffer
INTEGER MEM_TYPE ! Version of memory (1=old,2=new)
CHARACTER*4 MODE ! Work mode RUN/EMU
CHARACTER*4 STATE ! Readout Manager state
CHARACTER*4 COMMAND ! Command from MNG
REAL SECNDS ! Seconds past midnight
REAL SPEED ! Read speed KB/sec
INTEGER LAST ! Last read buffer number
INTEGER SPILL(4) ! Spill number
INTEGER VOLUME(4) ! Spill volume in bytes
INTEGER EVENTS(4) ! Events in spill
INTEGER SUSPEND(4) ! Suspend counters
INTEGER VOLMISS(4) ! Spill volume in buffer memory
INTEGER ROMPASS(4) ! Number of passes during spill input
INTEGER READ_SPILLS ! Total spills read
REAL READ_VOLUME ! Total bytes read
INTEGER READ_EVENTS ! Total events read
INTEGER AM_OFFLINES ! Total offlines on device
INTEGER AM_TIMEOUTS ! Total timeouts on device
INTEGER AM_ERRORS ! Total errors on device
INTEGER BAD_SPILLS ! Total bad spills
INTEGER INTERNAL ! Total internal ROM errors
INTEGER TRASHES ! Total trashes (R/W)
END STRUCTURE
Видно, что структура содержит параметры сеанса, конфигурационные параметры, поле передачи команд для ROM, статистические данные на каждый буфер, суммарную статистику и чило различных типов сбоев, с начала сеанса.
STRUCTURE / Tape_Status /
INTEGER RESTART(0:3) ! Tape manager and TPSs restart number
INTEGER FILES ! Files on tape allowed
INTEGER FPAGES ! Pages in file allowed
CHARACTER*4 STATE(0:3) ! Tape manager and TPSs state
CHARACTER*4 STATUS(0:3) ! Tape manager and TPSs status
CHARACTER*40 DEVICE(3) ! Device name
CHARACTER*20 NAME(3) ! Tape/File name
CHARACTER*4 COMMAND(0:3) ! Command for TPM and TPSs
INTEGER PARAM(0:3) ! Parameter of Command
REAL SPEED(3) ! Tape write speed KB/sec
REAL END_TIME(3) ! Time of writing completion
REAL ERATIO(3) ! Tape write error ratio
REAL CRATIO(3) ! Compression ratio
INTEGER FILE(3) ! File number
INTEGER FILE_SPILLS(3) ! Spills in file
INTEGER FILE_EVENTS(3) ! Events in file
REAL*4 FILE_VOLUME(3) ! Bytes in file
INTEGER TAPE(0:3) ! Tape number
INTEGER TAPE_FILES(3) ! Files on tape
INTEGER TAPE_SPILLS(3) ! Spills on tape
INTEGER TAPE_EVENTS(3) ! Events on tape
REAL*4 TAPE_VOLUME(3) ! Bytes on tape
INTEGER WRITE_TAPES ! Total tapes write
INTEGER WRITE_FILES ! Total files write
INTEGER WRITE_SPILLS ! Total spills write
INTEGER WRITE_EVENTS ! Total events write
REAL*4 WRITE_VOLUME ! Total bytes write
INTEGER LIMIT(5) ! Stop limits for output
INTEGER BARRIER(5) ! Stop barriers
INTEGER TAPE_ERRORS(3) ! Total errors on tape
RECORD /IOSB/ IOT(2048) ! Status of block of buffer
END STRUCTURE
Структура статуса записи содержит конфигурационные поля, состояние и команды для нескольких процессов записи TPW, статистику по отдельным процессам и суммарную, пределы числа записанных данных для автоматической остановки и их текущие значения. Поле IOSB содержит статус выполнения операций записи и позволяет начинать чтение в освободившуюся часть буфера до окончания записи всего сброса.
Для передачи гистограмм процессу визуализации, программа обработки данных BEC создает глобальную секцию вида USERNAME_HBK, тем самым позволяя отделить задачу распаковки и гистограммирования событий от собственно анализа и презентации.
Назначение флагов синхронизации (Common Event Flag Clusters) расписано в файле ONL$LIB:FLAGS.INC