Der Bootloader (GRUB, NTLDR) erfährt vom BIOS die Nummer des Startlaufwerks, lädt damit seine Konfigurationsdatei (grub.cfg, boot.ini), lädt Kernel und zusätzliche Dateien, übergibt die Informationen der Konfigurationsdatei an den Kernel und startet diesen danach. Die Konfigurationsdatei wurde vom Betriebssystem vorher geschrieben, schließlich weiß es, wo es hin installiert wurde.
Wie bestimmte Laufwerke gemappt werden, ist vollständig dem Betriebssystem überlassen. Unter Linux darfst du auch eine Ramdisk starten, dann gibt es keine Startfestplatte (wohl aber ein Startgerät - die Ramdisk selbst). Windows NT (und neuer) selbst ist übrigens nicht auf ein Laufwerk C: angewiesen; das Systemlaufwerk steht in der Registry und kann theoretisch geändert werden.
Unter DOS (und DOS-basiertem Windows) ist C: immer das Bootlaufwerk. Die 32-Bit-Treiber von Windows versuchen mit ein paar Regeln die BIOS-Nummern auf die echten Geräte/Partitionen zu mappen und wenn das fehlschlägt, werden die BIOS-Treiber als Fallback benutzt. Das merkt man dann, wenn man Windows 95 von einem USB-Stick (oder einer PCMCIA-Karte) bootet und dann in den Systemeinstellungen steht, dass das Laufwerk im MS-DOS-Kompatiblitätsmodus verwendet wird. Für moderne Systeme ist das aber keine Lösung mehr.