Google+ Quarta Info B: novembre 2012

martedì 27 novembre 2012

Sistemi: i threads

I threads, detti anche processi leggeri o fili di esecuzione, sono una parte di un processo. I thread condividono tra di loro il code (o text) segment e il data segment, mentre possiedono uno stack segment personale a ogni thread. Condividendo il code segment è sconsigliabile utilizzare comandi come quelli della famiglia dell'exec, visto i risultati inaspettati che possono accadere visto il code segment condiviso.
I principali vantaggi dei thread è quello che nei processori moderni sono capaci di elaborare 2 thread contemporaneamente, rispetto ad un singolo processo, questo perché posseggono il doppio dei registri.

Da notare. È importante all'interno della funzione che verrà eseguita dal main non dichiarare variabili con lo stesso nome di quelle globali. Altrimenti verranno prese in considerazione solo quelle globali.

Esempio:
int a=2;
int main() {...}
Codice thread:
           int a=15;
printf(“%i\n”,a);
}

In questo caso, sempre che stampi, verrà stampato il valore 2 in quanto a è una variabile globale


Ci sono 3 modi per gestire i thread:
- Vengono gestiti direttamente dal processo padre, simulando la concorrenza (cioè in user space) :
  Non dovendo eseguire chiamate di sistema per la gestione dei thread,  essa risulterà molto più rapida. Il padre dovrà gestire la sincronizzazione dei vari thread e non la monopolizzazione da parte di un thread della CPU
- Creando i thread in kernel space
Creando i thread in kernel space i thread saranno considerati come dei processi, perciò sarà lo stesso S.O. (o più precisamente lo scheduler) a gestire i thread. Purtroppo questo metodo è più lento rispetto alla sua controparte in user space perché ci saranno più chiamate di sistema per la gestione dei thread.
-  Creo i thread in user mode, ma li faccio gestire dal S.O.
L'ideologia di gestione di thread che andremo a considerare.
Il padre ( si intende il thread master, cioè il main), per poter gestire la concorrenza tra i vari thread deve utilizzare dei protocolli: un protocolli sono un insieme di regole che devono essere soddisfatte per affinché la comunicazione, o in questo caso la concorrenza tra thread sia gestita in maniera corretta.
Il S.O. invece entrerà in gioco con le variabili Mutex: queste variabili sono in kernel space e per modificarle bisogna utilizzare delle apposite chiamate di sistema. Queste variabili, dette anche variabili di lock, possono essere utilizzate come semafori per l'accedere alle zone critiche del programma.


Condizione critica: Lettura e scrittura di una variabile globale contemporaneamente tra 2 o più thread
Regione critica: zone di istruzioni che devono essere eseguite da un unico processo dall'inizio alla fine, uno alla volta

Le quattro regole per una buona programmazione concorrente:
- Non ci sia più di un processo nella stessa zona critica
- Il programma deve funzionare indipendentemente dal numero di processori e dalla loro velocità
- I processi che non stanno eseguendo operazioni critiche non devono poter bloccare nessun processo.
- Nessun processo deve avere un'attesa infinita per entrare in una regione critica
(Queste regole valgono anche per i thread)

Suddivisione della memoria da parte di un processo:

Il code segment contiene le istruzioni da eseguire



