Linux 1° Parte – Fondamentali

()

Premessa

ISTANZA
Un’istanza è un particolare oggetto di una determinata classe. Ogni istanza è separata dalle altre, ma condivide con gli altri oggetti della stessa classe le sue caratteristiche generali, attraverso la comune descrizione dei campi e dei metodi.

ISTRUZIONE
Un elemento del linguaggio di un programma che ordina ad un computer di eseguire una particolare operazione o un insieme di operazioni.

BLOCCO DI ISTRUZIONI
Un sottoinsieme autoconsistente di istruzioni adiacenti, la cui esecuzione complessiva equivale all’esecuzione di una singola macroistruzione complessa, viene denominato blocco di istruzioni.
Nell’ambito dei paradigmi di programmazione quali quello strutturato e quello procedurale in ogni blocco di istruzioni è presente un punto di inizio (o di ingresso) e un punto di fine (o di uscita).
In quest’ottica di astrazione, un blocco di istruzioni può essere considerato l’equivalente di una istruzione e possono essere introdotte le seguenti regole ricorsive:
Ogni istruzione può essere scomposta in istruzioni più semplici, fino ad arrivare a livello di linguaggio macchina in cui l’istruzione non può essere ulteriormente scomposta (processo top-down).
Ogni istruzione può essere raggruppata all’interno di un’istruzione più complessa, fino ad arrivare al livello dell’intero programma (processo bottom-up).
Un tipico esempio di blocco di istruzioni sono le strutture di controllo.

COMANDO:
istruzione fornita al processore in un linguaggio ad esso comprensibile

PROCESSO
Il processo in informatica è un’entità dinamica caricata su memoria RAM generata da un programma: identificato da un codice univoco chiamato PID, più precisamente, esso è una sequenza di attività (task) controllata da un programma (scheduler) che si svolge su un processore in genere sotto la gestione o supervisione del rispettivo sistema operativo.
Può essere visibile all’utente, come nel caso di un’applicazione durante la sua esecuzione, oppure può essere eseguito in background; per visualizzare la lista di processi eseguiti su un computer e le relative risorse impiegate è possibile utilizzare un task manager, mentre la gestione dei processi da parte del sistema operativo è affidata allo scheduler attraverso opportuni algoritmi di scheduling.

THREAD
Un thread o thread di esecuzione, in informatica, è una suddivisione di un processo in due o più filoni (istanze) o sottoprocessi che vengono eseguiti concorrentemente da un sistema di elaborazione monoprocessore (monothreading) o multiprocessore (multithreading) o multicore.

Fondamentali di LINUX

Linux non è solo un sistema operativo ma anche un modo per concepire la programmazione e lo sviluppo del software.

Tanto si sente parlare in questi periodi di Linux e di free software; il problema maggiore è che molti ne parlano perché qualcuno ne ha parlato loro, e spesso queste informazioni “tramandate oralmente” iniziano a circolare in maniera errata o con qualche tipo di “personalizzazione” che nulla ha a che vedere con ciò che in verità è la filosofia Linux

In prima battuta, si può dire che un software rilasciato come free sia un software liberamente utilizzabile da chiunque senza alcuna restrizione, in forma sorgente o compilata; anche la distribuzione e la modifica dello stesso non sono vincolate sebbene, in caso di modifiche all’originale, ne debba essere sempre essere indicato l’autore.

Con queste poche righe, che spiegano per sommi capi cosa sia il software free (o libero), abbiamo già demolito le tesi errate citate poco sopra: il freeware ed il software libero hanno in comune soltanto la non onerosità del prodotto, ma il secondo è molto di più: spesso, anche l’autore del più misero programma freeware non ne fornisce i sorgenti, mentre grazie al software libero possiamo, se capaci ed interessati, leggere i sorgenti di programmi come Apache, sendmail e molti altri.

Inoltre, il programma freeware non è modificabile, cosa che non avviene con il free software a patto che l’autore delle modifiche non reclami la paternità del software.

