4,2 Comprendere l’Hardware del Computer

Introduzione

Senza hardware, il software non è altro che un’altra forma di letteratura. L’hardware elabora i comandi descritti dal software e fornisce meccanismi per l’archiviazione, l’input e l’output. Anche il cloud è in ultima analisi supportato dall’hardware.

Come sistema operativo, una delle responsabilità di Linux è fornire software con interfacce per accedere all’hardware di un sistema. La maggior parte delle specifiche di configurazione esulano dall’ambito di questa lezione. Tuttavia, gli utenti sono spesso preoccupati per le prestazioni, la capacità e altri fattori dell’hardware di sistema poiché influenzano la capacità di un sistema di supportare adeguatamente applicazioni specifiche. Questa lezione descrive l’hardware come elementi fisici separati utilizzando connettori e interfacce standard. Gli standard sono relativamente statici. Ma il fattore di forma, le prestazioni e le caratteristiche di capacità dell’hardware sono in continua evoluzione. Indipendentemente dal modo in cui i cambiamenti possono sfocare le distinzioni fisiche, gli aspetti concettuali dell’hardware descritti in questa lezione sono ancora validi.

NotEat vari punti all’interno di questa lezione vengono utilizzati esempi da riga di comando per dimostrare i modi per accedere alle informazioni sull’hardware. La maggior parte degli esempi provengono da un Raspberry Pi B+, ma dovrebbero essere applicati alla maggior parte dei sistemi. La comprensione di questi comandi non è necessaria per comprendere questo materiale.

Alimentatori

Tutti i componenti attivi di un sistema informatico richiedono elettricità per funzionare. Purtroppo, la maggior parte delle fonti di elettricità non sono appropriate. L’hardware del sistema informatico richiede tensioni specifiche con tolleranze relativamente strette. Che non è quello che è disponibile dalla presa a muro locale.

Gli alimentatori normalizzano le fonti di energia disponibili. I requisiti di tensione standard consentono ai produttori di creare componenti hardware utilizzabili in sistemi in qualsiasi parte del mondo. Gli alimentatori desktop tendono a utilizzare l’elettricità dalle prese a muro come fonte. Gli alimentatori server tendono ad essere più critici, quindi possono spesso connettersi a più fonti per garantire che continuino a funzionare in caso di guasto di una fonte.

Consumare energia genera calore. Un calore eccessivo può causare un funzionamento lento dei componenti del sistema o addirittura un guasto. La maggior parte dei sistemi ha una qualche forma di ventola per spostare l’aria per un raffreddamento più efficiente. Componenti come i processori spesso generano calore che il flusso d’aria da solo non può dissipare. Questi componenti caldi attaccano speciali alette note come dissipatori di calore per aiutare a dissipare il calore che generano. I dissipatori di calore hanno spesso un piccolo ventilatore locale per garantire un adeguato flusso d’aria.

Scheda madre

Tutto l’hardware di un sistema deve interconnettersi. Una scheda madre normalizza tale interconnessione utilizzando connettori standardizzati e fattori di forma. Fornisce inoltre supporto per la configurazione e le esigenze elettriche di tali connettori.

Esistono un gran numero di configurazioni della scheda madre. Supportano diversi processori e sistemi di memoria. Hanno diverse combinazioni di connettori standardizzati. E si adattano alle diverse dimensioni della confezione che li contiene. Tranne forse per la possibilità di collegare specifici dispositivi esterni, la configurazione della scheda madre è effettivamente trasparente per gli utenti. Gli amministratori sono per lo più esposti alla configurazione della scheda madre quando è necessario identificare dispositivi specifici.

Quando l’alimentazione viene applicata per la prima volta, c’è hardware specifico della scheda madre che deve essere configurato e inizializzato prima che il sistema possa funzionare. Le schede madri utilizzano la programmazione memorizzata in memoria non volatile nota come firmware per gestire hardware specifico della scheda madre. La forma originale del firmware della scheda madre era conosciuta come BIOS (Basic Input/Output System). Oltre alle impostazioni di configurazione di base, il BIOS era principalmente responsabile dell’identificazione, del caricamento e del trasferimento delle operazioni a un sistema operativo come Linux. Con l’evoluzione dell’hardware, il firmware è stato ampliato per supportare dischi più grandi, diagnostica, interfacce grafiche, reti e altre funzionalità avanzate indipendenti da qualsiasi sistema operativo caricato. I primi tentativi di avanzare il firmware oltre il BIOS di base erano spesso specifici per un produttore di schede madri. Intel ha definito uno standard per firmware avanzato noto come EFI (Extensible Firmware Interface). Intel ha contribuito EFI a un’organizzazione di standard per creare UEFI (Unified Extensible Firmware Interface). Oggi, la maggior parte delle schede madri utilizza UEFI. BIOS e EFI non sono quasi mai visti su sistemi recenti. Indipendentemente da ciò, la maggior parte delle persone fa ancora riferimento al firmware della scheda madre come BIOS.

