Kernel Linux: sviluppo, descrizione del processo di sviluppo, build, installazione, aggiornamento. Come aggiornare il kernel di Linux?

10/06/2019

Naturalmente, i più comuni oggi sono i sistemi operativi Windows, rilasciati da Microsoft, ma non tutti gli utenti sanno che questo non è in realtà il primo, e certamente non l'unico sistema operativo al mondo. Come sapete, i sistemi operativi furono originariamente sviluppati già negli anni '60 del secolo scorso, ma a causa delle molte caratteristiche specifiche della distribuzione al computer, al momento, non divennero così comuni, che rappresentavano esclusivamente progetti accademici.

Come appare Linux?

kernel linux

Il primo sistema che è andato oltre i confini del suo genitore è Unix, che si è immediatamente diffuso a varie istituzioni educative, avendo una natura completamente aperta. Nel corso del tempo, è stato deciso di nascondere il codice sorgente Unix come segreti commerciali di conseguenza, gli sviluppatori dovevano accontentarsi della sola teoria. La situazione è stata in grado di cambiare drasticamente dopo il rilascio del sistema operativo Minix e del suo successore chiamato Linux. La caratteristica principale di questi sistemi operativi è che contengono codice completamente open source, cioè il kernel di Linux è accessibile a tutti gli utenti. Per questo motivo, questo sistema operativo oggi è il secondo più comune.

Cosa si sa di lui?

Nella letteratura moderna si possono trovare informazioni non tanto specifiche su come funzionano i singoli sottosistemi, il che complica in modo significativo lo sviluppo e l'ulteriore miglioramento di questo sistema operativo, poiché il creatore delle note precedenti, studiando solo la teoria, gli studenti iniziano a formare una visione unilaterale di come può sembrare un sistema operativo a tutti gli effetti. Le cose veramente significative possono semplicemente essere omesse, perché la teoria non le approfondisce.

Vale la pena notare che gli utenti esprimono un grande interesse per il funzionamento del kernel di Linux e, in linea di principio, per l'intero sistema operativo. Così, poco dopo l'apparizione di Minix, apparve anche un gruppo di notizie separato chiamato USENET, destinato esclusivamente alla discussione di questo sistema. Dopo alcune settimane, questo gruppo ha avuto più di 40.000 abbonati, la maggior parte dei quali ha cercato di aggiungere molte opportunità al sistema, cercando di renderlo molto più grande e migliore. Ogni giorno, centinaia di persone in tutto il mondo hanno pensato a quali altre idee e frammenti di codice possono essere proposti.

Tuttavia, molti si stanno chiedendo perché c'è così poca letteratura disponibile sul kernel di Linux ora, ma in realtà potrebbero esserci diverse ragioni sottostanti.

Valore commerciale della documentazione

come aggiornare il kernel di Linux

Dopo l'apparizione di Unix, i suoi codici erano noti alle masse, in conseguenza dei quali venivano attivamente studiati in tutto il mondo. Il libro più famoso che descrive questo sistema operativo è stato Lions Commentary on Unix, che è stato pubblicato per la prima volta nel 1977. Questo libro descrive il lavoro di questo sistema operativo nel modo più dettagliato possibile, a seguito del quale è stato utilizzato in vari corsi universitari dedicati allo studio dei sistemi operativi. Tuttavia, nel tempo, divenne chiaro che Unix si stava gradualmente trasformando in un prodotto commerciale, a seguito del quale era completamente vietato studiare il codice sorgente su vari corsi in modo che lo stato di un segreto commerciale non fosse a rischio.

Come affermano gli esperti, per creare i prerequisiti per un business privato di successo, è necessario innanzitutto creare un'infrastruttura commerciale completamente chiusa con la quale è possibile ottenere una comprensione del codice e dovrebbe funzionare esclusivamente per l'azienda. Qualsiasi occultamento di informazioni sull'architettura è una strategia estremamente efficace per il controllo del progetto, dove ci sono codici open source.

Difficoltà nel controllo dei testi

descrizione del kernel linux

La curva dei costi richiesta per studiare il kernel di Linux in dettaglio sta diventando sempre più lunga, poiché il sistema diventa sempre più complesso e il suo volume aumenta.

La corretta interpretazione dei programmi è un problema piuttosto serio oggi, e sta nel fatto che non è sempre sufficiente avere le proprie fonti. Nel caso in cui un sistema o un programma sia scritto in un linguaggio di livello relativamente basso, come Cobol, Fortran o C, e abbia anche una documentazione di scarsa qualità, tutte le principali soluzioni progettuali si dissolvono completamente in trivia codificante, per cui richiedono una ricostruzione completa. In tali casi, il valore di una documentazione più efficiente, inclusa una descrizione dettagliata dell'architettura, nonché la specifica dell'interfaccia, potrebbe in definitiva essere persino superiore al valore del testo sorgente stesso.

