Relazione tra il kernel e le routine del BIOS [duplicato]

0

In che modo un kernel fornisce diverse funzionalità al sistema operativo? Usa le routine del BIOS o usa driver di dispositivo speciali per questo o qualcos'altro? Se utilizza il BIOS, come viene a sapere quale routine esegue ciò perché diversi produttori di BIOS hanno codici diversi? In caso contrario, a cosa serve la routine del BIOS?

    
posta WhiteSword 18.06.2015 - 09:28
fonte

4 risposte

3

Ti consiglio questo sito web: Wiki OSDev

Si tratta di una pagina molto bella che offre ottime introduzioni alle basi di un sistema operativo e molti codici di esempio per scrivere anche il tuo sistema operativo.

Potrebbe essere un livello un po 'basso ma oltre alle descrizioni molto dettagliate ci sono anche alcune spiegazioni generali su questo argomento. Imho è un'ottima fonte se vuoi davvero capire i sistemi operativi.

Prova questo:

What is a kernel?

The kernel of an operating system is something you will never see. It basically enables any other programs to execute. It handles events generated by hardware (called interrupts) and software (called system calls), and manages access to resources.

The hardware event handlers (interrupt handlers) will for instance get the number of the key you just pressed, and convert it to the corresponding character stored in a buffer so some program can retrieve it.

The system calls are initiated by user-level programs, for opening files, starting other programs, etc. Each system call handler will have to check whether the arguments passed are valid, then perform the internal operation to complete the request.

Most user programs do not directly issue system calls (except for ASM programs, for instance), but instead use a standard library which does the ugly job of formatting arguments as required by the kernel and generating the system call. (For example, the C function fopen() eventually calls a kernel function that actually opens the file.)

The kernel usually defines a few abstractions like files, processes, sockets, directories, etc. which correspond to an internal state it remembers about last operations, so that a program may issue a session of operation more efficiently.

E forse in aggiunta leggi questo .

BIOS

BIOS (Basic Input/Output System) was created to offer generalized low-level services to early PC system programmers. The basic aims were: to hide (as much as possible) variations in PC models and hardware from the OS and applications, and to make OS and application development easier (because the BIOS services handled most of the hardware level interface).
...

    
risposta data 18.06.2015 - 22:29
fonte
1

If not then what's the use for BIOS routines?

Per far funzionare correttamente un kernel è necessario caricarlo (e possibilmente altre cose - driver, "init RAM disk", ecc.) da qualche parte (disco, CD, rete) in memoria. Il kernel avrà anche bisogno di varie informazioni (ad esempio una mappa di memoria fisica) e potrebbe volere che alcune parti dell'hardware siano configurate in un certo modo (ad esempio la scheda video potrebbe essere configurata in anticipo durante l'avvio in modo che il sistema operativo possa utilizzare il video come un "frame buffer" generico quando non c'è un driver video). Il BIOS è usato per tutte queste cose prima che il sistema operativo sia in grado di fare tutto da solo.

Fondamentalmente, il BIOS (o qualcosa che fornisce funzionalità simili - ad esempio UEFI) è richiesto molto presto durante l'avvio e quindi in genere scartato dopo.

Si noti inoltre che le funzioni del BIOS e le funzioni UEFI sono progettate per "CPU singola, singolo tasking, (effettivamente) nessuna interfaccia di sincronizzazione, sincrona"; e i più moderni sistemi operativi sono progettati per "multi CPU, multi-tasking, con paging, interfaccia asincrona". Ciò rende i driver di dispositivo integrati nel firmware (BIOS e UEFI) inutili per un sistema operativo moderno dopo l'avvio.

    
risposta data 18.06.2015 - 22:00
fonte
0

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.

    
risposta data 18.06.2015 - 16:54
fonte
0

In primo luogo, il BIOS (che è specifico per PC ; la maggior parte degli altri computer, in particolare server e tablet, hanno differenti firmware ) è difficilmente usato in questi giorni, tranne che per avviare il kernel del sistema operativo (e anche per alcune cose strane come ACPI & SMI ) , di solito attraverso alcuni caricatore di avvio come GRUB (ma sia Windows che MacOSX hanno i propri boot loader).

I kernel del sistema operativo a 32 bit (o 64 bit) come Linux non usano realmente il BIOS, ma hanno i loro driver.

Leggi anche il wiki di BIOS (e anche UEFI ) e su sistema operativo .

Suggerisco di installare, utilizzare e studiare un software gratuito OS come Linux; sarai in grado di studiare tutto il codice sorgente pertinente!

Negli anni '80 i MS-DOS hanno richiamato i servizi BIOS attraverso INT 13H (che probabilmente è ancora usato dalla maggior parte dei boot loader oggi).

Vedi anche osdev , ha molti wikipage relativi alla tua domanda (e alcuni esempi di codice).

    
risposta data 18.06.2015 - 09:34
fonte

Leggi altre domande sui tag