В операционной системе 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