Un possibile approccio suggerito Linus Torvalds, che era lo sviluppo del kernel di Linux. Ha proposto la piena chiarezza del codice sorgente, vale a dire la fornitura di una struttura estremamente chiara, interfacce user-friendly, oltre a seguire il principio di "fare un po ', ma farlo qualitativamente".

Se parliamo dell'approccio proposto da Andrew Morton, qui offriamo più commenti direttamente all'interno del codice sorgente stesso in modo che il lettore possa capire l'intento finale del programmatore.

Quali sono le differenze tra il kernel di Unix e Linux?

Naturalmente, la descrizione del kernel di Linux è significativamente diversa dalla descrizione di base di Unix, ma molti non sanno quali siano queste differenze.

A causa della stessa API, così come dell'origine comune, i moderni kernel Unix sono abbastanza simili tra loro e le eccezioni sono alcuni file binari statici monolitici che esistono come immagini eseguibili di grandi dimensioni che vengono eseguite una sola volta e utilizzano una singola copia dello spazio degli indirizzi. Per garantire il normale funzionamento di Unix, è necessario fornire un sistema completo con un controller di controllo della memoria di paging, con il quale sarà possibile fornire un'efficace protezione della memoria nel sistema, oltre a fornire ogni singolo processo con il proprio spazio di indirizzamento virtuale.

Il kernel Linux non è basato su alcun particolare sistema Unix ed è completamente monolitico. Tuttavia, nonostante ciò, la sua struttura fornisce certe proprietà dell'architettura micronucleare.

differenze

installazione del kernel linux

Ci sono molte differenze che ti permettono di capire come riconoscere il kernel di Linux:

  • Prima di tutto, vale la pena notare la possibilità di supportare moduli caricati dinamicamente. Nonostante il fatto che il kernel di questo sistema operativo sia completamente monolitico, è inoltre supportata la possibilità di caricare e scaricare dinamicamente il codice in caso di necessità. Questa funzionalità è stata originariamente pubblicata nella versione 0.99 e ha contribuito a questo da Peter MacDonald.
  • Il kernel è in grado di supportare il multiprocessing simmetrico. Nella stragrande maggioranza delle versioni commerciali del SO Unix, questa funzione è supportata, ma nelle implementazioni tradizionali tale supporto è più spesso assente.
  • Il kernel di Linux è pre-emptive, cioè può completamente escludere un task in esecuzione anche se funziona in questa modalità kernel. Tra la maggior parte delle implementazioni commerciali, il kernel pre-emptive del sistema operativo Unix ha solo IRIX, Solaris e Unix stesso.
  • In Linux, era consuetudine utilizzare un approccio completamente diverso all'implementazione dei thread, in conseguenza del quale praticamente non differiscono dai processi standard. Considerandoli dal punto di vista del kernel, si può affermare che tutti i processi sono assolutamente identici, solo alcuni di essi si distinguono per la disponibilità di risorse comuni.
  • Il kernel di Linux, una descrizione di quale processo di sviluppo verrà mostrato in seguito, non ha certe funzioni Unix che sono state trovate mal implementate. In particolare, questo vale per gli STREAMS e alcuni altri.

moduli

come riconoscere il kernel di Linux

Nonostante il fatto che il sistema sia monolitico, può essere utilizzato per l'inserimento o la rimozione dinamica del codice del kernel al momento dell'operazione. Gli oggetti caricabili del kernel sono moduli del kernel Linux.

Essenzialmente, il modulo è un programma standard, poiché ha anche punti di uscita e di entrata e si trova nel suo file binario. Tuttavia, va notato che i moduli hanno accesso diretto a varie funzioni e strutture del kernel. Per quei programmi che si trovano nello spazio utente, questo accesso è limitato utilizzando le interfacce della libreria del compilatore.

I moduli partecipano a un'ampia varietà di processi a cui è associato il sistema operativo, incluso l'aggiornamento del kernel Linux. Alcune funzioni potrebbero essere disponibili esclusivamente per quei moduli che sono distribuiti sotto la licenza GPL, in particolare, questo si riferisce alla capacità di lavorare con le code di processo.

montaggio

Il kernel Linux è costruito usando il programma Make specializzato. Dopo aver ottenuto il codice sorgente del kernel, è necessario decomprimere l'archivio linux-2.6.18.tar.bz2, che viene eseguito con l'aiuto di un'utilità speciale Tar che si apre per conto del superutente.