Ci sono pochissime impostazioni del firmware di interesse per gli utenti generali, quindi solo le persone responsabili della configurazione hardware di sistema in genere hanno bisogno di gestire il firmware e le relative impostazioni. Una delle poche opzioni comunemente cambiate è abilitare le estensioni di virtualizzazione delle CPU moderne.

Memoria

La memoria di sistema contiene i dati e il codice di programma delle applicazioni attualmente in esecuzione. Quando parlano di memoria del computer, la maggior parte delle persone si riferisce a questa memoria di sistema. Un altro termine comune utilizzato per la memoria di sistema è l’acronimo RAM (Random Access Memory) o qualche variazione di tale acronimo. A volte vengono utilizzati anche riferimenti al packaging fisico della memoria di sistema come DIMM, SIMM o DDR.

Fisicamente, la memoria di sistema viene solitamente impacchettata su singoli moduli di circuito che si collegano alla scheda madre. I singoli moduli di memoria attualmente variano da 2 GB a 64 GB. Per la maggior parte delle applicazioni generali 4 GB è la memoria minima di sistema persone dovrebbero prendere in considerazione. Per le singole workstation 16 GB è in genere più che sufficiente. Tuttavia, anche 16 GB potrebbero essere limitanti per gli utenti che eseguono applicazioni di gioco, video o audio high-end. I server spesso richiedono 128 GB o addirittura 256 GB di memoria per supportare in modo efficiente i carichi degli utenti.

Per la maggior parte Linux permette agli utenti di trattare la memoria di sistema come una scatola nera. Viene avviata un’applicazione e Linux si occupa di allocare la memoria di sistema richiesta. Linux rilascia la memoria per l’uso da parte di altre applicazioni al termine di un’applicazione. Ma cosa succede se un’applicazione richiede più della memoria di sistema disponibile? In questo caso, Linux sposta le applicazioni inattive dalla memoria di sistema in un’area disco speciale nota come spazio di swap. Linux sposta le applicazioni inattive dallo spazio di swap del disco alla memoria di sistema quando devono essere eseguite.

I sistemi senza hardware video dedicato utilizzano spesso una parte della memoria di sistema (spesso 1 GB) per fungere da archivio video. Questo riduce la memoria di sistema efficace. L’hardware video dedicato in genere dispone di una propria memoria separata che non è disponibile come memoria di sistema.

Esistono diversi modi per ottenere informazioni sulla memoria di sistema. Come utente, la quantità totale di memoria disponibile e in uso sono in genere i valori di interesse. Una fonte di informazioni sarebbe quella di eseguire il comando libero insieme al parametro -m per utilizzare megabyte nell’output:

$libero -m

totale utilizzato libero buff/cache condivisa disponibile

Mem: 748 37 51 14 660 645

Scambio: 99 0 99

La prima riga specifica la memoria totale disponibile per il sistema (totale), la memoria in uso (usata) e la memoria libera (libera). La seconda riga visualizza queste informazioni per lo spazio di scambio. Memoria indicata come condivisa e buff/cache è attualmente utilizzata per altre funzioni di sistema, anche se la quantità indicata in disponibile potrebbe essere utilizzata per l’applicazione.

Processori

La parola «processore» implica che qualcosa viene elaborato. Nei computer la maggior parte di quella elaborazione si occupa di segnali elettrici. In genere questi segnali sono considerati come aventi uno dei valori binari 1 o 0.

