Ferrite core memory and magnetic drums replaced cathode ray tubes and delay-line storage for main memory. Index registers and floating point arithmetic hardware became widespread. Machine-independent high level programming languages such as ALGOL, COBOL and Fortran were introduced to simplify programming.
I/O processors were introduced to supervise input-output operations independently of the CPU thus freeing the CPU from time-consuming housekeeping functions. The CPU would send the I/O processor an initial instruction to start operating and the I/O processor would then continue independently of the CPU. When completed, or in the event of an error, the I/O processor sent an interrupt to the CPU.
Batch processing became feasible with the improvement in I/O and storage technology in that a batch of jobs could be prepared in advance, stored on magnetic tape and processed on the computer in one continuous operation placing the results on another magnetic tape. It became commonplace for auxiliary, small computers to be used to process the input and output tapes off-line thus leaving the main computer free to process user programs. Computer manufacturers began to provide system software such as compilers, subroutine libraries and batch monitors.
With the advent of second generation computers it became necessary to talk about computer systems, since the number of memory units, processors, I/O devices, and other system components could vary between different installations, even though the same basic computer was used.
The instruction repertoire of the IBM 7094 (a typical second generation machine) had over 200 instructions including data transfer instructions for transferring a word of information between the CPU and memory or between two CPU registers; fixed-point and floating point arithmetic instructions; logic instructions (AND, OR etc.); instructions for modifying index registers; conditional and unconditional branching; subroutines; input-output operations for transferring data between I/O devices and main memory.