Joined: 22 Nov 2005 Posts: 700 Location: Troy, Michigan USA
Many years ago, in the Middle Ages on computes, way back in the 80s, the constraints of the operating system could only access a 24 bit address, about 16meg. Within this 16 meg partition was the operation system, system libraries, and your program along with all of your working storage. Well the operating system and system libraries (depending upon the site installation) would use anywhere from 4 ? 8 meg of storage. So the remaining available partition space was anywhere from 8 ? 12meg. It didn?t take long for the remaining partition storage to be used up by the program, and more storage was needed. One method, within the 16 meg constraints was to create overlays in the program, but this was inefficient and difficult to control.
I think with the introduction of MVS/XA (someone correct me if I?m wrong), the operating system was upgraded to be able to access a 31 bit address, about 2 gig.
Because the operating system needs to be able to run previously complied programs that use only 24 bit addressing, the operating system could run in two modes 24 bit or 31 bit addresses. But new programs had the option of being compiled using 24 bit or 31 bit addresses. This means that if a program was compiled in a 31 bit address mode it could, but did not have to, run in the address space above the 16 meg line. One of the things that force the program to have to run above the 16 meg line is if it is larger than the available space below the line.
Once the program has been compiled to run in the 24 or 31 bit modes, the linkage editor also has options that request the object module to be link edited in 24 or 31 bit mode. If the linkage editor finds the program to be compiled in 24 bit mode, the object module will also be link edited in 24 bit mode, regardless of the link edit option.
There are link edit options for data to be stored above the line and for the object module to run above the line.
There must be special considerations in mixing programs subprograms that are compiled/link edited in 24 or 31 bit mode. i.e. a subprogram compiled/link edited to run in 24 bit mode cannot receive be called by a program or receive data from above the 16 meg line because the 31 bit address is truncated at 24 bits.
This is probably more confusing than helpful, but it?s my best shot.