https://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf
In Appendix B, he gives a brief overview in the first paragraph:
When the x86 computer boots up, it starts executing a program called BIOS, which is stored in non-volatile memory on the motherboard. The task of the BIOS is to prepare the hardware and then transfer control to the operating system. In particular, it transfers control to the code downloaded from the boot sector, the first sector 512 -byte boot disk. The boot sector contains the bootloader: instructions that load the kernel int o memory. The BIOS loads the boot sector at memory address 0x7c00 , and then jumps (sets the processor %ip ) to this address. When the bootloader starts execution, the processor simulates the Intel 8088, and the loader's task is to transfer the processor to a more modern mode of operation, load the xv6 kernel from disk into memory, and then transfer control to the kernel. The xv6 bootloader contains two source files, one of which is written in a combination of the 16-bit and 32-bit x86 assemblies ( bootasm.S ; (8900) ) and one is written in C ( bootmain.c ; <sub> (9000) sub> )
source share