Quando si parla di computer spesso usano il word processor in modo intercambiabile con l’acronimo CPU (Central Processing Unit). Il che non e’ tecnicamente corretto. Ogni computer per uso generale ha una CPU che elabora i comandi binari specificati dal software. Quindi è comprensibile che le persone interscambiano processore e CPU. Tuttavia, oltre a una CPU, i computer moderni includono spesso altri processori specifici per attività. Forse il processore aggiuntivo più riconoscibile è una GPU (Graphical Processing Unit). Pertanto, mentre una CPU è un processore, non tutti i processori sono CPU.

Per la maggior parte delle persone l’architettura della CPU è un riferimento alle istruzioni supportate dal processore. Sebbene Intel e AMD realizzino processori che supportano le stesse istruzioni, è significativo differenziare in base al fornitore a causa delle differenze di imballaggio, prestazioni e consumo energetico specifici del fornitore. Le distribuzioni software usano comunemente queste denominazioni per specificare l’insieme minimo di istruzioni che richiedono per operare:i386

Riferimenti il set di istruzioni a 32 bit associato a Intel 80386.x86

In genere fa riferimento ai set di istruzioni a 32 bit associati ai successori a 80386, ad esempio 80486, 80586 e Pentium.x64/ x86-64

Riferimenti processori che supportano sia le istruzioni a 32 bit che a 64 bit della famiglia x86. AMD

Un riferimento al supporto x86 da parte dei processori AMD.AMD64

Un riferimento al supporto x64 di AMD Processors.arm

Riferimenti a una CPU RISC (Reduced Instruction Set Computer) che non si basa sul set di istruzioni x86. Comunemente usato da dispositivi embedded, mobili, tablet e alimentati a batteria. Una versione di Linux per ARM è usata da Raspberry Pi.

Il file /proc/cpuinfo contiene informazioni dettagliate sul processore di un sistema. Purtroppo i dettagli non sono amichevoli per gli utenti generali. Un risultato più generale può essere ottenuto con il comando lscpu. Uscita da un Raspberry Pi B+:

$lscpu

Architettura: armv7l

Ordine di byte: Little Endian

CPU: 4

Lista CPU on-line: 0-3

Filettatura (i) per nucleo: 1

Nucleo (i) per presa: 4

Zoccolo (i): 1

Modello: 4

Nome del modello: processore ARMv7 rev 4 (v7l)

CPU max MHz: 1400.0000

CPU min MHz: 600.0000

BogoMips: 38.40

Bandiere: mezzo pollice fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

Per la maggior parte delle persone la miriade di fornitori, famiglie di processori e fattori di specifica rappresentano una serie sconcertante di scelte. Indipendentemente da ciò, ci sono diversi fattori associati alle CPU e ai processori che anche gli utenti generali e gli amministratori spesso devono prendere in considerazione quando hanno bisogno di specificare gli ambienti operativi:Dimensione bit

Per le CPU questo numero si riferisce sia alla dimensione nativa dei dati che manipola e alla quantità di memoria a cui può accedere. La maggior parte dei sistemi moderni sono a 32 bit o 64 bit. Se un’applicazione ha bisogno di accedere a più di 4 gigabyte di memoria, allora deve essere eseguita su un sistema a 64 bit poiché 4 gigabyte è l’indirizzo massimo che può essere rappresentato utilizzando 32 bit. E, mentre le applicazioni a 32 bit possono in genere essere eseguite su sistemi a 64 bit, le applicazioni a 64 bit non possono essere eseguite su sistemi a 32 bit. Velocità di clock

Spesso espresso in megahertz (MHz) o gigahertz (GHz). Questo si riferisce alla velocità con cui un processore elabora le istruzioni. Ma la velocità del processore è solo uno dei fattori che influenzano i tempi di risposta del sistema, i tempi di attesa e la velocità effettiva. Anche un utente multi-tasking attivo raramente mantiene attiva una CPU di un PC desktop comune più del 2 o 3 per cento del tempo. Indipendentemente da ciò, se si utilizzano frequentemente applicazioni computazionali che coinvolgono attività come la crittografia o il rendering video, la velocità della CPU potrebbe avere un impatto significativo sulla velocità effettiva e il tempo di attesa.Cache

Le CPU richiedono un flusso costante di istruzioni e dati per funzionare. Il costo e il consumo energetico di una memoria di sistema multi-gigabyte a cui è possibile accedere alla velocità di clock della CPU sarebbe proibitivo. Memoria cache velocità CPU è integrata sul chip CPU per fornire un buffer ad alta velocità tra CPU e memoria di sistema. La cache è separata in più livelli, comunemente indicato come L1, L2, L3 e persino L4. Nel caso della cache, più è spesso meglio.Cores

