In computing, booting
is a bootstrapping
process that starts operating systems when the user turns on a computer
system. A boot sequence is the set of operations the computer
performs when it is switched on that load an operating system.
Boot loader
Most computer
systems can only execute code found in the memory (ROM
or RAM); modern operating systems are mostly
stored on hard
disks (occasionally LiveCDs, USB flash drives, and the like). Just after a
computer has been turned on, it doesn't have an operating system in memory. The
computer's hardware alone cannot perform the complex actions
of which an operating system is capable, such as loading a program from disk;
so a seemingly irresolvable paradox is created: to load the operating system into memory,
one appears to need to have an operating system already loaded.
The
solution to the paradox involves using a special small program,
called a bootstrap loader or boot loader. This program doesn't
have the full functionality of an operating system, but is tailor-made to load
enough other software for the operating system to start. Often, multiple-stage
boot loaders are used, in which several small programs summon each other, until
the last of them loads the operating system. The name bootstrap loader
comes from the image of one pulling oneself up by one's bootstraps (see bootstrapping).
Early
programmable computers had toggle switches on the front panel to allow the operator to place the
bootloader into the program store before starting the CPU. This would then read the operating
system in from an outside storage medium such as paper tape,
punched
card, or an old fixed head disk drive.
Pseudo-assembly
code for the bootloader might be as simple as the following eight
instructions:
0: set the P register to 8
1: check paper tape reader ready
2: if not ready, jump to 1
3: read a byte from paper tape reader to accumulator
4: if end of tape, jump to 8
5: store accumulator to address in P register
6: increment the P register
7: jump to 1
A
related example is based on a loader for a 1970's Nicolet Instrument
Corporation minicomputer. Note that the bytes of the second-stage loader are
read from paper tape in reverse order.
0: set the P register to 106
1: check paper tape reader ready
2: if not ready, jump to 1
3: read a byte from paper tape reader to accumulator
4: store accumulator to address in P register
5: decrement the P register
6: jump to 1
The
length of the second stage loader is such that the final byte overwrites
location 6. After the instruction in location 5 executes, location 6 starts the
second stage loader executing. The second stage loader then waits for the much
longer tape containing the operating system to be placed in the tape reader.
The difference between the boot loader and second stage loader is the addition
of checking code to trap paper tape read errors, a frequent occurrence with the
hardware of the time, which in this case was an ASR-33 teletype.
In
modern computers the bootstrapping process begins with the CPU executing software contained in ROM
(for example, the BIOS
of an IBM PC)
at a predefined address (the CPU is designed to execute this software after
reset without outside help). This software contains rudimentary functionality
to search for devices eligible to participate in booting, and load a small
program from a special section (most commonly the boot sector)
of the most promising device.
Boot
loaders may face peculiar constraints, especially in size; for instance, on the
IBM PC and compatibles, the first stage of boot loaders must fit into the first
446 bytes of the Master Boot Record, in order to leave room for
the 64-byte partition table and the 2-byte AA55h 'signature',
which the BIOS requires for a proper boot loader.
Some
operating systems, most notably pre-1995 Macintosh
systems from Apple Computer, are so closely interwoven with their
hardware that it is impossible to natively boot an operating system other than
the standard one. A common solution in such situations is to design a
bootloader that works as a program belonging to the standard OS that hijacks
the system and loads the alternative OS. This technique was used by Apple for
its A/UX Unix implementation and
copied by various freeware operating systems and BeOS Personal Edition 5.
Second-stage boot loader
The
small program is most often not itself an operating system, but only a
second-stage boot loader, such as NTLDR, LILO or GRUB. It will then be able to load the operating system
proper, and finally transfer execution to it. The system will initialize
itself, and may load device drivers and other programs that are needed for
the normal operation of the OS.
The
boot process is considered complete when the computer is ready to interact with
the user or the operating system is capable of running ordinary
applications. Typical modern PCs
boot in about a minute (of which about 15 seconds are taken by the preliminary
boot loaders, and the rest by loading the operating system), while large
servers may take several minutes to boot and to start all services - to ensure
high availability, they bring up some services before others.
Most embedded
systems must boot almost instantly -- for instance, waiting a minute for
the television to come up is not acceptable. Therefore they have their whole
operating system in ROM or flash memory, so it can be executed directly.
BIOS boot devices
A boot device
is any device that must be initialized prior to loading the operating system.
This includes the primary input device (keyboard),
the primary output device (display), and the initial program load device (floppy
drive, hard
drive, CD-ROM,
USB
flash drive, etc.). (An IPL device is any device in the system that can
boot and load an operating system, a stand alone utility (i.e.
memtest86+) or even a boot loader; in old AT machines, this is the floppy drive or
hard drive.)
In a
modern BIOS, the
user can select one of several interfaces from which to boot. These include: hard disk, floppy, SCSI, CDROM, Zip, LS-120, a network
interface card using PXE, or USB (USB-FDD, USB-ZIP, USB-CDROM, USB-HDD).
For
example, one can install Microsoft
Windows on the first hard disk and Linux on the second.
By changing the BIOS boot device, the user can select the operating
system to load.
Boot
sequence on standard PC (IBM-PC compatible)
A PC going through its boot sequence
Upon
starting, a personal computer's x86 CPU runs the instruction located at the
memory location F000:FF00 (on 286s and 386SXs, the base of the code segment is
actually 0xFF0000 and on 386s it is 0xFFFF0000) of the BIOS. This memory
location is close to the end of system memory. It contains a jump instruction
that transfers execution to the location of the BIOS start-up program. This
program runs a Power-On Self Test (POST) to check that
devices the computer will rely on are functioning; it also initializes these
devices. Then, the BIOS goes through a preconfigured list of devices until it
finds one that is bootable. If it finds no such device, an error is given and
the boot process stops. If the BIOS finds a bootable device, it loads and
executes its boot sector. In the case of a hard drive, this is
referred to as the master boot record (MBR) and is often not
operating
system specific. Usually, the MBR code checks the partition table for an active partition. If one
is found, the MBR code loads that partition's boot sector
and executes it. The boot sector is often operating
system specific, however in most operating systems its main function is to
load and execute a kernel, which continues startup. If there
is no active partition or the active partition's boot sector is invalid, the
MBR may load a secondary boot loader and pass control to it and this secondary
boot loader will select a partition (often via user input) and load its boot
sector, which usually loads the corresponding operating
system Kernel.
Other kinds of boot sequence
Some
other processors have other kinds of boot modes; most digital signal processors have the
following boot modes:
- Serial mode boot
- Parallel mode boot
- HPI boot
- Warm boot or soft
reboot (as opposed to hard
reboot) refers to an abridged start up which does not require that power
be removed and reapplied.
Random reboot
Random
reboot is a non-technical
term referring to an unintended (and most likely: undesired) reboot
for which the cause is not immediately evident to the user. Such reboots may
occur due to a multitude of software and / or hardware problems.
No comments:
Post a Comment