Россия |
Системные сервисы UNIX (z/OS UNIX)
Введение
Системные сервисы UNIX, получившие в новейших версиях название z/OS UNIX, являются неотъемлемым компонентом z/OS, превратившим ее в открытую операционную систему [ 5.19 ] , [ 5.20 ] . Начиная с версии OS/390 V1R2 реализована полная поддержка стандартов POSIX (Portable Operating System Interfaces Unix) и XPG 4.2 (X/Open Portability Guide), принятых многими разработчиками UNIX-систем. Таким образом, в z/OS UNIX реализовано два открытых системных интерфейса:
- интерфейс системных вызовов (API) для приложений, написанных на языке C, что дает возможность запускать стандартные UNIX-приложения в z/OS;
- интерактивный интерфейс пользователя (shell), обеспечивающий выполнение в z/OS стандартных команд, утилит и скриптов UNIX в форме, привычной для пользователей UNIX-систем.
Кроме этого, для хранения данных в z/OS UNIX реализована поддержка иерархической файловой системы UNIX, получившей название HFS (Hierarchical File System). Файлы UNIX размещаются в SMS-управляемых наборах данных z/OS специального типа (их называют HFS-наборами данных).
Важно отметить, что z/OS UNIX представляет собой не надстройку или оболочку, эмулирующую интерфейсы UNIX, а является неотъемлемой частью системного ядра BCP и тесно интегрирована с другими модулями и компонентами z/OS, такими как DFSMS, RACF, WLM, SMF, RMF, SDSF, TSO/E, ISPF/PDF и др. Многие системные функции z/OS (например, TCP/IP, HTTP server), реализованы как UNIX-приложения. То же самое можно сказать и о популярных системах промежуточного слоя, таких как DB2 и Websphere Application Server.
Приложения UNIX выполняются в адресных пространствах MVS и могут запускаться как из пользовательской среды shell, так и из среды TSO/ISPF, пакетных заданий и STC-процедур. Файлы UNIX, хранящиеся в HFS, доступны как приложениям UNIX, так и классическим приложениям z/OS (MVS) и могут обрабатываться с помощью команд TSO/ISPF и JCL-заданий. Поддерживается свободное копирование и перемещение данных между файлами HFS и наборами данных MVS.
У пользователей существует возможность интерактивного взаимодействия с UNIX-сервисами как через стандартный TSO/ISPF-интерфейс, так и путем прямого подключения к UNIX shell через telnet/rlogin протокол в рамках TCP/IP-соединения.
Элементы z/OS UNIX
z/OS UNIX является базовым компонентом z/OS и включает ядро системных сервисов UNIX (UNIX System Services Kernel) и прикладные сервисы (UNIX System Services Application Services). Основные элементы z/OS UNIX и связанные с ней компоненты z/OS представлены на рис. 5.23.
Ядро z/OS UNIX интегрировано в базовую управляющую программу z/OS и служит для реализации функций интерфейса системных вызовов (API UNIX), связанных с управлением процессами, файловой системой HFS и коммуникациями. Другие, поддерживаемые в API функции, обрабатываются непосредственно z/OS с помощью так называемых вызываемых сервисов (callable services). Вызываемые сервисы могут быть использованы в программах на ассемблере и языках высокого уровня для доступа к функциям z/OS UNIX. Ядро z/OS UNIX обычно активизируется при загрузке z/OS и работает в собственном адресном пространстве MVS.
Прикладные сервисы z/OS UNIX представлены командным интерпретатором shell, набором стандартных утилит и отладчиком dbx. Командный интерпретатор поддерживает стандартный пользовательский интерфейс shell, позволяющий запускать приложения и утилиты, а также создавать и использовать командные файлы, называемые скриптами. Вводимые пользователем команды реализуются средствами ядра.
Отладчик dbx предназначен для автоматизированной интерактивной отладки приложений, создаваемых на языке C/C++. Отладчик располагает набором команд, хорошо известных пользователям UNIX.
На рис. 5.23 представлены также стандартные компоненты z/OS, тесно связанные с поддержкой системных сервисов UNIX. К ним относятся:
- TSO/ISPF - служат для выполнения команд и утилит, манипулирования файлами UNIX, а также для подключения пользователей к shell;
- компилятор C/C++ - используется для создания переносимых UNIX-приложений;
- языковая среда (LE), включающая библиотеку времени выполнения RTL (Run Time Library) для поддержки приложений (в том числе и на языке C/C++), - используется для выполнения команд shell и утилит;
- подсистема управления данными DFSMS - управляет наборами данных HFS, которые содержат файлы файловой системы UNIX;
- файловая система zFS (zSeries File System) - представленная в рамках сервисов поддержки распределенных вычислений DCE высокопроизводительная UNIX-подобная файловая система (начиная с z/OS V1R2). Может быть интегрирована в HFS как монтируемая файловая система.
- менеджер управления рабочей нагрузкой WLM - управляет созданием процессов UNIX;
- модуль сбора статистики SMF - фиксирует данные об используемых ресурсах;
- модуль управления доступом к ресурсам RACF - управляет доступом к файлам и приложениям UNIX;
- RMF - сбор данных и составление отчетов о функционировании сервисов UNIX.
Механизм выполнения приложений UNIX в z/OS
Для понимания механизма функционирования UNIX-сервиса необходимо установить соответствие между понятиями, используемыми в промышленных UNIX-системах, и соответствующими понятиями, применяемыми в MVS и z/OS. В частности, пользователи UNIX хорошо знакомы с понятием процесса.
Процесс представляет собой основную единицу работы в операционной системе UNIX и соответствует находящейся в стадии выполнения программе со всеми выделенными ей ресурсами. В зависимости от типа программы различают системные и пользовательские процессы. Среди системных выделяют процессы- демоны (daemon), работающие в фоновом режиме и предназначенные для поддержки вспомогательных системных сервисов (вывод на печать, электронная почта, запуск программ по расписанию и т.п.). Аналогом демонов в MVS могут считаться запускаемые процедуры (STC).
Каждый процесс имеет уникальный идентификатор PID и может по своей инициативе порождать новые (дочерние) процессы с помощью системных вызовов fork() и spawn(). Таким образом, у каждого процесса (кроме одного, самого первого) существует родительский процесс, связь с которым поддерживается благодаря еще одному атрибуту процесса PPID - идентификатору родительского процесса.
Процессы, порождаемые UNIX-приложениями в z/OS, могут выполняться исключительно в адресных пространствах (АS) MVS, причем как в собственных, так и в адресных пространствах родительского процесса (рис. 5.24). При использовании системного вызова fork() всегда создается новое адресное пространство, являющееся копией родительского. При использовании системного вызова spawn() может быть как создано новое адресное пространство, так и запущена новая задача внутри родительского АS. Адресные пространства, содержащие UNIX-процессы, могут порождаться и по инициативе MVS-приложений при обращении к вызываемым сервисам z/OS UNIX.
Теперь познакомимся более подробно с механизмом выполнения приложений UNIX в z/OS, представленным на рис. 5.25.
Как уже отмечалось, для ядра z/OS UNIX выделяется отдельное адресное пространство (OMVS), создаваемое на этапе инициализации системы и функционирующее в соответствии с настройками, определенными в разделе BPXPRMxx системного реестра SYS1.PARMLIB. Одновременно инициализируется файловая система HFS и создается адресное пространство BPXOINIT (с помощью одноименной процедуры), выполняющее процесс-прародитель (PID=1) для всех процессов. В первую очередь BPXOINIT порождает необходимые системные процессы UNIX.
Новые адресные пространства для приложений UNIX создаются по запросу ядра к менеджеру управления рабочей нагрузкой WLM, который использует для этой цели специальную STC-процедуру BPXAS. Адресное пространство, создаваемое BPXAS, играет роль инициатора JES2, принимая порождаемый процесс UNIX.
Командные интерпретаторы shell, являясь приложениями UNIX, как правило, запускаются в отдельных адресных пространствах для каждого интерактивного пользовательского сеанса. При этом команды и утилиты, запускаемые в рамках сеанса, могут выполняться и как отдельные задачи в адресном пространстве shell, и в собственных адресных пространствах, в зависимости от настройки пользователя.
Особую роль при поддержке UNIX-приложений играет процесс-демон INETD, с помощью которого обеспечивается доступ к shell для удаленных пользователей в TCP/IP-сети с использованием протоколов telnet и rlogin.