1. Field of Invention
The field of invention relates generally to computer systems and, more specifically but not exclusively, relates to system software to self-migrate from a faulty memory location to a safe memory location.
2. Background Information
In a typical PC architecture, the initialization and configuration of the computer system by the Basic Input/Output System (BIOS) is commonly referred to as the pre-boot phase. The pre-boot phase is generally defined as the firmware that runs between the processor reset and the first instruction of the Operating System (OS) loader. At the start of a pre-boot, it is up to the code in the firmware to initialize the system to the point that an operating system loaded off of media, such as a hard disk, can take over. The start of the OS load begins the period commonly referred to as OS runtime. During OS runtime, the firmware acts as an interface between software and hardware components of a computer system. As computer systems have become more sophisticated, the operational environment between the application and OS levels and the hardware level is generally referred to as the firmware or the firmware environment.
When a computer system starts up, system software is loaded into memory. Usually, system software is loaded once when the computer is booted and is not removed from memory until the system is shut down. In contrast, user applications are designed and implemented so that they may be loaded and torn down numerous times during a single on/off cycle of the computer system. Thus, if the memory location of a user application is faulty, a simple solution is to re-start the application in a different memory location. However, system software generally cannot be moved to a different memory location without resetting the entire computer system.
Today's system software does not have the ability to self-relocate without restarting the computer system. The system software may be able to mark a region of memory as “bad” and keep the information in persistent storage (e.g., flash, CMOS, etc.) so that the next time the system starts, these faulty memory areas will be avoided when loading the system software. However, for systems that rarely reboot, such as a server, errors may grow within a region of memory until finally a complete failure occurs. Also, while scrubbing the failed memory area may reduce some memory errors, repeatedly scrubbing a faulty region wastes resources and creates overhead that reduces system performance.