Supervisor Applications Each computer has some variant of a "supervisor" application --- a program that is responsible for performing a power-on self-test (POST), and then providing an environment for loading a kernel. Each of the supervisor applications has its own method of interacting with a user, and most have basic configuration parameters that can be set for a single session and/or saved for future sessions. The supervisor application for a PC running Linux is called the BIOS. The BIOS sits on a small chip on the PC's motherboard (I'll show an example during class), and prints a small message to the video when the machine starts up. The BIOS' job is to allow the user to activate/deactivate particular pieces of hardware, and to specify where the BIOS should look for a boot loader or kernel. Many operating systems (windows 3.1, 9X [not NT]) have their kernel loaded directly by the BIOS. Others like NT or Linux (or Solaris) have the BIOS read a boot loader, which then loads the kernel. This is to provide a way for the kernel to be given arguments when it starts. Unfortunately, the naming conventions and procedure for booting is one of the few places where each UNIX pretty much reinvents the wheel. The reason is slightly political, with some major technical problems. We'll discuss in class, but you won't be responsible for remembering it. The short story is that BSD variants originally booted out of DOS (the OS that underlies Windows 3.1 and 95). Linux originally booted out of DOS too, but someone decided that DOS was offensive and wrote a bootloader. Linux specific: The boot loader that Linux (when running on a PC) uses is called "LILO". LILO gives a prompt to the user when it begins ("LILO:") and provides a way to lock access, boot into different run levels (we'll talk about this later), boot with a different kernel image, etc. LILO uses the /boot directory to store its data. It also references the kernel, which usually sits in /vmlinuz (Linux kernel specific), but might be elsewhere. These files aren't referenced by filename when booting, but rather by their physical location on disk. Every time that the kernel is replaced, lilo(8) must be run to update the /boot directory with the new location of the kernel (even if the new kernel has the same name as the last one). To learn more about why this needs to be done, read an OS book or a systems programming book (the sections on filesystems).