Nel data segment sono contenute le variabili globali (dette anche statiche, perché dichiarate all'inizio del programma)  e dalle variabili mallocate, cioè quelle dichiarate dinamicamente.





Nello stack sono contenute tutte le variabili del proprio ambiente più altre informazioni indispensabili come lo stato del processore, il process counter ecc...
Queste informazioni sono indispensabili per poter cambiare l'esecuzione da un processo all'altro: Se il processo, dopo esser stato messo nello stato di ready torna ad essere eseguito deve sapere a che istruzione è arrivato, che stato aveva il processore a quell'istruzione, il valori delle variabili locali ecc... Quindi senza queste informazioni il processo non può continuare.


Per poter creare i thread bisogna includere una libreria che si chiama pthread.h ( #include <pthread.h>). Quando si compilerà con il gcc bisognerà implementare il parametro -pthread
Il comando per creare un thread è il ptread_create, che avrà bisogno di 4 parametri per poter essere eseguita.
Il primo parametro è il puntatore di una variabile pthread_t : in questa variabile sarà contenuto il valore del tid ( thread identifier ; è come il pid per i processi), il secondo parametro è utilizzato per creare un thread con determinati attributi, passandogli il parametro NULL creeremo un thread con gli attributi di default, il terzo parametro dovrà avere il nome di una funzione void*. Questa funzione dovrà avere un unico parametro che dovrà essere anch'esso un puntatore void. Il quarto parametro sarà il puntatore della funzione che abbiamo passato come 4 parametro.
La pthread_create fa ritornare un valore


Da notare. E qui sorge un problema: se dobbiamo passare più variabili, ma abbiamo solo un puntatore da poter passare al thread, come possiamo fare? Per risolvere questo problema si può utilizzare una struttura (una struct) contenente tutti i parametri che ci servono passare al thread, passandogli solamente il puntatore della struct.

La funzione che fa aspettare il thread master la fine dei thread figli è il comando pthread_join. Questo comando, molto simile alla waitpid. Infatti, ci sono 2 parametri da passare: uno sarà una variabile pthread_t che conterrà il tid del thread, il secondo parametro è un puntatore, che noi gli passeremo NULL).

(Guardare anche sul manuale la spiegazione di pthread_create e _join, scrivendo da terminale man phtread_create e pthread_join)

Ringraziate Tasca che mi ha aiutato per completare gli appuntolli

mercoledì 7 novembre 2012

RIVOLUZIONE FRANCESE - L'ETÀ DEL DIRETTORIO(1794 a 1799)

Versione Rava

Il Direttorio è il nome dato al nuovo governo dopo il colpo di stato del 1794. In questi anni, in Francia, si torna al liberismo, a un'egemonia e prevalenza del ceto borghese. Il diritto di voto torna nelle mani dei ricchi e capitalisti. Il nuovo governo riesce a far fronte ai problemi economici dello stato francese; contro questo erano sia i vecchi regnanti, sia i ceti popolari. Tra i vari colpi di stato, avvenuti dopo questi contrasti, possiamo distinguere quello chiamato "La Congiura degli Eguali", comandato dal rivoluzionario Babeuf, con ideali socialisti e comunisti. Per risolvere questi problemi, come nel 1792, il Direttorio decide di riprendere la guerra contro l'Austria e la Prussia, in modo da scaricare le tensioni verso l'esterno. Da qui parte la "Prima Campagna d'Italia", nel 1796, una spedizione con a capo il generale Napoleone Buonaparte, arrivando fino alla Lombardia e sconfiggendo austriaci e i piemontesi; questa termina nel 1797 in Veneto, con il trattato di Campoformio. Questo segna la fine della repubblica di Venezia, unendola al territorio dell'impero d'Austria e causando un grosso sconvolgimento all'interno dell'Italia, modificando la sua cartina politica.

Napoleone ottiene dal Direttorio il mandato per una spedizione in Egitto, ottenendo un discreto successo, dato che nella battaglia sul fronte marittimo, l'Inghilterra ha avuto la meglio sull'esercito francese.

Il giorno 18 Brumaio anno VIII (1799), Napoleone organizza un vero e proprio colpo di stato, basato sulle armi e sull'esercito. Viene instaurato un nuovo tipo di governo, basato sul modello romano, formato da 3 consoli, in cui presiede Napoleone e a seguire Ducos e Sieyés, prendendo il nome di Consolato. Buonaparte viene visto da tutti i cittadini francesi come l'eroe, che durante un momento di crisi, salva la Francia e la fa risorgere. Successivamente si formò il "Bonapartismo", con un potere assoluto, ma con un'affermazione del potere derivante dal popolo, manifestato periodicamente attraverso i plebisciti, forme di consultazione, simili a referendum, che davano la parola al popolo. Ne vennero fatti principalmente 3:

-1799 ascesa al potere di Napoleone

-1802 Napoleone console a vita

-1804 Napoleone coronato imperatore di Francia






Versione Loca

Direttorio: nuovo governo che dopo il colpo di stato del 94 sale al potere
Questo governo lascia più libertà di espressione , ma lascia anche troppa libertà sul piano sociale: infatti i provvedimenti scarseggiano ed il popolo è scontento.

Durante questo periodo prevale : -> liberalismo economico
                                                      -> ceto borghese in ascesa
Quindi un governo che lascia libertà, ma così facendo , ci sarà una prevalenza dei ceti ricchi.
1795-> il diritto di voto è assegnato in base al censo

 --> SITUAZIONE POLITICA INSTABILE

Lo stato francese non si riesce a risollevare da una crisi economica
Il governo è MINACCIATO : -> Monarchici ----> Colpo di stato sventato dall'esercito di Napoleone Buonaparte
                                             -> Movimento Popolare --> congiura degli eguali , con il quale si tenta un insurrezione

Allora come in precedenza , si attua una guerra per unificare la Francia contro un nemico comune, per tentare di risollevare la situazione.
1796 -> 1° Campagna d'Italia
1797 -> Pace di Campoformio

CAMPOFORMIO (Dal punto di vista "idealistico" ):
1. Grande entusiasmo italiano per l'esercito francese , in molti sostenevano le idee rivoluzionare che erano prevalse oltralpe
2. Premessa per il risorgimento italiano nazionale

CAMPOFORMIO (Punto di vista degli accordi)
1.Lombardia alla Francia
2.Venezia agli austriaci (Fine di una repubblica storica come quella Veneziana) 3. Nascita di numerose Repubbliche italiane , che fanno riferimento al modello francese
4. Il papa perde momentaneamente il potere temporale sullo stato della chiesa

Napoleone dopo essere prevalso nella campagna d'Italia ottiene il permesso per una spedizione in Egitto, punto cruciale sul mediterraneo per i commerci.

Ingaggia uno scontro con la miglior potenza marittima del mondo , ovvero l'Inghilterra, e inizialmente sulla terra ferma ottiene importanti vittorie. Anche se dovrà subire una grande sconfitta per opera dell'ammiraglio Nelson nella battaglia di Abukir.
1799 -> Napoleone attua un colpo di stato Armato ( con l'aiuto dell'esercito ) 9 Novembre ,gli vengono concessi i pieni poteri dal senato(credo) insieme ad altri due consoli.

 Il consenso e il successo è dovuto ai suoi successi militari, infatti quando subirà delle sconfitte, perde consensi e il suo sistema cede.

 Bonapartismo [Pag 184 -185] potere assoluto fondato sul consenso del popolo (governati) Manifestato periodicamente nei plebisciti (SUFFRAGIO UNIVERSALE MASCHILE)
1799 -> console
1802 -> console a vita
1804 -> imperatore
 

 

Proprietà dei limiti



venerdì 2 novembre 2012

Appunti Linux del Sala


Hacker: scopre buchi (bug)  nel sistema e segnala il problema al creatore.
Cracker: hacker che utilizza i bug per distruggere il sistema.

Il sistema Unix era usato dalla nicchia, capace di sfruttare l'OS, ma non dalla massa (Windows).
Allora nasce l'idea di creare Linux, dotato di interfaccia grafica come Win.
Fino a circa 5 anni fa, però Linux poteva essere installato solo da persone competenti. Con Ubuntu il problema è stato "risolto".
Linux deriva da Minix, creato dal prof. olandese Tanenbaum.
La prima versione (0.01 - gratuita) risale al 1991 -> Android
Linux è basata GNU GPL(General Public License): creata da Richar Stallman e Eben Moglen nel 1989, consente il libero utilizzo, copia, modifica, distribuzione di un dato software (sorgente codice libero).
OPEN SOURCE:
- ridistribuzione libera del software modificato;
- il codice sorgente del programma deve essere incluso e accessibile;
- le modifiche (release) possono essere inviate al team di programmatori che, dopo averle valutate, possono rilasciarle nella successiva versione distribuita.
Linux è il KERNEL (vmlinuz).
Knoppix: prima versione live, assorbita da Ubuntu.
KERNEL:
- monolitico: unico file (più veloce, semplice e lineare);
- microkernel: articolato su più files, che svolgono un compito ciascuno.
Linux è monolitico, a cui però possono essere agganciati svariati moduli.
"In Linux everything is a file" e tutto deve venire montato in un'unica directory, anche se da quandoè uscito Ubuntu questa operazione viene eseguita in automatico.
FSTAB: tabella delle partizione in Linux, dove vengono configurate le varie informazione sui file system
1- Dispositivo da montare;
2- Mount point;
3- File System utilizzato (ext2, ext3, ext4...);
4- Opzioni specifiche per il mount
5- Indica se il file system deve essere backuppato con il comando dump (0 NO - 1 Sì).
6- Indica che deve essere fatto un filesystem check al boot.
DIRECTORY ROOT LINUX: /
Linux consente UN SOLO AMMINISTRATORE.
JOURNALING: permette di tenere traccia delle modifiche apportate al filesystem.
INODE: file leggibile solo al kernel Linux, identifica il file (permessi, proprietario, data di creazione, ultima modifica e posizione fisica del
file).
BOOTLOADER: programma usato per il boot di sistema e permette la scelta dell'OS da caricare (LILO o GRUB).
MASTER BOOT RECORD: settore (traccia 0) del disco fisso dove vengono salvati le informazioni del boot.
Il Lilo/Grub può essere installato sul:
- MBR (sconsigliato);
- boot;
- devices.

RUNLEVELS
Runlevel 0: modalità di shutdown;
Runlevel 1: modalità singolo utente (niente rete);
Runlevel 2: multiutente con rete attivata, ma niente file sharing;
Runlevel 3: modalità testuale predefinita;
Runlevel 4: scopi personali;
Runlevel 5: modalità grafica testuale;
Runlevel 6: modalità di riavvio.

INIT: è il padre di tutti i processi.
Nell'inittab possono essere configurati i vari runlevel
Tutti gli script di init sono contenuti in /etc/rc.d
rc.sysinit: monta il fylesystem, abilita la memoria virtuale, carica il kernel, etc...

PROCESSO DEMONE: applicazione che girano in background (sleep) e soddisfa particolari richieste.
Partono durante la fase di boot e vengono modificati attraverso il file di configurazione.
cupsd: gestore della stampante.
httpd: permette di trasformare la macchina in un server.
mysql: gestore dei database.
samba: permette di far dialogare Linux con una macchina differente.

TIPOLOGIA DI UTENTI LINUX:
- root (l'unico amministratore di sistema);
- user.
L'user può essere anch'esso un amministratore, ma non gode di tutti i provilegi di root.
I privilegi di un utente sono decisi dal root.
Le varie tipologie di utente sono  registrate in /etc/passwd e /etc/shadow (informazioni e password criptate).

LA RIVOLUZIONE FRANCESE- TRA IL 1791 E 1794

In questo periodo esplode il dibattito politico, che coinvolge ampi strati della popolazione, come ceti popolari, le donne e vengono a formarsi i club, gruppi composti da persone con gli stessi ideali, antenati dei partiti moderni. Il principale club è quello dei Giacobini, con al suo interno l'avvocato Maximillien Robespierre; inizialmente gli ideali erano fondamentalmente liberali, ma poi si spostarono verso un concetto più democratico e radicale.
In questi mesi, del 1791, iniziarono le fughe dei nobili verso l'estero, data la situazione creatasi in Francia. Nel giugno del 1791, la famiglia reale, tenta di scappare da Parigi, con scarso successo, scaturendo un legame di sfiducia tra popolo e re. La maggior parte dell'assemblea costituente, tenta di salvare il re, mentre il 17 luglio, una grande protesta popolare chiede la sua destituzione.
Nel settembre del 1791, la costituente si scioglie e vengono indette le elezioni con un parlamento monocamerale, con a capo l'assemblea legislativa. Il governo formatosi fu debole, perchè da un lato non si ha fiducia nel re e d'altra parte teme una rivolta aristocratica e infine ha paura del movimento popolare. Allora si cerca di rafforzare, scaricando sull'esterno la rivoluzione, incitando la popolazione ad unirsi per combattere un nemico esterno, in questo caso l'Austria.
Successivamente nell'aprile del 1792, viene dichiarata guerra all'impero Asburgico, al quale si unisce la Prussia. Dato il caos creatosi in Francia, la guerra ha un esito negativo, portando con se sconfitte militari e crisi economica. Nell'agosto del '92, viene assalito il palazzo reale a Parigi, reclamando il re da parte del popolo. La legislativa si sente impotente e decide di sciogliersi, dando il via a nuove elezioni, per soddisfare le richieste popolari; dando vita alla Convenzione, dove nel settembre del 1792, proclama la repubblica, destituendo il re. A questo punto, quest'ultimo viene processato accusato di tradimento nei confronti della patria, condannandolo a morte. Viene ghigliottinato nel gennaio del '93, metodo inventato da un dottore, Guillotin, per rendere la morte indolore.
A seguire, si forma la prima coalizione, composta dalle più grandi potenze europee; in questi mesi avviene la rivolta della regione della Vandea, battendosi contro l'assemblea parigina. Per salvare quel che era rimasto, la Convenzione, elegge il Comitato di Salute Pubblica, che di fatto è una forma di dittatura. Le quali decisioni sono:
- la riorganizzazione dell'esercito, dove tutti i cittadini sono chiamati a combattere per la nazione e per un ideale
- terrore contro i nemici reali o presunti contro la repubblica
- sostituzione del calendario e della religione

Tutto questo si concluse nel luglio del 1794, quando un colpo di stato portò all'arresto dei membri del Comitato di Salute Pubblica, incolpati da dei membri interni alla Convenzione e condannati a morte per ghigliottina.