Tutorial del kernel Linux per principianti

Tutorial del kernel Linux per principianti

Informazioni di base sui sistemi operativi

Un sistema operativo, abbreviato come sistema operativo, è un software che controlla i componenti hardware di un sistema, che si tratti di un telefono, un laptop o un desktop. È responsabile della comunicazione tra il software e l'hardware. Windows XP, Windows 8, Linux e Mac OS X sono tutti esempi di sistemi operativi. Il sistema operativo è costituito da:

  • Il bootloader: software in carica del processo di avvio del dispositivo.
  • Il kernel: il nucleo del sistema e gestisce la CPU, la memoria e i dispositivi periferici.
  • Demoni: servizi di base.
  • Networking: sistemi di comunicazione per l'invio e il recupero di dati tra i sistemi.
  • La shell: comprende un processo di comando che consente la manipolazione del dispositivo attraverso i comandi inseriti in un'interfaccia di testo.
  • Server grafico: il sottosistema che mostra la grafica sullo schermo.
  • Ambiente desktop: questo è ciò con cui gli utenti di solito interagiscono.
  • Applicazioni: sono programmi che eseguono le attività dell'utente come i processori testi.

Spazio del kernel e spazio utenti

Spazio del kernel: Il kernel si trova in uno stato di sistema elevato, che include uno spazio di memoria protetto e il pieno accesso all'hardware del dispositivo. Questo stato di sistema e lo spazio di memoria è del tutto chiamato kernel-space. All'interno dello spazio del kernel l'accesso al nucleo agli hardware e ai servizi di sistema viene gestito e fornito come servizio al resto del sistema.

Spazio utente: Le applicazioni dell'utente vengono eseguite nello spazio utente, dove possono raggiungere un sottoinsieme delle risorse disponibili della macchina tramite le chiamate di sistema del kernel. Utilizzando i servizi core forniti il ​​kernel, ad esempio un'applicazione a livello di utente può essere creata come un software di produttività di gioco o ufficio.

Linux

Linux ha guadagnato popolarità nel corso degli anni a causa di open source, quindi sulla base di un design simile a Unix, e portato su più piattaforme rispetto ad altri sistemi operativi concorrenti. È un sistema operativo, come indicato, che ricorda un sistema operativo UNIX-un sistema operativo multi-tasking stabile e che è stato assemblato come software gratuito e open source per lo sviluppo e la distribuzione. Significa che ogni individuo o azienda ha il permesso di utilizzare, imitare, studiare e alterare il sistema operativo Linux in qualsiasi modo desidera.

Il kernel Linux

Dalla sua prima uscita del 17 settembre 1991, il kernel Linux ha sfidato tutte le probabilità per essere il componente di definizione di Linux. È stato rilasciato da Linus Torvalds e utilizza GNU/Linux per descrivere il sistema operativo. Il sistema operativo Android con sede a Kernel Linux su smartphone ha fatto battere Linux la concorrenza per essere la più grande base di sistema operativo installato di tutti i sistemi operativi per scopi generici. La storia del kernel Linux è disponibile qui.

Un kernel può essere monolitico, microkernel o ibrido (come OS X e Windows 7). Il kernel Linux è un kernel monolitico del sistema operativo che ricorda il sistema UNIX. La linea Linux di sistemi operativi comunemente indicati come distribuzioni Linux si basa su questo kernel. Il kernel monolitico, a differenza del microkernel, non solo comprende l'unità di elaborazione centrale, la memoria e l'IPC, ma ha anche driver di dispositivi, chiamate di server di sistema e gestione del file system. Sono i migliori nel comunicare con l'hardware e svolgono diverse attività contemporaneamente. È per questo motivo che i processi qui reagiscono a una velocità rapida.

Tuttavia, i pochi battute d'arresto sono l'enorme impronta di installazione e memoria necessarie e inadeguata alla sicurezza poiché tutto opera in modalità supervisore. Al contrario, un microkernel può reagire lentamente alle chiamate di applicazione come servizi utente e il kernel sono separati. Sono quindi di dimensioni più piccole rispetto al kernel monolitico. I microkernel sono facilmente estensibili, ma è necessario più codice per scrivere un microkernel. Il kernel Linux è scritto nei linguaggi di programmazione C e Assembly.

La relazione del kernel Linux con l'hardware

Il kernel può gestire l'hardware del sistema attraverso quello che viene definito interruzione. Quando l'hardware desidera interfacciarsi con il sistema, viene emesso un interrupt che interrompe il processore che a sua volta fa lo stesso al kernel. Per fornire la sincronizzazione, il kernel può disabilitare gli interrupt, che si tratti di uno o di tutti loro. In Linux, tuttavia, i gestori di interrupt non vengono eseguiti in un contesto di processo, invece vengono eseguiti in un contesto di interruzione non associati a nessun processo.Questo particolare contesto di interrupt esiste esclusivamente per consentire a un gestore di interrupt di rispondere rapidamente a un singolo interrupt e infine uscire.

