Executable
In the context of IBM z/OS, an executable refers to a program in a machine-readable format, typically a **load module** or **program object**, that is ready to be loaded into memory and executed by the operating system. It is the final output of the compilation and linkage-editing (or binding) process, containing machine code, data, and control information necessary for its execution.
Key Characteristics
-
- Machine Code: Contains the actual machine instructions that the z/Architecture processor can directly understand and execute.
- Load Module/Program Object: Stored in a load library (a PDS or PDSE) as a member. A load module is the traditional format, while a program object (PDSE member) offers more flexibility, such as larger sizes and shared access.
- Linkage Edited/Bound: Created by the Linkage Editor or Binder from one or more object modules and resolved external references to other programs or system services.
- Entry Point: Has a defined entry point, which is the starting address where execution begins when the program is invoked.
- Re-entrant/Reusable: Can be designed to be re-entrant (multiple users can share a single copy in memory without interference) or reusable (can be loaded once and executed multiple times by the same user).
Use Cases
-
- Batch Job Execution: Invoked via a JCL
EXECstatement (e.g.,//STEP1 EXEC PGM=MYPROG) to perform tasks like data processing, report generation, or utility functions. - Online Transaction Processing: Programs executed under CICS or IMS TM to handle real-time transactions from terminals or other applications.
- TSO Command Processors: Executables that extend TSO functionality, allowing users to issue custom commands from the TSO READY prompt.
- System Utilities and Services: Core operating system components, utility programs (like IEBGENER, IDCAMS), and system exits are often executables.
- Subroutines and Functions: Executables that are called by other programs to perform specific tasks, promoting modularity and code reuse.
- Batch Job Execution: Invoked via a JCL
Related Concepts
An executable is the culmination of the software development lifecycle on z/OS. It is derived from source code (e.g., COBOL, PL/I, Assembler) which is first translated into object modules by a compiler or assembler. These object modules are then combined and resolved by the Linkage Editor or Binder to form the final executable (load module or program object). It resides in a load library and is loaded into an address space for execution, typically initiated by a JCL EXEC statement or an online transaction manager like CICS or IMS.
- Version Control: Always manage executables and their corresponding source code under a robust Software Configuration Management (SCM) system to track changes and facilitate rollbacks.
- Library Management: Organize executables into appropriate load libraries, using
STEPLIBorJOBLIBin JCL judiciously to control program search order, or placing frequently used programs in the systemLINKLIBorLPALIBfor better performance. - Re-entrancy Design: For programs that will be heavily used or shared across multiple users/tasks (e.g., CICS programs), design them to be re-entrant to optimize memory usage and improve system throughput.
- Performance Optimization: Ensure executables are compiled with appropriate optimization levels and consider factors like program size, I/O patterns, and CPU usage during development and testing.
- Security: Implement proper RACF (or equivalent) security profiles on load libraries and individual load modules to control who can execute, modify, or delete them, preventing unauthorized access or tampering.