Supporto generale per le interfacce removibili con il sistema
in funzione, ovvero quelle appartenenti alla categoria
Hot-Swap.
Adattamenti per nuove versioni del compilatore
GCC.
Queste caratteristiche, dettagliate nel seguito, offrono apprezzabili vantaggi
nelle seguenti modalità di utilizzo:
Embedded (per sistemi non troppo ridotti) grazie
al supporto del JFFS
(Journaled Flash File System).
Desktop per l'utilizzo di periferiche multimediali
(sistemi video, sonori, ecc.) collegabili ai
PC
fissi o portatili di ultima generazione.
Professional per:
Server aziendali con applicazioni OLTP
e utilizzo di grandi basi dati ad alte prestazioni.
Server di rete per accesso/condivisione servizi Internet
(Web, FTP, E-MAIL, ecc.), es. per ISP.
Si noti infine che molte altre caratteristiche (intese come naturale
evoluzione di quelle elencate nel presente documento) sono già
state pianificate con la prossima serie di sviluppo 2.5, pertanto
buona parte di queste saranno sicuramente inserite nella
serie 2.4 a partire dalla fine dell'anno 2001.
È stato aggiunto il supporto per le seguenti architetture / processori:
I.B.M. S/390
SPARC 64 bit
Intel Itanium 64 bit
Intel Pentium IV
Intel StrongARM
AMD Duron e Athlon
Transmeta Crusoe
È stato migliorato il supporto per le seguenti architetture / processori:
SPARC 32 bit
ALPHA 64 bit
MIPS 64 bit
Amiga m68k
PowerPC
Intel ARM
Intel Pentium III
Per l'architettura PC, si segnala l'aggiunta di un gestore per l'aggiornamento
del microcodice per CPU P6.
Aggiornamento 10/08/2005: ad oggi il kernel 2.4
non ha ancora il supporto (sysenter)
per le chiamate di sistema accelerate
(supporto che è invece presente nel kernel 2.6);
questo vuol dire che l'esecuzione nei processori Pentium IV
(e in minor misura nei processori AMD K6 e K7) è leggermente
meno efficiente (meno context switch)
che nei processori precedenti (es. Pentium III, ecc.).
Le seguenti modifiche migliorano le prestazioni generali e consentono
l'utilizzo di macchine multi-processori più potenti.
Velocità CPU, rimosso il limite di 2 GHz
per CPU.
N. di CPU, aumentato a 32 (32 bit) e a 64 (64 bit)
il N. max. gestibile in ambienti SMP.
RAM,
aumentata a 64 GB la quantità gestibile con processori a 32 bit;
abilitando la gestione della RAM oltre i 4 GB (MTRR 36 bit o PAE)
si verifica un leggero rallentamento (normalmente 3% - 6%,
random 10% - 12%) negli accessi alla stessa.
IO-APIC,
Input Output Advanced Programmable Interrupt Controller,
aggiunto supporto anche su macchine mono-processore;
aggiunta la possibilità di gestire APIC multipli su
macchine multi-processore.
SMP, Symmetrical Multi Processing,
rimosso il big kernel lock; ora il lock non è
più gestito centralmente dalle chiamate di sistema
(es. poll(), lseek()), ma deve essere eventualmente
gestito dai singoli driver (solo nei casi in cui sia davvero
necessario).
Spinlock, alcuni lock sono stati sostituiti
con una gestione a semafori; il lavoro per aumentare la
granularità della gestione dei lock continuerà
anche nella serie 2.5 e seguenti.
Schedulatore processi,
ottimizzato ulteriormente il funzionamento.
N. max. processi, aumentato il numero massimo gestibile.
Limiti processi utente, ora le verifiche per impedire
il superamento di eventuali limiti previsti (RAM, disk quota, ecc.)
sono molto più stringenti e precise. È stata dedicata
un'attenzione particolare al contenimento dei file scritti su
file system residenti in memoria (es. RAMFS).
Memoria cache, sostituita la vecchia gestione
con doppi buffer con una mono-buffer
(meno copie dei dati e codice sorgente più manutenibile).
I/O elevator, ottimizzato il funzionamento
riducendo il N. max. di richieste mantenibili nella relativa coda.
Code di attesa, wait queues, ottimizzato
e corretto il funzionamento (in casi particolari con SMP attivato).
VM, Virtual Memory, è stato
ottimizzato il funzionamento aggiungendo:
un gestore OOM (Out Of Memory Handler),
per evitare starvation / deadlock
in caso di mancanza assoluta di memoria
(esaurimento RAM + spazio swap);
il gestore OOM dovrebbe, in questo caso, terminare
(kill) i processi identificati come
non indispensabili;
ci sono comunque delle patch che consentono di installare
un proprio gestore OOM al posto di quello standard,
utile se si vogliono utilizzare logiche diverse
nei casi estremi (che dovrebbero comunque essere evitati). Aggiornamento 10/08/2005:
nelle versioni 2.4.25 e 2.4.28 ci sono poi state delle
modifiche nella gestione OOM (configurabilità, ecc.).
nuova gestione dello swap per diminuire al massimo
l'impatto di tale operazione su sistemi carichi
con poca RAM libera; il punto di thrashing è
stato spostato in avanti e con effetti meno avvertibili
(ora è possibile ascoltare decentemente file sonori MP3
mantenendo la CPU occupata al 99% mentre è in corso
uno swap ;-).
NOTA: ora lo spazio richiesto per lo swap
è circa 2-3 volte (es. 256 MB per 128 MB RAM) maggiore
di quello richiesto dalla serie 2.2. Questo dipende dal fatto che ora
il kernel tende a scrivere nello spazio di swap quasi tutte
le pagine dirty.
Accesso diretto (RAW) ai dischi, ora è possibile
accedere ai dischi direttamente senza passare per la memoria
cache e altre interfacce simili; questa funzionalità
migliora sensibilmente la velocità di accesso (in particolare
la velocità di scrittura) ed è quindi assai utile
per le basi dati che possono gestire questo tipo di I/O.
Le seguenti modifiche migliorano la compatibilità con gli standard
usati in altri sistemi Unix.
SHM, Shared Memory,
memoria condivisa, aggiunta la compatibilità con lo standard
POSIX (oltre a quello precedente tipo SYSTEM V); per abilitare la
compatibilità con POSIX è necessario aggiungere
il mount del relativo file system in
/etc/fstab.
N. utenti / gruppi, aumentato da 16 a 32 bit lo
spazio disponibile per i valori di un identificatore
UID o
GID e
consentire quindi un notevole aumento degli stessi (in realtà
è stato solo rimosso un filtro sui primi 16 bit di un intero).
Le seguenti modifiche / aggiunte si riferiscono alle interfacce ad alto livello
verso i file system fisici.
VFS, Virtual File System, modificato
per consentire il supporto LVM e di nuovi file system.
LVM, Logical Volume Manager, aggiunto per
consentire l'uso di volumi logici per una gestione più
flessibile dello spazio sui dischi (senza le rigide limitazioni
dei file system fisici che sono, di solito, dimensionati in fase
di installazione del sistema):
un volume logico può contenere più file system fisici
e quindi estendersi anche su più dischi;
un volume logico può essere più piccolo di un file
system fisico;
un volume logico può essere esteso o ridotto senza
richiedere il ridimensionamento dei file system fisici cui fa
riferimento; questo è utile nel caso in cui sia
necessario aumentare o ridurre lo spazio assegnato a uno o
più utenti.
Sono stati aggiunti i seguenti file system fisici:
NULLFS, Null File System, consente di simulare
il comportamento di nuovi file system senza utilizzare reale spazio
su disco.
RAMFS, RAM File System, (da non confondere
con i RAM disk) è un file system tarato e ottimizzato per gli
accessi in RAM.
CRAMFS, Compressed RAM File System (Read Only),
è un file system compresso, per sola lettura, utile
per essere utilizzato con ROM o dischi di installazione,
es. boot disk, ecc.
UDF-FS, Universal Disk Format File System,
utilizzato nei nuovi supporti DVD (Digital Video Disk).
JFFS, Journaled Flash File System, ottimizzato
per la gestione sicura con supporti Flash Disk (utile per sistemi
embedded).
ReiserFS, Reiser File System, (kernel 2.4.1)
forse il più noto file system con journaling
(essendo stato disponibile per parecchio tempo in alcune distribuzioni
della serie 2.2); fra le sue peculiarità si notano:
tempi ridottissimi (pochi secondi o decine di secondi)
per il controllo e il ripristino della congruenza dei dati
in caso di chiusura non corretta del sistema
(mai più attese di minuti per i controlli eseguiti da
fsck(8) alla ripartenza del sistema 8-);
estrema velocità nell'accesso a direttori con
centinaia di migliaia di file.
Come contropartita pare che i tempi di latenza (risposta) di
un sistema con il ReiserFS aumentino leggermente rispetto
ad uno con EXT2.
EFS, file system usato in sistemi IRIX.
Per supportare le nuove unità hot swap si segnala l'aggiunta
di un file system specifico per gestire le gerarchie dinamiche dei nomi e
delle informazioni di tali unità, il DEVFS
(montato in /dev),
con funzionamento simile al PROCFS
(montato in /proc).
Sono stati aggiornati i seguenti file system:
EXT2, Extended 2 File System,
(standard per Linux).
NFSv3, Network File System, aggiornato alla
versione 3 (la versione 4 offrirà l'Internet File System).
I seguenti file system saranno probabilmente aggiunti nella serie 2.4:
Swap-FS, Swap o Tmp File System,
è il primo file system residente in memoria che,
all'occorrenza, si trasferisce su swap.
EXT3-FS, Extended 3 File System,
è un'estensione, con limitate capacità di
journaling (solo i metadati), dell'EXT2
(il file system standard di Linux); probabilmente
sarà incluso stabilmente nella serie 2.4 entro il 2001.
DAFS, Direct Access File System,
consentirà l'accesso diretto a un dispositivo HW.
Le prossime estensioni riguardanti i FS svilupperanno il supporto
(per ora minimale) per le notifiche dinamiche a uno o più processi
delle modifiche occorse ai direttori e ai file di un file system.
Questa caratteristica consentirà di evitare il polling
dello stato (stat) di un file o di un direttorio
(minori latenze fra modifiche e aggiornamento relative liste file / direttori),
e sarà particolarmente utile a programmi con interfaccia utente,
es. file manager, o a file server.
Si noti infine che la comparsa generalizzata di
file system journaled (giornalizzati),
in grado di mantenere un elevatissimo grado di congruenza
fra dati e metadati, è la risposta alle richieste degli utenti di poter
massimizzare la sicurezza di registrazione dei dati anche nelle condizioni
più critiche, in cui ad es. non sia sempre garantita una chiusura
(shutdown) corretta del sistema operativo.
La capacità di effettuare il journaling dei dati è
una caratteristica considerata ormai indispensabile per i sistemi
mission critical e per quelli destinati a un uso pubblico
generalizzato da parte di utenti non necessariamente accorti,
es. sistemi embedded, set top box, ecc.
Partizioni Mac, ora è possibile leggere e
scrivere direttamente su un disco con partizioni Mac Intosh.
Aggiornamento supporto partizioni.
FAT, sono state aggiornate le relative modalità
di accesso.
Aggiornamento gestione dischi.
Capacità dischi > 32 GB, ora sono supportati
dischi con dimensioni maggiori di 32 GB anche con i BIOS meno recenti
che non li gestiscono.
N. dischi EIDE, è stato aumentato a 10 il
N. max. di unità gestibili; bisogna infatti considerare
che ormai molte unità removibili si presentano con interfacce
EIDE (es. dischi ZIP, ecc.).
Dischi EIDE, aggiornato il supporto per le unità
più recenti:
aggiunto il supporto allo standard ATA-100
(in aggiunta all'ultra DMA 33 e 66);
aggiunta l'abilitazione automatica del DMA (se ritenuta sicura
in base al tipo di disco) per velocizzare l'accesso ai dischi
anche durante le installazioni o comunque senza richiedere
necessariamente un'impostazione manuale con hdparm
o con la configurazione / ricompilazione del kernel.
N. dischi SCSI, è stato rimosso il limite di
max. 16 dischi grazie al DEVFS.
Dischi SCSI, aggiornamento supporto e riscrittura
driver per aumento prestazioni con supporto SCSI-3 (alias SCSI 160).
Dischi RAID, aggiornamento.
Aggiornamento 17/03/2006 Dischi
SATA,
nel kernel 2.4.27 è stata aggiunta la libata
(portata dal kernel 2.6)
che garantisce un supporto ottimale per quei dischi
(cercando di emulare i dischi SCSI).
In questo contesto si ricorda l'aggiunta dell'accesso diretto ai dischi
tramite RAW device.
Interfacce IrDA,
Infra Red Data Association,
utilizzate per comunicare con periferiche esterne (mouse, tastiera,
stampanti, ecc.) con collegamenti senza fili.
Fra le nuove unità / dispositivi supportati si notano:
Unità Win Modem, Windows Modem,
per ora solo i modelli più diffusi.
Porte parallele UDMA,
porte parallele con Ultra DMA.
Nuovi driver e aggiornamenti vari per:
Schede sonore.
Schede video di uscita, per l'utilizzo
in modalità grafica della console tramite
l'interfaccia frame buffer.
Schede video di acquisizione, frame grabber,
per l'acquisizione di immagini da telecamere, tramite driver
rispondenti alle specifiche V4L2 (Video For Linux Ver. 2), es. BTTV.
Modifiche architetturali accesso frame buffer.
DRM, aggiunto il Direct Rendering Manager per
ottimizzare gli accessi diretti al frame buffer
con macchine multi-processori.
Con le sopraelencate caratteristiche il supporto per telecamere
(WebCam o normali BN/CO), sintonizzatori radio (tuners),
ecc. è stato migliorato e velocizzato rispetto alle versioni 2.2.x.
Aggiornamento / riscrittura dei seguenti sottosistemi.
Firewall.
IP Masquerading.
Packet Filtering.
NAT, Network Address Translation.
Aggiunta nuovi sottosistemi.
TUN/TAP adapter per reti virtuali.
KHTTPD,
il Kernel HTTPD è un server HTTPD
che velocizza al massimo la risposta a richieste di pagine
web statiche; tutte le altre richieste (pagine dinamiche)
sono passate in maniera trasparente all'eventuale server HTTPD
configurato nello spazio utente, es. Apache, ecc.;
in questo modo le prestazioni aumentano da 1.2 a 3-4 volte rispetto
ad altri Web Server funzionanti nello spazio utente.
Vi è anche il progetto TUX
che implementa un Web Server multi-threaded incorporato
nel Kernel. Non appena sarà completata l'interfaccia per
lo zero-buffer-copy, ci sarà probabilmente una certa
contesa fra le due implementazioni.
Aggiornamento / riscrittura dei seguenti protocolli.
TCP/IP,
Transport Control Protocol / Internet Protocol,
è stata modificata estesamente l'implementazione per:
deserializzare la gestione dei pacchetti e aumentare quindi
le prestazioni;
aumentare la flessibilità e correggere la gestione
dei protocolli IPV4 e IPV6 (Internet Protocol Ver. 4 / Ver. 6),
es. aggiunta ECN, WakeOne, ecc.
Aggiornamento 10/08/2005: sono state poi aggiunte
le seguenti varianti dello stack TCP/IP classico per migliorare
le prestazioni quando si verificano errori o sporadiche perdite
di pacchetti, specialmente in presenza di elevate latenze di rete
(superiori ai 5-10 millisecondi):
SMB, Server Message Block, adeguata la
compatibilità con Windows NT e 2000.
Aggiunta nuovi protocolli.
NETBEUI, NetBIOS Extended User Interface,
ora è possibile accedere direttamente a risorse di rete
Windows con il suo protocollo nativo.
IrDA, Infrared Data Association,
protocolli per comunicare con periferiche varie
tramite interfacce a infrarossi (senza fili).
Aggiunta nuove reti.
ATM, Asynchronous Transfer Mode, supporto
iniziale a livello di driver.
ARCNET, vecchio tipo di rete ancora in uso
in molte aziende americane.
Aggiunta nuove funzionalità.
ECN, gestione dell'Explicit Congestion
Notification per diminuire il traffico inutile con i protocolli
TCP/IP.
WakeOne, interfaccia socket, se ci sono tanti
processi in ascolto su una porta (socket con indirizzo + porta)
allora si sveglia e si attiva solo un processo, es. invece di
svegliarli tutti e attivarne uno solo;
questa caratteristica diminuisce il consumo di CPU per i
network server es. server HTTPD.
Aggiornamento gestione APM
(Advanced Power Management).
Gestore
ACPI,
per poter programmare e configurare in modo flessibile le logiche
di gestione APM (rif. ACPI4Linux).
Miglioramento supporto per
Wine
(esecuzione in Linux di programmi Windows 32 bit).
Aggiunta specifica chiamata di sistema,
in questo modo la velocità di esecuzione dei programmi Windows
è pari o (rispetto a Windows 2000) leggermente superiore a quella
nativa.
Supporto protocolli CORBA
(comunicazioni client/server indipendenti dalla piattaforma).
Aggiunto modulo sperimentale
kORBit, rif.
Corba in the kernel ?;
in questo modo è possibile implementare server CORBA
in un qualsiasi linguaggio anche interpretato:
annuncio.
gcc 2.72.3 (non molto compatibile con le nuove librerie
GNU);
gcc 2.91.60 alias egcs 1.1.1 (potrebbe funzionare ma non
è consigliato (*)).
I compilatori supportati sono i seguenti:
gcc 2.91.66 alias egcs 1.1.2 (non consigliato (*));
gcc 2.95.2 (usare con cautela (*));
gcc 2.95.3 (consigliato);
gcc 3.2.x (e successivi).
Aggiornamento 17/03/2006
I compilatori NON supportati sono i seguenti:
gcc 4.x.
(*) compilatore con possibili bachi quando usato con ottimizzazione
>= -O2.
È stato fatto un notevole lavoro per eliminare dal kernel
tutti i costrutti che possono mettere in difficoltà, con
determinate configurazioni / ottimizzazioni, alcune versioni del
compilatore GCC (es. 2.95.2).
Il lavoro procede per consentire anche alle versioni più
recenti del GCC
(snapshot compresi) di compilare senza eccessivi problemi
i file sorgenti.
Per ora, specie in alcune distribuzioni basate su RedHat,
si mantiene comunque il
KGCC,
ovvero un compilatore C specifico (Kernel GCC)
usato per la sola compilazione del kernel.
Aggiornamento 10/08/2005:
il lavoro di adattamento alle nuove caratteristiche dei compilatori
è poi proseguito per consentire l'utilizzo sicuro del GCC 3.x.
Makefile e struttura direttori
Al fine di diminuire le criticità e semplificare la gestione dei
Makefile per le varie architetture / configurazioni,
sono state apportate delle modifiche strutturali agli stessi.
Sistema di configurazione delle opzioni
Si segnala il progetto di
Eric Raymond
per utilizzare, in futuro, un apposito linguaggio interpretato
(CML2)
per definire le regole interne alla configurazione
e applicare le relative azioni richieste prima della compilazione
del kernel.
Aggiornamento 10/08/2005: il progetto
kbuild, basato su CML2,
è stato fermato / congelato sin dal 2002 in quanto
giudicato non allineato con gli obiettivi del kernel
(in particolare per la necessità di includere un'interprete
Python
nelle utility del kernel);
tale tendenza è stata poi confermata nel kernel 2.6
in cui non c'è traccia di tale lavoro.