Core si riferisce a una singola CPU. Oltre al core che rappresenta una CPU fisica, Hyper-Threading Technology (HTT) consente a una singola CPU fisica di elaborare contemporaneamente più istruzioni, agendo virtualmente come CPU fisiche multiple. In genere, più core fisici sono confezionati come un singolo chip del processore fisico. Tuttavia, ci sono schede madri che supportano più chip del processore fisico. In teoria avere più core per elaborare le attività sembrerebbe sempre produrre una migliore velocità effettiva del sistema. Purtroppo, le applicazioni desktop spesso mantengono le CPU occupate solo il 2 o il 3 percento delle volte, quindi l’aggiunta di più CPU per lo più inattive comporta un miglioramento minimo della velocità effettiva. Più core sono più adatti per l’esecuzione di applicazioni scritte per avere più thread di funzionamento indipendenti, come il rendering di frame video, il rendering di pagine Web o ambienti di macchine virtuali multiutente.

Memoria di Massa

I dispositivi di archiviazione forniscono un metodo per conservare programmi e dati. Le unità disco rigido (HDD) e le unità a stato solido (SSD) sono la forma più comune di dispositivo di archiviazione per server e desktop. Le chiavette USB e i dispositivi ottici come DVD vengono utilizzati, ma raramente come dispositivo primario.

Come suggerisce il nome, un’unità disco rigido memorizza informazioni su uno o più dischi fisici rigidi. I dischi fisici sono coperti con supporti magnetici per rendere possibile la memorizzazione. I dischi sono contenuti all’interno di un pacchetto sigillato poiché polvere, piccole particelle e persino impronte digitali interferiscono con la capacità dell’HDD di leggere e scrivere i supporti magnetici.

Gli SSD sono effettivamente versioni più sofisticate di memory stick USB con capacità significativamente maggiore. Gli SSD memorizzano le informazioni nei microchip in modo che non ci siano parti mobili.

Sebbene le tecnologie sottostanti per HDD e SSD siano diverse, ci sono fattori importanti che possono essere confrontati. La capacità HDD si basa sulla scalabilità dei componenti fisici mentre la capacità SSD dipende dal numero di microchip. Per gigabyte, gli SSD costano tra 3 e 10 volte il costo di un HDD. Per leggere o scrivere, un HDD deve attendere che una posizione su un disco ruoti in una posizione nota mentre gli SSD sono un accesso casuale. Le velocità di accesso SSD sono in genere da 3 a 5 volte più veloci dei dispositivi HDD. Dal momento che non hanno parti mobili SSD consumano meno energia e sono più affidabili di HDD.

La capacità di archiviazione è in costante aumento per HDD e SSD. Oggi sono comunemente disponibili HDD da 5 terabyte e SSD da 1 terabyte. Indipendentemente da ciò, la grande capacità di archiviazione non è sempre migliore. Quando un dispositivo di archiviazione non riesce, le informazioni in esso contenute non sono più disponibili. E, naturalmente, il backup richiede più tempo quando ci sono più informazioni per eseguire il backup. Per le applicazioni che leggono e scrivono molti dati, la latenza e le prestazioni possono essere più importanti della capacità.

I sistemi moderni utilizzano SCSI (Small Computer System Interface) o SATA (Serial AT Attachment) per connettersi ai dispositivi di archiviazione. Queste interfacce sono in genere supportate dal connettore appropriato sulla scheda madre. Il carico iniziale proviene da un dispositivo di archiviazione collegato alla scheda madre. Le impostazioni del firmware definiscono l’ordine di accesso ai dispositivi per questo caricamento iniziale.

I sistemi di archiviazione noti come RAID (Redundant Array of Independent Disks) sono un’implementazione comune per evitare la perdita di informazioni. Un array RAID è costituito da più dispositivi fisici contenenti copie duplicate di informazioni. Se un dispositivo non riesce, tutte le informazioni sono ancora disponibili. Diverse configurazioni RAID fisiche sono referenziate come 0, 1, 5, 6 e 10. Ogni designazione ha dimensioni di archiviazione diverse, caratteristiche di prestazioni e modi per memorizzare dati ridondanti o checksum per il recupero dei dati. Oltre ad alcuni sovraccarichi di configurazione amministrativa, l’esistenza di RAID è effettivamente trasparente per gli utenti.

