> > Why would PCI bus have to be in the kernel? Why would you need support > > for a disk device in the kernel? > The first thing that springs to mind is that if you lack a disk device > you may have some difficulty in loading the server which provides it, in > paging it in or out, etc..
The code and data that lies on the paging path must be wired in physical memory. This is already an issue for the default pager program, and the issue is essentially the same for any driver code living outside the kernel that is involved in the drivers necessary accessing the disk. The notion here is that the essential pieces for booting would be loaded by the boot loader (we use GRUB), and the multiboot spec was designed with such things in mind. This concept is already expressed in how we boot the Hurd now: the kernel has disk drivers but no filesystem format support; the boot loader loads both the kernel and the first program files that will run into physical memory, and tells the kernel where to find them. The first program file (currently /boot/serverboot in the Hurd) knows about filesystem formats and reads the other programs from the filesystem. In similar fashion, I would envision the boot loader's script instructing it to load the kernel, the driver programs/libraries, and the filesystem program, all into physical memory before starting the kernel. (The same thing would apply even for just using dynamically-loadable kernel modules for device drivers, which is a much simpler case in all other ways being discussed.)