Prendiamo ora la fine della definizione sopra riportata:

il software distribuito come free può essere venduto?

La GPL (Generic Public License, Licenza Pubblica Generica), che definisce cosa sia e come debba essere trattato il free software, non lo nega affatto, sebbene ci siano delle clausole: non è in nessun caso possibile far sembrare il software come proprio solamente perché lo si vende e non si può vendere un software rilasciato come free con una differente licenza d’uso; per questo, gli utenti che sopra sono definiti “ignari” non lo sono affatto o, almeno, non dovrebbero esserlo!
Il consiglio è comunque di leggere per intero la GPL reperibile tramite qualsiasi motore di ricerca o, per chi abbia già Linux installato (o sia in procinto di farlo!), nelle directory di documentazione del programmi, solitamente /usr/doc/*.

Una traduzione in italiano è reperibile sul sito di Open Press.

Adesso, come per tutte le cose, cerchiamo di ridimensionare il discorso: Linux non vive solamente di software libero, esistono anche realtà che scrivono software proprietario e non è sancito da nessuna parte che utilizzando Linux si debba utilizzare solamente software libero (software che comunque esiste anche per altri sistemi): pochi sono, in verità, gli esempi di software a pagamento o shareware: più spesso si vedono pacchetti etichettati come “non-free” per il fatto, ad esempio, di contenere algoritmi proprietari (si pensi al formato Gif, ad esempio); oppure perché tale software sia liberamente utilizzabile da privati ma non a scopo commerciale oppure sia distribuito solamente in forma binaria (come Netscape).

Ma prendiamo l’esempio del software non utilizzabile liberamente per scopi commerciali: perché etichettarlo “non free” quando per l’utente casalingo non lo è?

Semplicemente, per il fatto di non essere attinente ai dettami della GPL, che indica software free il software che ha le caratteristiche viste sopra indipendentemente da chiunque ne faccia uso ed in qualsiasi situazione.

1 Il KERNEL : Ruolo del kernel

I tre componenti principali di un sistema operativo sono: il KERNEL, la SHELL e il FILESYSTEM.

 Il kernel del sistema operativo è come un controllore del traffico aereo in un aeroporto. Il kernel determina quale programma ottiene quali pezzi di memoria, avvia e uccide i programmi e gestisce la visualizzazione del testo su un monitor. Quando un’applicazione deve scrivere su disco, deve chiedere al sistema operativo di completare l’operazione di scrittura. Se due applicazioni richiedono la stessa risorsa, il kernel decide chi lo ottiene e, in alcuni casi, uccide una delle applicazioni per salvare il resto del sistema.

Il kernel gestisce anche il passaggio tra le applicazioni.

Un computer avrà un piccola quantita’ di CPU e una quantità finita di memoria.

Il kernel si occupa di scaricare un’attività e caricare una nuova attività se ci sono più attività che CPU.

Quando l’attività corrente è stata eseguita per un periodo di tempo sufficiente, la CPU mette in pausa l’attività in modo che un’altra possa essere eseguita.

Questo si chiama multitasking preventivo.

Il multitasking significa che il computer sta eseguendo più attività contemporaneamente e la prevenzione indica che il kernel sta decidendo quando passare al focus tra le attività.

Con il rapido passaggio delle attività, sembra che il computer stia facendo molte cose contemporaneamente. Ogni applicazione può pensare di avere un grande blocco di memoria sul sistema, ma è il kernel che mantiene questa illusione, rimappando blocchi di memoria più piccoli, condividendo blocchi di memoria con altre applicazioni o addirittura sostituendo blocchi che non sono stati toccati su disco.

All’avvio del computer, carica un codice chiamato bootloader.

Il compito del bootloader è caricare il kernel e avviarlo. Se hai più familiarità  con sistemi operativi come Microsoft Windows o OS X di Apple, probabilmente non vedrai mai il bootloader, ma nel mondo UNIX di solito è visibile in modo da poter modificare il modo in cui il tuo computer si avvia.

Il bootloader carica il kernel Linux e quindi trasferisce il controllo.

Linux continua quindi con l’esecuzione dei programmi necessari per rendere utile il computer, come la connessione alla rete o l’avvio di un server web.

1.1.2 Applicazioni

Come un controllore del traffico aereo, il kernel non è utile senza qualcosa da controllare.

Se il kernel è la torre, le applicazioni sono gli aeroplani.

Le applicazioni inviano richieste al kernel e ricevono risorse, come memoria, CPU e disco, in cambio.

Il kernel estrae anche i dettagli dall’applicazione.

L’applicazione non sa se un blocco di disco si trova su un’unità a stato solido del produttore A, un disco rigido del produttore B o persino una condivisione di file di rete.

Le applicazioni seguono semplicemente l’interfaccia di programmazione dell’applicazione (API) del  kernel e in cambio non devono preoccuparsi dei dettagli di implementazione. Quando noi, come utenti, pensiamo alle applicazioni, tendiamo a pensare a elaboratori di testi, browser Web e client di posta elettronica.

Al kernel non  importa se sta eseguendo qualcosa di fronte all’utente, un servizio di rete che parla a un computer remoto o un’attività interna. Quindi, da questo otteniamo  un’astrazione chiamata processo.

Un processo è solo un’attività che viene caricata e tracciata dal kernel.

Un’applicazione potrebbe anche aver bisogno di  più processi per funzionare, quindi il kernel si occupa di eseguire i processi, avviarli e arrestarli come richiesto, e distribuire risorse di sistema.

1.1.3 Ruolo dell’open source

Linux è iniziato nel 1991 come progetto hobby di Linus Torvalds. Ha reso la fonte liberamente disponibile e altri si sono uniti per dare forma a questo nascente sistema operativo. Il suo non è stato il primo sistema sviluppato da un gruppo, ma poiché si trattava di un progetto ex novo, i primi utenti avevano la capacità di influenzare la direzione del progetto e assicurarsi che gli errori di altri UNIX non fossero ripetuti.

I progetti software assumono la forma di codice sorgente, che è un insieme leggibile di istruzioni per computer. Il codice sorgente può essere scritto in una qualsiasi delle centinaia di linguaggi di programmazione diversi, Linux sembra essere scritto in C, che è un linguaggio che condivide la storia con l’UNIX originale. Il codice sorgente non è compreso direttamente dal computer, quindi deve essere compilato nelle istruzioni della macchina da un compilatore. Il compilatore raccoglie tutti i file sorgente e genera qualcosa che può essere eseguito sul computer, come il kernel Linux. Storicamente, la maggior parte del software è stata rilasciata con una licenza di origine chiusa, il che significa che hai il diritto di utilizzare il codice macchina, ma non riesci a vedere il codice sorgente. Spesso la licenza dice specificamente che non tenterai di decodificare il codice della macchina al codice sorgente per capire cosa fa!

L’open source offre una visione del software incentrata sulla fonte. La filosofia open source è che hai il diritto di ottenere il software e di modificarlo per il tuo uso personale. Linux ha adottato questa filosofia con grande successo. Le persone hanno preso la fonte, apportato modifiche e le hanno condivise con il resto del gruppo.

Accanto a questo, c’era il progetto GNU (GNU, non UNIX). Mentre GNU (pronunciato “ga-noo”) stava costruendo il proprio sistema operativo, erano molto più efficaci nella costruzione degli strumenti che seguono con un sistema operativo UNIX, come compilatori e interfacce utente.

I sorgenti erano tutti liberamente disponibili, quindi Linux era in grado di indirizzare i loro strumenti e fornire un sistema completo. Come tale, la maggior parte degli strumenti che fanno parte del sistema Linux provengono da questi strumenti GNU.Ci sono molte varianti diverse sull’open source e quelle saranno esaminate in un capitolo successivo. Tutti concordano sul fatto che dovresti avere accesso al codice sorgente, ma differiscono nel modo in cui puoi, o in alcuni casi, ridistribuire le modifiche.

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?