I dispositivi di archiviazione comunemente leggono e scrivono dati come blocchi di byte. Il comando lsblk può essere utilizzato per elencare i dispositivi a blocchi disponibili per un sistema. L’esempio seguente è stato eseguito su un Raspberry Pi utilizzando una scheda SD come dispositivo di archiviazione. I dettagli dell’output sono trattati dalle informazioni contenute nelle lezioni Partizioni e Driver che seguono:

$lsblk

NOME MAJ:MIN RM DIMENSIONE RO TIPO MOUNTPOINT

mmcblk0 179:0 0 29.7G 0 disco

+-mmcblk0p1 179:1 0 43.9M 0 parte /stivale

+-mmcblk0p2 179:2 0 29.7G 0 parte/

Partizioni

Un dispositivo di archiviazione è effettivamente una lunga sequenza di posizioni di archiviazione. Il partizionamento è il meccanismo che indica a Linux se deve vedere queste posizioni di archiviazione come una singola sequenza o più sequenze indipendenti. Ogni partizione viene trattata come se si trattasse di un singolo dispositivo. La maggior parte delle partizioni temporali vengono create quando un sistema viene configurato per la prima volta. Se è necessario apportare modifiche, sono disponibili strumenti di amministrazione per gestire il partizionamento dei dispositivi.

Quindi, perché più partizioni dovrebbero essere desiderabili? Alcuni esempi per l’utilizzo delle partizioni sono la gestione dello spazio di archiviazione disponibile, l’isolamento del sovraccarico di crittografia o il supporto di più file system. Le partizioni consentono di avere un unico dispositivo di archiviazione che può essere avviato con diversi sistemi operativi.

Mentre Linux può riconoscere la sequenza di archiviazione di un dispositivo raw, un dispositivo raw non può essere utilizzato così com’è. Per utilizzare un dispositivo raw deve essere formattato. La formattazione scrive un file system su un dispositivo e lo prepara per le operazioni sui file. Senza un file system un dispositivo non può essere utilizzato per operazioni relative ai file.

Gli utenti vedono le partizioni come se fossero singoli dispositivi. Questo rende facile trascurare il fatto che hanno ancora a che fare con un singolo dispositivo fisico. In particolare, le operazioni da dispositivo a dispositivo che sono effettivamente partizioni a partizioni non avranno le prestazioni previste. Un singolo dispositivo è un meccanismo fisico con un set di hardware di lettura/scrittura. Ancora più importante, non è possibile utilizzare le partizioni di un singolo dispositivo fisico come progetto a tolleranza d’errore. Se il dispositivo fallisce, tutte le partizioni falliscono, quindi non ci sarebbe tolleranza di errore.

NoteLogical Volume Manager (LVM) è una funzionalità software che consente agli amministratori di combinare singoli dischi e partizioni disco e trattarli come se fossero una singola unità.

Periferiche

Server e workstation necessitano di una combinazione di CPU, memoria di sistema e storage per funzionare. Ma questi componenti fondamentali non si interfacciano direttamente con il mondo esterno. Le periferiche sono i dispositivi che forniscono ai sistemi input, output e accesso al resto del mondo reale.

La maggior parte delle schede madri dispone di connettori esterni integrati e supporto firmware per interfacce periferiche legacy comuni che supportano dispositivi come tastiera, mouse, audio, video e rete. Le schede madri recenti hanno in genere un connettore Ethernet per supportare le reti, un connettore HDMI che supporta le esigenze grafiche di base e uno o più connettori USB (Universal Serial Bus) per la maggior parte del resto. Esistono diverse versioni di USB con velocità e caratteristiche fisiche diverse. Diverse versioni di porte USB sono comuni su una singola scheda madre.

Le schede madri possono anche avere uno o più slot di espansione. Gli slot di espansione consentono agli utenti di aggiungere schede circuitali speciali note come schede di espansione che supportano periferiche personalizzate, legacy e non standard. Grafici, audio e interfacce di rete sono comuni schede di espansione. Le schede di espansione supportano anche il RAID e le interfacce legacy in formato speciale che coinvolgono connessioni seriali e parallele.

