How does a Kernel provides different functionality to OS?
Il sistema operativo avrebbe accesso alle funzionalità del kernel tramite un'interfaccia di chiamata di sistema.
Nell'architettura x86 l'istruzione int accetta un numero di interrupt come argomento che utilizza per generare un interrupt software a cui risponderà un gestore di interrupt. Il kernel avrebbe il proprio numero di interrupt. Il kernel sa cosa fare perché c'è una convenzione di chiamata da seguire quando si tenta di utilizzare una chiamata di sistema.
Ad esempio, per aprire un file su una macchina Linux x86, si posizionerebbe il numero intero 5 nel registro eax (il numero di chiamata di sistema), un puntatore alla stringa del nome file nel registro ebx, i flag nel registro ecx, la modalità nel registro edx e quindi chiamare l'interrupt software con int $ 0x80 . Il kernel quindi fornisce la chiamata di sistema e restituisce il controllo al programma. Esistono modi più efficienti per accedere ai servizi del kernel ma sono specifici per il sistema operativo.
Does it use the BIOS routines or use special device drivers for this, or something else?
I kernel moderni si interfacciavano con l'hardware tramite i driver di dispositivo.
how does it come to know which routine performs what because different BIOS vendors have different coding?
Interfaccia con il BIOS anche tramite interrupt, tranne per il fatto che devono essere eseguiti in modalità "reale" anziché in modalità "protetta" in cui normalmente operano le CPU. La modalità reale è una modalità a 16 bit che offre software illimitato accesso a tutta la memoria fisica e alle periferiche indirizzabili. Questi non sono specifici del BIOS ma specifici dell'architettura della CPU.
If not then what's the use for BIOS routines?
Da utilizzare principalmente durante il processo di avvio iniziale.