Ciò che rende il kernel Linux diverso dagli altri kernel unix classici?

Esistono differenze significative tra il kernel Linux e i classici kernel UNIX; come elencato di seguito:

  1. Linux supporta il caricamento dinamico dei moduli del kernel.
  2. Il kernel Linux è preventivo.
  3. Linux ha un supporto multiprocessore simmetrico.
  4. Linux è gratuito grazie alla sua natura aperta.
  5. Linux ignora alcune caratteristiche UNIX standard che gli sviluppatori del kernel chiamano "mal progettati."
  6. Linux fornisce un modello di dispositivo orientato agli oggetti con classi di dispositivi, eventi a caldo e un sistema di file di dispositivo dello spazio utente
  7. Il kernel Linux non si differenzia tra i thread e i processi normali.

Architechture

Componenti del kernel Linux

Un kernel è semplicemente un gestore delle risorse; La risorsa gestita può essere un dispositivo di processo, memoria o hardware. Gestisce e arbitro l'accesso alla risorsa tra più utenti concorrenti. Il kernel Linux esiste nello spazio del kernel, sotto lo spazio utenti, che è dove vengono eseguite le applicazioni dell'utente. Affinché lo spazio dell'utente possa comunicare con lo spazio del kernel, è incorporata una libreria GNU C che fornisce un forum per l'interfaccia di chiamata di sistema per connettersi allo spazio del kernel e consentire la transizione allo spazio utenti.

Il kernel Linux può essere classificato in tre livelli principali:

  1. L'interfaccia di chiamata di sistema; Questo è il massimo e intraprende le azioni di base come lettura e scrittura.
  2. Il codice del kernel; si trova al di sotto dell'interfaccia di chiamata di sistema, è comune a tutte le architetture del processore supportate da Linux, a volte è definita come codice kernel indipendente dall'architettura.
  3. Il codice dipendente dall'architettura; È sotto il codice indipendente dall'architettura, forma quello che di solito viene definito un pacchetto di supporto per la scheda (BSP): questo contiene un piccolo programma chiamato bootloader che inserisce il sistema operativo e i driver di dispositivo in memoria.

La prospettiva architettonica del kernel Linux è costituita da: interfaccia di chiamata di sistema, gestione dei processi, file system virtuale, gestione della memoria, stack di rete, architettura e driver di dispositivo.

  1. Interfaccia di chiamata di sistema; è un livello sottile che viene utilizzato per intraprendere chiamate di funzione dallo spazio dell'utente nel kernel. Questa interfaccia potrebbe dipendere dall'architettura
  2. Gestione dei processi; è principalmente lì per eseguire i processi. Questi sono indicati come il thread in un kernel e rappresentano una virtualizzazione individuale del particolare processore
  3. Gestione della memoria; La memoria è gestita in quelle che sono note come pagine per l'efficienza. Linux include i metodi in cui gestire la memoria disponibile e i meccanismi hardware per le mappature fisiche e virtuali. Viene inoltre fornito lo spazio di scambio
  4. File system virtuale; Fornisce un'astrazione di interfaccia standard per i file system. Fornisce un livello di commutazione tra l'interfaccia di chiamata di sistema e i file system supportati dal kernel.
  5. Stack di rete; è progettato come un'architettura a strati modellata dopo i protocolli particolari.
  6. I driver di periferica; Una parte significativa del codice sorgente nel kernel Linux si trova nei driver del dispositivo che rendono utilizzabile un particolare dispositivo hardware. Tutorial del driver del dispositivo
  7. Codice dipendente dall'architettura; Tali elementi che dipendono dall'architettura da cui gestiscono, quindi devono considerare la progettazione architettonica per il normale funzionamento ed efficienza.

Interfacce

Chiamate e interruzioni di sistema

Le applicazioni trasmettono informazioni al kernel tramite le chiamate di sistema. Una libreria contiene funzioni con cui le applicazioni funzionano. Le librerie quindi, tramite l'interfaccia di chiamata di sistema, indicano al kernel di eseguire un'attività che l'applicazione desidera. Cos'è una chiamata di sistema Linux?

Gli interrupt offrono un modo attraverso il quale il kernel Linux gestisce l'hardware dei sistemi. Se l'hardware deve comunicare con un sistema, un interrupt sul processore fa il trucco e questo viene trasmesso al kernel Linux.

Interfacce del kernel Linux

