
Gestore del kernel Linux e Monitor delle attività 🐧💻
Linux Kernel Manager e Activity Monitor 🐧💻
Il kernel è la parte del sistema operativo che facilita le interazioni tra i componenti hardware e software. Sulla maggior parte dei sistemi, viene caricato all'avvio dopo il bootloader e gestisce le richieste I/O così come le periferiche come tastiere, monitor, schede di rete e altoparlanti. Tipicamente, il kernel è responsabile della gestione della memoria, gestione dei processi, gestione dei dispositivi, chiamate di sistema e sicurezza.
Le applicazioni utilizzano il meccanismo di chiamata di sistema per richiedere un servizio al sistema operativo e, il più delle volte, questa richiesta viene passata al kernel utilizzando una libreria fornita dal sistema operativo per invocare la relativa funzione del kernel. Mentre il kernel esegue queste attività di basso livello, risiede in una parte separata della memoria chiamata spazio del kernel protetto, che non è accessibile dalle applicazioni e da altre parti del sistema. Al contrario, applicazioni come browser, editor di testo, window manager o lettori audio/video utilizzano un'area diversa e separata della memoria, lo spazio utente. Questa separazione impedisce che i dati utente e i dati del kernel interferiscano tra loro, causando instabilità e rallentamenti, e impedisce inoltre che programmi applicativi malfunzionanti facciano crashare l'intero sistema operativo.
Esistono diversi progetti di kernel a causa dei diversi modi di gestire le chiamate di sistema e le risorse. Ad esempio, mentre i kernel monolitici eseguono tutte le istruzioni del sistema operativo nello stesso spazio di indirizzi per velocità, i microkernel utilizzano spazi diversi per i servizi utente e del kernel per modularità. Oltre a questi, esistono kernel ibridi, nanokernel ed esokernel. L'architettura del kernel ibrido si basa sulla combinazione di aspetti del microkernel e dei kernel monolitici.
Il kernel Linux è il kernel open source, monolitico e simile a Unix utilizzato nelle distribuzioni Linux, in vari sistemi embedded come router e in tutti i sistemi basati su Android. Linus Torvalds ha concepito e creato il kernel Linux nel 1991, ed è ancora sviluppato da migliaia di sviluppatori oggi. È un esempio prominente di software libero e open source ed è utilizzato in altri progetti software libero, in particolare il sistema operativo GNU. Sebbene i sistemi operativi basati su Linux dominino la maggior parte dell'informatica, portano ancora alcuni difetti di progettazione che furono oggetto di un acceso dibattito nei primi giorni di Linux. Ad esempio, ha la maggiore impronta e la maggiore complessità rispetto ad altri tipi di kernel. Ma è una caratteristica di progettazione inerente ai kernel monolitici. Questi tipi di problemi di progettazione hanno portato gli sviluppatori ad aggiungere nuove funzionalità e meccanismi al kernel Linux che altri kernel non hanno.
A differenza dei kernel monolitici standard, il kernel Linux è anche modulare, accettando moduli del kernel caricabili (LKM) che vengono tipicamente utilizzati per aggiungere supporto per nuovo hardware (come driver di dispositivo) e/o filesystem, o per aggiungere chiamate di sistema. Poiché gli LKM possono essere caricati e scaricati dal sistema in esecuzione, hanno il vantaggio di estendere il kernel senza riavviare e ricompilare. Pertanto, le funzionalità del kernel fornite dai moduli non risiedono in memoria senza essere utilizzate e il modulo correlato può essere scaricato per liberare memoria e altre risorse.
I moduli del kernel caricabili si trovano in /lib/modules con estensione .ko (kernel object) in Linux. Mentre il comando lsmod può essere utilizzato per elencare i moduli del kernel caricati, modprobe o insmod/rmmod viene utilizzato per caricare o scaricare un modulo del kernel. insmod/rmmod vengono utilizzati per moduli indipendenti da modprobe e senza richiedere un'installazione in /lib/modules/$(uname -r).
Ecco un semplice esempio di un modulo del kernel Linux che stampa un messaggio quando viene caricato e scaricato. Di seguito sono mostrati i passaggi di compilazione e installazione del modulo utilizzando un Makefile.``` make # build sudo make install # install sudo modprobe lkm_example # load sudo modprobe -r lkm_example # unload
Il comando [dmesg](https://linux.die.net/man/8/dmesg) viene utilizzato di seguito per recuperare il buffer dei messaggi del kernel.```
[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.
kmon fornisce un'interfaccia utente testuale per gestire i moduli del kernel Linux e monitorare le attività del kernel. Per gestione si intende caricamento, rimozione, inserimento in lista nera e visualizzazione delle informazioni di un modulo. Questi aggiornamenti dei moduli del kernel, i log relativi all'hardware e altri messaggi del kernel possono essere monitorati con il monitor delle attività in tempo reale di kmon. Poiché in Linux per queste operazioni è necessario l'uso di diversi strumenti come dmesg e kmod, kmon mira a raccoglierli in un'unica finestra del terminale e a facilitarne l'utilizzo il più possibile, mantenendo al contempo la funzionalità.
kmon è scritto in Rust e utilizza le librerie Ratatui e termion per la sua interfaccia utente testuale.