Thus, the OS is also loaded over the network. To do that, the client must first setup basic networking functionality. The program to do that could be stored on a CD-ROM, a floppy drive, a ROM chip of some description on the NIC, in the system BIOS or in an even more exotic storage form.
The details of a specific clients network setup (IP, hostname, nameservers etc pp) could be hardcoded into the storage device. This would be inflexible again. Thus, this configuration is also loaded over the network.
How can the client use the network to obtain configuration information if the network is not configured yet? There is a little piece of information hardcoded into every ethernet card. It is the MAC address, which is unique for each card. Some cards may allow you to change the MAC address; don't.
Even without having an IP address, the client can broadcast a request for configuration information over the network. This request won't be routed in the normal way, so you should place the configuration server on the same subnet as the client. Using the client's MAC, the server can then identify the client in its databases and provide the necessary information.
The system should now be able to load the kernel, go through its startup scripts, mount filesystems and be ready to go!
Except, it's still got to swap somewhere. And that's when the trouble starts.
Say you have a file on an NFS mount configured as swapspace. Let's pretend we are the kernel:
Uh.. No RAM left.
Ah, no problem, got some swap.
OK, swapcode, send page X into the swapfile!
swapcode (to itself): Let's build a packet so we can send page X to the server..
swapcode: hey kernel, I need some RAM to build a packet!
Kernel: Uh.. No RAM left.
Ah, no problem, got some swap
OK, swapcode, send page X into the swapfile!
swapcode (to itself): Let's build a packet so we can send page X to the server..
swapcode: hey kernel, I need some RAM to build a packet!
Kernel: Uh.. No RAM left.
Ah, no problem, got some swap
OK, swapcode, send page X into the swapfile!
Let's just assume the box is really slow and the user hits the reset button at this point.
There are workarounds to this problem.