We will now discuss some of the important steps the system takes when it is booting, when it is first starting up. All x86-based physical Linux systems, that includes laptops, most workstations, et cetera, use a software system called GRUB, which stands for GRand Unified Bootloader, that handles the earliest phases of the system startup. This is not true when you get to embedded devices, such as set-top boxes, medical devices et cetera. They use other platforms, such as Das U-Boot in order to start. Now, GRUB has a number of important features, you can boot into alternative operating systems, make your choice at boot time. This is called a Bootloader. So, you might have a computer that has Windows on it, it has more than one Linux distribution on it, it might have Red Hat, it might have Ubuntu, it might have Debian, et cetera. So, you can choose among those when you start. Within a given operating system, you can make choices as to which kernel you want to start with, or you can use different initial ramdisk that we'll talk about shortly, or you can specify different options that the system should start with. Furthermore, if you want, you can change things when the system starts by entering an interactive system that lets you change the options and other variables with which the system starts, and you don't have to actually change configuration files on the machine. To do this, you can do it on the fly. Now, GRUB has been through a number of versions, almost all modern distributions use these days GRUB 2, which is quite different from GRUB 1. So, we won't really discuss GRUB 1. But in GRUB 2, there's really only one configuration file in the boot directory that counts and that's called "grub.cfg". Exactly where it is will depend a little on your kind of system, both in terms of your distribution and your hardware, but it will be there someplace. Generally, this is not a file you edit by hand, it's a file that's generated for you when you are configuring the system, or installing a new kernel, or compiling a new kernel, et cetera. There's a couple of other directories on our system that matter. Under "/etc/grub.d", there's a number of files that control how GRUB works, and under "/etc/default", there's a file named "grub", which contains basic parameters that GRUB needs. These files can be edited by hand and they're used to generate "grub.cfg". So, when the system boots, it begins with the so-called BIOS space, basic input-output system, or CMOS, identifying, initializing the most important system and attach peripheral devices, such as input like a keyboard and initial hard-disk, so that you can actually load the kernel. You can make choices in the BIOS about booting off a peripheral device, maybe a USB drive, for instance. Older systems have what's called the Master Boot Record, that contains both the partition table and the bootloader, which is part of GRUB that loads the actual operating system. The kernel itself can have different names, usually it's "vmlinuz", and then appended with a version number. The "z" indicates that the kernel is compressed, as it loads it decompresses itself. We will get into some of this in more detail shortly, but that's the basics.