The  basic memory management in CP/M is quite simple. All the programs are  loaded at fixed address in the memory. In CP/M, programs are basically  divided in two parts: the program executable code, and the fixed data  (the values that don’t change, such as constant values in the program,  character strings, and so on). 
                   A  software, which loads the program from disk to the memory, is called as  a loader (actually it is from anywhere to the memory). In CP/M, this  loader is a part of the CCP. In CP/M, this loader loads the program  executable code, and the static data to the memory. A program  furthermore needs some more space in the memory to store some temporary  data, like temporary variables used in the program, and space to pass  parameters to subroutines*1, and some more stuff like that which you  don’t know yet. The memory space used for storing such temporary data by  the programs, is called as “stack”.  In CP/M, this stack is  placed at the highest location in the memory, right underneath the OS  itself (nothing has higher location then the CP/M OS). This kind of  placement allows the stack to increase its size (in case of more  temporary data is placed in it) towards the lower locations of the  memory. After looking at the following diagram, you will understand  everything, but don’t look at it till you go there while reading, so  just keep reading. If memory is available below the stack, then it would  grow with no problem. But suppose memory locations below the stack are  already occupied, then what? Well, just like when two interstellar  objects come too close, they collide, causing trouble for the objects  nearby. In the same manner, in CP/M, when stack tries to occupy some  memory location which is already occupied by, then a “collision” takes  place on that memory location.
                   Unfortunately,  CP/M did not have any method for detecting the collision between the  stack and the fixed data. Such collision usually crashes the program or  produces strange results/errors (not like disturbance in gravitational  field, but still strange enough). This happens because the processors  used with CP/M don’t have memory management registers for memory  protection (these processors were Intel 8080, 8085, Zilog Z-80, and  compatibles). Such memory over-writing bugs were difficult to find, and  to fix, and they occurred quite frequently in CP/M system.
                   In memory, there is a large pool of memory, which can be dynamically allocated and returned. This pool is called as “heap”.  It is created for the programs written in high-level programming  languages*2 (like Pascal, or BASIC). The heap is set aside by the  loader, but it is managed by the routines from runtime libraries of the  high level language. Not all the programs use a heap. If some program  uses a heap, then it is allocated between the fixed data, and the stack.
                   The program header  is located in memory immediately after the executable binary code of  the program which is being executed. The program header contains  pointers to memory addresses where the stack is located, and to the  memory addresses where the fixed data is located. It also contains one  more pointer, which points the strings, which are passed as parameters  to the program when the user types the command, and supplies arguments  to the program.
                   The  reason behind CP/M being loaded at the highest location of the memory  was the hardware difference. Just like the current days, the computer  systems from the period of CP/M did not have same amount of the memory.  Some computer systems might have 32 KB of memory (RAM), others 48, or 64  KB. So CP/M was configured to occupy the highest location of memory,  leaving a fixed address (always 100 Hex) to load the other data. If the  OS becomes larger, it starts at a lower address of the memory, but it  doesn’t force any programs to change the addresses, although a user  program might get less memory space, in which to run. This also means  that, when the OS is upgraded to a new version, it is not necessary to  re-link all the application programs.

 
No comments:
Post a Comment