Il kernel Linux offre varie interfacce alle applicazioni di spazio utente che eseguono una varietà di attività e hanno proprietà diverse. Esistono due distinte interfaccia di programmazione dell'applicazione (API); IL Spazio dell'utente del kernel e il Kernel Internal. L'API Linux è il Kernel-Userspace API; Dà accesso ai programmi nello spazio dell'utente nelle risorse e nei servizi di sistema del kernel. È composto dall'interfaccia di chiamata di sistema e dalle subroutine dalla libreria GNU C.

Linux Abi

Questo si riferisce all'utente del kernel ABI (applicazione binaria interfaccia). Questo è spiegato come l'interfaccia che esiste tra i moduli del programma. Quando si confrontano API e ABI, la differenza è che gli ABI vengono utilizzati per accedere a codici esterni già compilati mentre l'API sono strutture per la gestione del software. Definizione di un ABI importante è principalmente il lavoro delle distribuzioni Linux che per il kernel Linux. Un ABI specifico dovrebbe essere definito per ciascun set di istruzioni, ad esempio x86-64. Gli utenti finali dei prodotti Linux sono interessati all'ABIS piuttosto che all'API.

Interfaccia di chiamata di sistema

Come discusso in precedenza, questo gioca un ruolo più importante nel kernel. È una denominazione di tutta la parte di tutte le chiamate di sistema esistenti.

La libreria standard C

Tutte le chiamate di sistema del kernel si trovano all'interno della libreria GNU C, mentre l'API Linux è composta dall'interfaccia di chiamata di sistema e dalla libreria GNU C, chiamata anche GLIBC.

Interfaccia del sistema operativo portatile (POSIX)

Posix è un termine collettivo di standard per mantenere la compatibilità tra i sistemi operativi. Dichiara l'API insieme a interfacce di utilità e shell della riga di comando. L'API Linux, non solo ha le funzionalità utilizzabili definite dal posix, ma ha anche funzionalità aggiuntive nel suo kernel:

  1. Cgroup sottosistema.
  2. Le chiamate di sistema del gestore del rendering diretto.
  3. UN readead caratteristica.
  4. GetRandom Chiama che è presente in V 3.17.
  5. Chiamate di sistema come Futex, EPOLL, giunzione, dnotify, Fanotifica E inotificare.

Ulteriori informazioni sullo standard Posix sono qui.

Il kernel modulare

Le versioni precedenti del kernel Linux erano in modo tale che tutte le loro parti fossero state fissate staticamente in una sola, monolitica. Tuttavia, i moderni kernel Linux hanno la maggior parte delle loro funzionalità contenute nei moduli che vengono inseriti nel kernel dinamicamente. Questo in contrasto con i tipi monolitici, è indicato come kernel modulari. Tale configurazione consente a un utente di caricare o sostituire i moduli in un kernel in esecuzione senza la necessità di riavvio.

Il modulo kernel carico Linux (LKM)

Il modo base di aggiungere codice nel kernel Linux è attraverso l'introduzione di file di origine all'albero di origine del kernel. Tuttavia, potresti voler aggiungere un codice mentre il kernel è in esecuzione. Il codice aggiunto in questo modo viene definito un modulo di kernel carico. Questi moduli particolari eseguono vari compiti ma sono specificati in tre: driver di dispositivo, driver di file system e chiamate di sistema.

Il modulo del kernel carico può essere confrontato con le estensioni del kernel in altri sistemi operativi. È possibile inserire un modulo nel kernel caricandolo come LKM o legandolo nel kernel di base.

I vantaggi di LKMS rispetto alla rilegatura nel kernel di base:

  • La ricostruzione del kernel spesso non è necessario, risparmiare tempo ed evita errori.
  • Aiutano a capire problemi di sistema come bug.
  • LKMS salvati spazio come li hai caricati solo quando devi usarli.
  • Dare tempo di manutenzione e debug di manutenzione molto più veloce.

Usi di LKMS

  1. I driver di periferica; Il kernel scambia le informazioni con l'hardware attraverso questo. Un kernel deve avere il driver di un dispositivo prima di usarlo.
  2. Driver del filesystem; Ciò traduce il contenuto di un filesystem
  3. Chiamate di sistema; I programmi nello spazio utente utilizzano le chiamate di sistema per acquisire servizi dal kernel.
  4. Driver di rete; interpreta un protocollo di rete
  5. Interpreti eseguibili; Carica e gestisce un eseguibile.

Compilare il kernel Linux

