JCL stands for Job Control Language, which is a scripting language used on IBM mainframe operating systems to instruct the system on how to run a batch job or start a subsystem. A job is a separately executable unit of work defined by a user and run by a computer. JCL is used to convey information to the operating system about the work to be done, such as where to find the appropriate input, how to process that input, and what to do with the resulting output. JCL was developed as a means of ensuring that all required resources are available before a job is scheduled to run. It is mainly a set of control statements that provide the specifications necessary to run an application program. JCL files can be long and complex, and the language is not easy to read. However, the general concepts are quite simple, and most jobs can be run using a very small subset of these control statements. All jobs require the three main types of JCL statements: job control statements, execution control statements, and data definition statements.