Overlay (programming)
Template:Short description Script error: No such module "Distinguish". Template:Use dmy dates Template:Use list-defined references
In a general computing sense, overlaying means "the process of transferring a block of program code or other data into main memory, replacing what is already stored".[1] Overlaying is a programming method that allows programs to be larger than the computer's main memory.[2] An embedded system would normally use overlays because of the limitation of physical memory, which is internal memory for a system-on-chip, and the lack of virtual memory facilities.
Usage
Constructing an overlay program involves manually dividing a program into self-contained object code blocks called overlays or links, generally laid out in a tree structure.Template:Efn Sibling segments, those at the same depth level, share the same memory, called overlay regionTemplate:Efn or destination region. An overlay manager, either part of the operating system or part of the overlay program, loads the required overlay from external memory into its destination region when it is needed; this may be automatic or via explicit code. Often linkers provide support for overlays.[3]
Example
The following example shows the control statements that instruct the OS/360 Linkage Editor to link an overlay program containing a single region, indented to show structure (segment names are arbitrary):
INCLUDE SYSLIB(MOD1)
INCLUDE SYSLIB(MOD2)
OVERLAY A
INCLUDE SYSLIB(MOD3)
OVERLAY AA
INCLUDE SYSLIB(MOD4)
INCLUDE SYSLIB(MOD5)
OVERLAY AB
INCLUDE SYSLIB(MOD6)
OVERLAY B
INCLUDE SYSLIB(MOD7)
+--------------+
| Root Segment |
| MOD1, MOD2 |
+--------------+
|
+----------+----------+
| |
+-------------+ +-------------+
| Overlay A | | Overlay B |
| MOD3 | | MOD7 |
+-------------+ +-------------+
|
+--------+--------+
| |
+-------------+ +-------------+
| Overlay AA | | Overlay AB |
| MOD4, MOD5 | | MOD6 |
+-------------+ +-------------+
These statements define a tree consisting of the permanently resident segment, called the root, and two overlays A and B which will be loaded following the end of MOD2. Overlay A itself consists of two overlay segments, AA, and AB. At execution time overlays A and B will both utilize the same memory locations; AA and AB will both utilize the same locations following the end of MOD3.
All the segments between the root and a given overlay segment are called a path.
Applications
Template:As of, most business applications are intended to run on platforms with virtual memory. A developer on such a platform can design a program as if the memory constraint does not exist unless the program's working set exceeds the available physical memory. Most importantly, the architect can focus on the problem being solved without the added design difficulty of forcing the processing into steps constrained by the overlay size. Thus, the designer can use higher-level programming languages that do not allow the programmer much control over size (e.g. Java, C++, Smalltalk).
Still, overlays remain useful in embedded systems.[4] Some low-cost processors used in embedded systems do not provide a memory management unit (MMU). In addition many embedded systems are real-time systems and overlays provide more determinate response-time than paging. For example, the Space Shuttle Primary Avionics System Software (PASS) uses programmed overlays.[5]
Even on platforms with virtual memory, software components such as codecs may be decoupled to the point where they can be loaded in and out as needed.
Historical use
IBM introduced the concept of a chain job[6] in FORTRAN II. The program had to explicitly call the CHAIN subroutine to load a new link, and the new link replaced all of the old link's storage except for the Fortran COMMON area.
IBM introduced more general overlay handling[7] in IBSYS/IBJOB, including a tree structure and automatic loading of links as part of CALL processing.
In OS/360, IBM extended the overlay facility of IBLDR by allowing an overlay program to have independent overlay regions, each with its own overlay tree. OS/360 also had a simpler overlay system for transient SVC routines, using 1024-byte SVC transient areas.
In the home computer era overlays were popular because the operating system and many of the computer systems it ran on lacked virtual memory and had very little RAM by current standards: the original IBM PC had between 16K and 64K, depending on configuration. Overlays were a popular technique in Commodore BASIC to load graphics screens.[2]
"Several DOS linkers in the 1980s supported [overlays] in a form nearly identical to that used 25 years earlier on mainframe computers."[4][8] Binary files containing memory overlays had de facto standard extensions .OVL[8] or .OVR[9] (but also used numerical file extensions like .000, .001, etc. for subsequent files[10]). This file type was used among others by WordStar[11] (consisting of the main executable WS.COM and the overlay modules WSMSGS.OVR, WSOVLY1.OVR, MAILMERGE.OVR and SPELSTAR.OVR, where the "fat" overlay files were even binary identical in their ports for CP/M-86 and MS-DOS[12]), dBase,[13] and the Enable DOS office automation software package from Enable Software. Borland's Turbo Pascal[14][15] and the GFA BASIC compiler were able to produce .OVL files.
See also
Notes
References
Further reading
- Script error: No such module "citation/CS1". (2+244+4 pages)
- Script error: No such module "citation/CS1".
External links
- ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedOED_2015 - ↑ a b Cite error: Invalid
<ref>tag; no text was provided for refs namedButterfield_1986 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedGNULink_2008 - ↑ a b Cite error: Invalid
<ref>tag; no text was provided for refs namedLevine_2000 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedNRC_1993 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedIBM_1963_FORTRAN - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedIBM_1963_IBJOB - ↑ a b Cite error: Invalid
<ref>tag; no text was provided for refs namedElliot_2012 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedDohmen_1990 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedGavin - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedMabett_1985 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedNecasek_2018_WordStar - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedSidnam-Wright-Stevens_1990 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedHerschel-Dieterich_2000 - ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedEßer_2009