On the Amiga, the module that keeps track of linked lists is Exec, the system executive. Exec is the heart of the Amiga operating system since it also is in charge of multitasking, granting access to system resources (like memory) and managing the Amiga library system. As previously discussed, memory location 4 ($0000 0004), also known as SysBase, contains a pointer to the Exec library structure. This is the only absolutely defined location in the Amiga operating system. A program need only know where to find the Exec library to find, use and manipulate all other system code and data. $04 Sysbase | | Exec Library | _____________________________|_____________________________ | | | | | | | | | | | | | | LIBRARIES DEVICES MEMORY RESOURCES INTS PORTS TASKS | | | | | | | DOS Trackdisk Chunk 1 Potgo END IDCMP | | | | | | | Graphics Serial Chunk 2 Keymap IDCMP / \ | | | | | / \ Intuition Parallel END CIAA Workbench / \ | | | | / WAITING Expansion Printer CIAB END / | | | | / File System Layers Input Disk / | | | | READY File System Mathffp Keyboard MISC | | | | | Shell Input.device Icon Gameport END | | | | RAM END Diskfont Timer | | | Application END Audio Task 1 | | Console Application | Task 2 END | END Figure 1-3: Exec and the Organization of the Amiga OS The diagram above shows how the entire Amiga operating system is built as a tree starting at SysBase. Exec keeps linked lists of all the system libraries, devices, memory, tasks and other data structures. Each of these in turn can have its own variables and linked lists of data structures built onto it. In this way, the flexibility of the OS is preserved so that upgrades can be made without jeopardizing compatibility. _______________________________________________________________________ | | | What Every Amiga Programmer Should Know: | | ---------------------------------------- | | The Amiga has a dynamic memory map. There are no fixed locations for | | operating system variables and routines. Do not call ROM routines or | | access system data structures directly. Instead use the indirect | | access methods provided by the system. | |_______________________________________________________________________|