Questi e i successivi post sono parte di alcuni appunti che ho raccolto nel corso dei miei studi; Ho deciso solo ora di condividerli così da riscoprire alcuni concetti fondamentali che molte volte sfuggono quando ci si trova ad aver a che fare con un sistema GNU/Linux.
In commercio e non, esistono numerosi sistemi unix-like che principalmente si dividono in due categorie: la prima quella dei sistemi derivati da quello originario della AT/T (BSD, Solaris, AIX e così via), e la seconda quella dei sistemi derivati dal codice sviluppato all’università di Berkeley detto BSD (Berkeley Software Distribution).
Linux è stato completamente riscritto e non è un derivato di Unix pertanto non può appartenere a nessuna delle categorie sopra citate. Però, GNU/Linux ha “ereditato” alcune caratteristiche dai sistemi operativi Unix-like.
In sintesi: GNU/Linux non è Unix ma riprende alcune delle caratteristiche dai sistema Unix.
GNU/Linux è un sistema modulare e quindi ha la particolarità di poter usufruire dei moduli per ampliare le capacità del sue capacità. Per esempio, se si vuole utilizzare una certa periferica, basta caricarne il modulo specifico. In tal senso, un sistema GNU/Linux può essere più o meno “pesante” e pensato ad hoc per un Web server, per un File server, per un Firewall caricando solo quei moduli che sono necessari. Esiste anche la versione monolitica, e cioè quella versione in cui tutti i moduli sono caricati, ma a differenza di quella modulare essa può occupare più memoria, ed essere quindi meno flessibile
In sintesi: un sistema GNU/Linux può essere modulare (sistema gestito a “pezzi”) o monolitico (sistema con tutti i pezzi caricati), comunque, meglio preferire la prima versione molto più flessibile.
Il Kernel è il cuore del sistema operativo GNU/Linux, ed è in grado di offrire numerose funzioni: dalla gestione della memoria, delle periferiche, e delle risorse hardware, alla gestione del filesystem, e dello stack di rete TCP/IP. Il Kernel è l’unico componente che accede direttamente alla risorse hardware e viene eseguito in modalità privelegiata nel processore (o CPU). Tale spazio si chiama “spazio del kernel” o “kernel space” (ring 0 nella maggior parte delle CPU).
Tutto il resto, la shell, gli applicativi, le interfacce girano in modalità protetta in un ambiente virtuale detto “user space” o “spazio utente”. I programmi che funzionano in modalità protetta possono accedere alle risorse hardware solo grazie alle funzioni messe a disposizione del Kernel. Queste funzioni si chiamano “System Call” e sono raccolte in un unica libreria che va sotto il nome di GNU C Library parte fondamentale di un sistema GNU/Linux.
In sintesi: l’unico vero programma è il Kernel che gira in modalità privilegiata nella CPU (Kernel space), che costruisce un ambiente virtuale per far girare gli altri programmi in modalità protetta (User space).
Un’altra caratteristica importante è quella del Virtual File System (VFS) che GNU/Linux implementa a livello di Kernel. Grazie ad esso tutti i filesystem vengono presentati all’utente allo stesso modo per mezzo di un’interfaccia che utilizza una serie di funzioni. A sua volta, queste funzioni chiamano delle routine presenti nei driver dei filesystem che permettono le operazioni sui dati del supporto fisico. E’ ovvio che i driver dei filesystem per potersi integrare con il Virtual FileSystem devono rispettare delle regole ben precise.
In sintesi: il Virtual File System o VFS agisce in modo indipendente dal supporto fisico e dall’organizzazione delle informazioni sul supporto e richiede ai driver dei filesystem il compito delle operazioni sui dati in modo del tutto trasparente all’utente.
Per ora è tutto, restate in attesa della seconda parte.
Se desiderate altri articoli, per fare in modo che il sito continui a vivere, versate un piccolo contributo in Bitcoin al seguente indirizzo. Un contributo per scrivere di più al fine di migliorare la qualità degli articoli.
Indirizzo BTC: 3EJZiSmqRkoZ48ae2pYbKupMYQqoQvxdxe