Il comando make defconfig ti permetterà di usare la configurazione standard per questa architettura, ma dovresti capire che nella maggior parte dei casi questo non è abbastanza, quindi devi configurare manualmente il kernel. Per chiamare il programma di configurazione del kernel, immettere il comando make menuconfig. Tutte le informazioni aggiuntive su quali sono i parametri del comando make, è possibile trovare in un file README separato.

Per eseguire il kernel nella configurazione minima, è sufficiente specificare semplicemente il driver del controller IDE che si utilizza nella sezione "Supporto chipset PCI IDE". Inoltre, si dovrebbe prestare attenzione alla sezione "File system", dove dovrebbero essere contrassegnati i file system presenti.

La compilazione del kernel inizia dopo aver premuto il comando make. Nella maggior parte dei casi, viene utilizzato il comando make -j2, poiché sarà possibile aggiornare il kernel Linux molto più velocemente. In questo caso, il parametro -j2 indica che due thread di esecuzione vengono lanciati contemporaneamente.

avvertimento

moduli del kernel linux

L'esecuzione di qualsiasi esperimento con il kernel può portare a processi dannosi molto diversi, poiché non tutti gli specialisti possono aggiornare il kernel di Linux. Le conseguenze possono essere molto gravi, tra cui un crash completo del sistema e la completa distruzione delle informazioni sul disco. Per questo motivo, per garantire la massima sicurezza, si consiglia di utilizzare solo una distribuzione separata installata sulla macchina virtuale.

Oltre alla sicurezza, è possibile utilizzarlo per ottenere una configurazione uniforme di tutti i computer coinvolti in questa procedura. Si raccomanda di utilizzare Slackware Linux come distribuzione perché utilizza componenti software non modificati. VMware o QEMU possono fungere da macchina virtuale, ma non è necessario.

L'installazione del kernel Linux dura circa 20 minuti, mentre vale la pena notare che la compilazione del kernel, che è costruita secondo la configurazione standard, può essere fatta senza creare un disco RAM, poiché in questo caso non c'è la creazione di alcun driver di avvio importante.

disegno

sviluppo del kernel linux

Un kernel è una raccolta di interfacce chiamate chiamate di sistema che forniscono l'interazione tra vari programmi applicativi che operano nello spazio utente e l'hardware del sistema. Ad esempio, quando si lavora con singoli file, i programmi di utilità potrebbero non tenere conto del tipo di disco rigido e del file system utilizzato.

Tramite chiamate di sistema viene fornita la garanzia di un funzionamento stabile e sicuro del sistema. Poiché il nucleo è un intermediario tra diversi programmi e risorse di sistema, essi possono prendere decisioni in merito alla concessione dell'accesso nel pieno rispetto dei diritti dell'utente, nonché a un numero di altri criteri.

Lo sviluppo di programmi applicativi viene effettuato utilizzando interfacce di applicazioni software specializzate. In questo caso, non è necessario correlare tra le interfacce usando le applicazioni e quelle fornite dal kernel stesso. Potrebbe esserci un'API assolutamente identica per diversi sistemi operativi, mentre la sua implementazione potrebbe essere eccellente. Ad esempio, Linux e il sistema FreeBSD finora noti sono pienamente conformi allo standard POSIX, in conseguenza del quale la maggior parte delle applicazioni scritte specificamente per un sistema operativo può essere successivamente trasferita a un altro, se necessario.

In una certa parte, l'interfaccia alle funzioni di sistema viene fornita utilizzando la libreria C. Ad esempio, la funzione printf consente di creare una riga corrispondente al formato specificato, in seguito alla quale questo sink verrà trasferito alla chiamata di sistema write che lo invia al dispositivo di output standard, che può essere, ad esempio, il terminale .

Inoltre una libreria separata funzioni linguistiche C fornisce anche una parte piuttosto ampia dello standard dell'API POSIX. In particolare, con l'aiuto del comando strace, se necessario, è possibile tracciare in dettaglio l'appeal di un programma specifico sul kernel, se viene eseguito utilizzando le chiamate di sistema. Per questo motivo, questo comando viene spesso utilizzato quando si verificano errori, per eseguirne il debug e anche per trovare la causa della loro occorrenza.

Tra le altre cose, vale la pena notare il fatto che Linux ha un'implementazione assolutamente unica di thread, poiché non vi è alcuna differenza tra thread e processi. Il multithreading è organizzato come un processo con risorse condivise, mentre ci sono anche thread separati nello spazio del kernel che vengono eseguiti esclusivamente lì. Tuttavia, la pianificazione e l'esecuzione vengono eseguite come nel caso dei processi standard. Quando possibile, tutti i programmi eseguiti nel kernel sono definiti come attività separate, mentre i programmi in esecuzione in modalità utente sono chiamati processi.

Vale la pena notare che nei processi di sistemi moderni utilizzano due risorse virtuali contemporaneamente.