A differenza di quello che dice la maggior parte delle persone, la compilazione del kernel Linux è un compito semplice. Quello che segue è un'illustrazione passo-passo del processo utilizzando una delle distribuzioni Linux: Fedora 13 KDE. (È consigliabile eseguire il backup dei dati e della grub.conf nel caso in cui qualcosa vada storto)

  1. Da http: // kernel.Sito Web Org, scarica la fonte.
  2. Mentre nella directory dei download, estrai la sorgente del kernel dall'archivio inserendo il comando seguente nel terminale:
    TAR XVJF Linux-2.6.37.catrame.BZ2
  3. Utilizzare il comando rendere mrproper per cancellare l'area di build prima di qualsiasi compilation.
  4. Utilizzare una configurazione Say XConfig, queste configurazioni sono progettate per semplificare l'esecuzione di qualsiasi programma in Linux.
  5. Specifica i moduli e le funzionalità che desideri contenere il kernel.
  6. Dopo aver acquisito il .configurazione file, il prossimo passo è andare a Makefile
  7. Esegui il comando Make e attendi la compilazione.
  8. Installa i moduli usando il comando make modules_install
  9. Copia il tuo kernel e la mappa del sistema su /boot.
  10. Esegui il nuovo kernel-pkg per creare l'elenco di dipendenze dei moduli e cose del genere Grub.conf

Aggiornamento del kernel

È possibile aggiornare un kernel Linux da una versione precedente a una più recente, mantenendo tutte le opzioni di configurazione dalla versione precedente. Per raggiungere questo obiettivo, si deve prima eseguire il backup del .configurazione file nella directory di origine del kernel; Questo è nel caso in cui qualcosa vada storto quando si cerca di aggiornare il kernel. I passaggi sono:

  1. Ottieni l'ultimo codice sorgente dal kernel principale.Sito Web Org
  2. Applicare le variazioni al vecchio albero di origine per portarlo all'ultima versione.
  3. Riconfigurare il kernel in base al file di configurazione del kernel precedente che hai eseguito il backup.
  4. Costruisci il nuovo kernel.
  5. Ora puoi installare il nuovo build il kernel.

Scaricare la nuova fonte; Gli sviluppatori del kernel Linux comprendono che alcuni utenti potrebbero non voler scaricare il codice sorgente completo per gli aggiornamenti del kernel, in quanto ciò perdesse tempo e larghezza di banda. Pertanto, è disponibile una patch che può aggiornare una vecchia versione del kernel. Gli utenti devono solo sapere quale patch si applica a una versione particolare, poiché un file patch del kernel aggiornerà solo il codice sorgente da una versione specifica. I diversi file di patch possono essere applicati attraverso i seguenti modi;

  1. Patch del kernel stabili che si applicano alla versione del kernel di base.
  2. Le patch di rilascio del kernel di base si applicano solo alla versione del kernel di base precedente
  3. Aggiornamento incrementale della patch da una versione particolare alla prossima versione. Ciò consente agli sviluppatori di evitare il trambusto del declassamento, quindi aggiornare il loro kernel. Invece, possono passare dalla loro attuale versione stabile alla prossima versione stabile.

Ecco passaggi più dettagliati per il processo per aggiornare il tuo kernel da Source su Debian e dai binari pre-costruiti su CentOS e Ubuntu.

Conclusione

Il kernel Linux agisce principalmente come un gestore delle risorse che funge da livello astratto per le applicazioni. Le applicazioni hanno una connessione con il kernel che a sua volta interagisce con l'hardware e servizi le applicazioni. Linux è un sistema multitasking che consente a più processi di eseguire contemporaneamente. Il kernel Linux è popolare grazie alla sua natura open source che consente agli utenti di modificare il kernel su ciò che è adatto a loro e al loro hardware. Pertanto può essere utilizzato in una varietà di dispositivi, a differenza di altri sistemi operativi.

La caratteristica modulare del kernel Linux aggiunge più brivido ai suoi utenti. Ciò è dovuto all'ampia varietà di modifiche che possono essere apportate qui senza riavviare il sistema. La flessibilità offre ai suoi utenti una grande stanza per attuare la loro immaginazione.

Inoltre, la natura monolitica del kernel è un grande vantaggio in quanto ha un'elevata capacità di elaborazione rispetto al microkernel. La battuta d'arresto principale con il tipo di kernel Linux è che se uno qualsiasi dei suoi servizi fallisce, l'intero sistema si abbassa con esso. Le versioni più recenti sono state progettate in modo tale che se viene aggiunto un nuovo servizio, non è necessario modificare l'intero sistema operativo. Questo è un miglioramento rispetto alle versioni precedenti.

Fonti

  1. Kernel Wikipedia Linux
  2. Interfacce del kernel Wikipedia Linux
  3. Modulo kernel carico Linux come
  4. Linux.Com Guida per principianti
  5. https: // www.Quora.com/what-are-good-tutorials-to-learn-linux-kernel
  6. https: // unix.StackExchange.com/Domande/1003/Linux-kernel-good-beginners-tutorial
  7. https: // www.Howtogeek.com/howto/31632 // what-is-the-linux-kernel-and-what-does-do-do/