Le configurazioni SoC (System on a Chip) consentono di ottenere vantaggi in termini di potenza, prestazioni, spazio e affidabilità rispetto alle configurazioni della scheda madre mediante processori di confezionamento, memoria di sistema, SSD e hardware per controllare le periferiche come un unico pacchetto di circuiti integrati. Le periferiche supportate dalle configurazioni SoC sono limitate dai componenti confezionati. Pertanto, le configurazioni SoC tendono a essere sviluppate per usi specifici. Telefoni, tablet e altri dispositivi portatili sono spesso basati sulla tecnologia SoC.

Alcuni sistemi incorporano periferiche. I portatili sono simili alle workstation, ma incorporano periferiche di visualizzazione, tastiera e mouse predefinite. I sistemi All-In-One sono simili ai laptop, ma richiedono periferiche per mouse e tastiera. I controller basati su schede madri o SoC sono spesso confezionati con periferiche integrali appropriate per un uso specifico.

Driver e file del dispositivo

Finora, questa lezione ha presentato informazioni su processori, memoria, dischi, partizionamento, formattazione e periferiche. Ma richiedere agli utenti generali di trattare con i dettagli specifici per ciascuno dei dispositivi nel loro sistema renderebbe tali sistemi inutilizzabili. Allo stesso modo, gli sviluppatori di software avrebbero bisogno di modificare il loro codice per ogni dispositivo nuovo o modificato che devono supportare.

La soluzione a questo problema «trattare i dettagli» è fornita da un driver di periferica. I driver di dispositivo accettano un set standard di richieste quindi traducono tali richieste nelle attività di controllo appropriate del dispositivo. I driver di periferica sono ciò che consentono a voi e alle applicazioni eseguite di leggere dal file /home/carol/stuff senza preoccuparsi se quel file si trova su un disco rigido, un’unità a stato solido, una chiavetta di memoria, una memoria crittografata o un altro dispositivo.

I file del dispositivo si trovano nella directory /dev e identificano i dispositivi fisici, l’accesso al dispositivo e i driver supportati. Per convenzione, nei sistemi moderni che utilizzano dispositivi di archiviazione basati su SCSI o SATA il nome del file di specifica inizia con il prefisso sd. Il prefisso è seguito da una lettera come a o b che indica un dispositivo fisico. Dopo il prefisso e l’identificatore del dispositivo arriva un numero che indica una partizione all’interno del dispositivo fisico. Quindi, /dev/sda farebbe riferimento all’intero primo dispositivo di archiviazione mentre /dev/sda3 farebbe riferimento alla partizione 3 nel primo dispositivo di archiviazione. Il file del dispositivo per ogni tipo di dispositivo ha una convenzione di denominazione appropriata al dispositivo. Sebbene la copertura di tutte le possibili convenzioni di denominazione vada oltre lo scopo di questa lezione, è importante ricordare che queste convenzioni sono fondamentali per rendere possibile l’amministrazione del sistema.

Mentre è oltre lo scopo di questa lezione per coprire il contenuto della directory/dev, è informativo guardare la voce di un dispositivo di archiviazione. I file del dispositivo per le schede SD in genere utilizzano mmcblk come prefisso:

$ls -l mmcblk*

brw-rw— 1 disco radice 179, 0 giu 30 01:17 mmcblk0

brw-rw— 1 disco radice 179, 1 giu 30 01:17 mmcblk0p1

brw-rw— 1 disco radice 179, 2 giu 30 01:17 mmcblk0p2

I dettagli dell’offerta per un file dispositivo sono diversi dai dettagli tipici del file:

A differenza di un file o di una directory, la prima lettera del campo permessi è b. Ciò indica che i blocchi vengono letti e scritti nel dispositivo in blocchi anziché singoli caratteri.Il campo dimensione è due valori separati da una virgola anziché da un singolo valore. Il primo valore indica generalmente un particolare driver all’interno del kernel e il secondo valore specifica un dispositivo specifico gestito dal driver. Il nome del file utilizza un numero per il dispositivo fisico in modo che la convenzione di denominazione si adatti specificando il suffisso di partizione come p seguito da una cifra.

Nota Ogni dispositivo di sistema deve avere una voce in /dev. Poiché i contenuti della directory /dev vengono creati all’installazione, ci sono spesso voci per ogni driver e dispositivo possibile anche se non esiste alcun dispositivo fisico.