Google+ Quarta Info B: 2012

venerdì 14 dicembre 2012

PARTITORE DI TENSIONE E CORRENTE

Partitore di Tensione:
Il partitore di tensione è un tipo di tecnica nella risoluzione dei circuiti elettrici per riuscire ad ottenere le tensioni presenti su delle resistenze in serie tra loro. Come sappiamo le resistenze in serie hanno la stessa corrente, ma una tensione diversa ed è proprio per questo che usiamo il partitore di tensione. Per poter calcolare la tensione presente su una resistenza, dobbiamo per prima cosa vedere quale sia la tensione presente nel nodo che contiene la resistenza, se è presente un generatore di tensione allora ci sarà quella tensione. Questa la utilizzeremo come riferimento per poi sviluppare la formula del partitore dove sono necessari i valori delle resistenze e la tensione totale sul ramo.
Ecco un esempio di applicazione di partitore di tensione:

Partitore di Corrente:
Il partitore di corrente è un tipo di tecnica nella risoluzione dei circuiti elettrici per riuscire ad ottenere le correnti presenti su delle resistenze in parallelo tra loro. Come sappiamo le resistenze in parallelo hanno la stessa tensione ai loro capi, ma un'intensità di corrente diversa ed è proprio per questo che usiamo il partitore di corrente. Per poter calcolare la corrente che passa in una resistenza, dobbiamo per prima cosa vedere quale sia la corrente entrante nella maglia che contiene le resistenze. Questa la utilizzeremo come riferimento per poi sviluppare la formula del partitore dove sono necessari i valori delle resistenze e la corrente entrante nel ramo.
Ecco un esempio di applicazione di partitore di corrente:

martedì 11 dicembre 2012

RESISTENZE IN SERIE E PARALLELO

Resistenze in Serie

Due resistenze si dicono in serie quando sono attraversate dalla stessa corrente. Per sommarle è sufficiente fare la somma algebriche delle due, ottenendo una resistenza che, nel circuito, equivale alla somma delle due resistenze di partenza.
Il risultato di tale resistenza, come ovvio che sia, dovrà essere maggiore della più grande delle resistenze sommate.

Resistenze in Parallello

Due resistenze si dicono in parallelo quando ai loro capi hanno la stessa differenza di potenziale (ddp). Per ottenerne la somma bisogna, sommare algrebricamente il reciproco di ogni resistenza e poi fare il reciproco della somma ottenuta. Il risultato di tale resistenza deve essere sempre leggermente più piccolo della resistenza più piccola.


RETI ELETTRICHE IN CONTINUA

Con rete elettrica si intende un qualsiasi circuito, comunque complesso, formato da generatori (nei quali l'energia di qualsiasi forma viene trasformata in elettrica) ed utilizzatori (nei quali l'energia elettrica viene trasformata in altra forma).
Nei circuiti elettrici si distinguono i nodi e le maglie. Per nodo si intende ogni punto in cui concorrono almeno tre lati o rami indipendenti, mentre una maglia è un circuito chiuso che si ottiene partendo da un nodo della rete e ritornando allo stesso dopo aver percorso i rami della maglia una sola volta in un senso arbitrario prefissato.
Una rete elettrica si dice lineare se è costituita soltanto da componenti lineari. Sono tali quei componenti i cui parametri caratteristici non dipendono dai valori di tensione e corrente che li interessano.

IL BAROCCO

All'inizio del '600, la cultura del classicismo muore per far posto a un nuovo movimento culturale, il Barocco. Le poesie di questo movimento si basano sulla meraviglia e sullo stupore del lettore, puntando molto su questi due fattori.
Secondo il Barocco e il suo più grande esponente, Gian Battista Marino, il pubblico doveva rimanere abbagliato e sbalordito davanti alle opere d'arte dell'epoca. Un esempio può essere la Basilica di San Pietro, la quale venne disposta in modo che fosse raggiungibile solamente a piedi tramite piccoli vicoli, per poi apparire di colpo con maestosità davanti agli occhi di chi la vedeva.
Si nota anche un abbandono della cultura classica, dalla perdita dei vecchi stili letterali e artistici, e l'adozione di nuovi. In questo periodo viene abbandonato il genere del poema e venne introdotto il romanzo, dove come primo troviamo il Don Chisciotte di Miguel de Cervantes.
Il 1600 è anche l'anno delle rivoluzioni scientifiche, dove vengono profondamente mutati gli studi dell'astronomia e della fisica. In primis Galileo Galilei con la nuova concezione dell'universo e l'invenzione del metodo sperimentale; Copernico con la teoria eliocentrica dell'universo ed infine Keplero con la teoria dell'infinità dell'universo e della disposizione dei corpi celesti.

lunedì 10 dicembre 2012

IL PENSIERO DI NICCOLÒ MACHIAVELLI

Niccolò Machiavelli ha un pensiero principalmente realista e in alcune circostanze idealista. I pensieri basati su degli ideali vengono dopo un'attenta analisi realista. Machiavelli afferma che la storia è una base fondamentale della scienza politica, perchè la natura umana non cambia mai nel tempo, ma rimane sempre la stessa. Egli paragona lo stato ad un essere biologico, cioè nasce cresce e decade.
Il principe fu scritto durante la guerra tra la Spagna e la Francia per l'egemonia della penisola italiana, che rivoltò gli stati regionali italiani, deboli contro le potenze europee. Anticipando il bisogno di unificarsi con a capo un principe forte e determinato.
Secondo Machiavelli la virtù e la fortuna si equivalgono nel peso degli avvenimenti. Dove le cose dipendono sia da noi stessi che dalla fortuna e dal caso; la virtù è da intendersi come la somma tra intelligenza e capacità dell'essere umano.
Nel pensiero di Macchiavelli viene separato il rapporto tra la morale e la politica, limitandosi ad osservare e giudicare azioni e comportamenti politici con un occhio utilitaristico. Egli si limitava, però, ad affermare la a-moralità della politica, cioè un'indipendenza tra quest'ultima e la morale. Niccolò Machiavelli viene accusato di ateismo, dato che nelle sue opere non mancano delle critiche verso la Chiesa Cattolica, accusandola di corruzione data dalla decadenza politica e morale degli italiani, al contrario della religione pagana, che costituiva un elemento di unione sociale. Da questo deriva un comportamento a-religioso, che separa la sfera della coscienza individuale da quella collettiva e politica.

IL PROEMIO - STORIA D'ITALIA (GIUCCIARDINI)

Francesco Guicciardini in questo proemio illustra come la situazione dell'Italia nel 1494, anno della discesa francese, da parte di Carlo VIII, verso l'Italia.

domenica 9 dicembre 2012

LE LISTE CONCATENATE

Una lista concatenata è una particolare struttura dati utilizzata nella programmazione informatica, in particolar modo nel linguaggio C, C++ e Java.
Alla base delle liste concatenate troviamo i puntatori, i link, particolari riferimenti che puntano ad un nodo, cioè un particolare dispositivo hardware, contenuto nel sistema, in grado di comunicare con gli altri dispositivi presenti nella rete. La lista concatenata consiste in una sequenza di questi nodi, con al loro interno dei dati specifici e dei link che collegano tra loro i vari nodi.

Le liste linearmente concatenate si suddividono in 2 grandi categorie:
-Liste semplicemente concatenate: Il collegamento (link) punta al nodo successivo, che a sua volta punterà a quello dopo e così via, terminando quando si avrà un valore vuoto o nullo(NULL).
-Liste doppiamente cocatenate: Il collegamento di ogni nodo punta sia al nodo precedente che a quello successivo. Se il precedente è vuoto o NULL allora quello è il primo nodo della lista; se, invece, il successivo è vuoto o NULL allora quello è l'ultimo nodo.
Una lista concatenata può ingrandire o diminuire la sua dimensione a piacere.


Le politiche di gestione delle liste concatenate sono principalmente 3:
-FIFO(First In First Out): Il primo nodo che richiede di entrare nella lista viene messo in testa a questa, in modo da essere il primo ad essere eseguito.
-LIFO(Last In First Out): L'ultimo nodo che richiede di entrare nella lista viene messo in testa a questa, in modo che nonostante sia l'ultimo ad entrare, sia il primo ad essere eseguito.
-Crescente o Decrescente: Queste due politiche funzionano in maniera contraria, cioè nella prima i nodi vengono messi in ordine dall'ultimo che fa la rpichiesta al primo, invece nella seconda avviene l'esatto opposto, cioè il primo che fa la richiesta, sarà anche il primo ad andare in esecuzione.

Per poter cancellare un nodo all'interno di una lista concatenata, va eliminato tale nodo e poi va creato un collegamento tra il nodo precedente a quello cancellato e quello successivo.                 B-->next=C-->next(D)

Ecco il codice per poter cancellare un nodo:

void cancella(nodo*t,nodo*p)
{
          nodo*a;
          if(t!=NULL)
         {
                    a=t;
                    while(a-->next!=NULL && a-->next!=p)
                    {
                               a=a-->next;
                     }
                     if(a-->next!=NULL)
                    {
                               a-->next=p-->next;
                               free(p);
                    }
          }
}

domenica 2 dicembre 2012

LO SCHEDULER


File:Scheduler.png

Lo scheduler è un software contenuto all'interno del sistema operativo che svolge il compito di gestire i processi, decidendo come amministrare la loro esecuzione.
Uno scheduler si affida a dei parametri contenuti all'interno del suo algoritmo di schedulazione, questi vengono comunemente chiamati politiche di scheduling.
I tipi di algoritmi che possiamo trovare in uno scheduler sono:
-FCFS(first come first served) manda in esecuzione il primo processo che ha fatto la richiesta in modo sequenziale.
-RR(round robin) simile al FCFS, ma con la differenza che quest'ultimo stabilisce un tempo massimo di esecuzione di ogni singolo processo e il tempo che manca ad un processo troppo lungo, per finire la sua esecuzione, verrà dato dopo che gli altri processi in coda abbiano finito.
-SNPF(shortest next process first) viene mandato in esecuzione il processo con il minor tempo di esecuzione tra quelli in attesa.

Un buono scheduler deve sottoporsi a delle regole ben precise per garantire l'efficienza del sistema, queste sono:
-Equità: ogni processo deve andare in esecuzione, senza lasciarne nessuno in memoria con un'attesa infinita.
-Rapidità: deve essere veloce nella scelta dei processi da mandare in esecuzione ed il suo tempo non deve dipendere dal numero di processi in attesa.
-Velocità del processore: la CPU deve essere attiva il più possibile, riducendo i tempi morti, in modo da essere sempre pronta.
-Rispetto gerarchia: lo scheduler dovrà assegnare le giuste priorità ad ogni processo che arriva. Un processo kernel avrà per forza la priorità più alta rispetto ad un processo utente.

ETÀ NAPOLEONICA (1799-1815)

Questo è il periodo nel quale Napoleone Bonaparte dominò in tutta l'Europa, che va dal 1799 al 1815.
Il 18 Brumaio (8 novembre) del 1799 fece il famoso colpo di stato, assumendo il potere in tutta la Francia; lo stesso anno venne nominato Primo Console, la quale carica durò fino al 1804.
Nel maggio del 1804 Napoleone sale al potere come imperatore di Francia, facendo ritornare lo stato ad una monarchia costituzionale. A partire da questo anno entra in vigore il codice civile napoleonico, cambiando ulteriormente l'ordinamento civile dello stato francese. Successivamente l'esercito francese, utilizzato per le campagne militari, venne formato non solo dagli stessi cittadini, ma anche dalla popolazione dei territori conquistati.
Si forma poi la confederazione del Reno, creatasi a causa della prospettiva di unificare lo stato tedesco passando da 360 enti politici a 38. Successivamente l'Italia subì un grande cambiamento dall'arrivo di Napoleone durante la Prima Campagna d'Italia, trasformando l'assetto della carta politica. Si vennero a creare in seguito al trattato di Campoformio:
-Repubblica Cisalpina
-Repubblica Ligure
-Repubblica Romana
-Repubblica Partenopea (escludendo la Sicilia)
Tutte queste repubbliche della penisola italiana, crollarono nel 1799, a seguito della controffensiva austro-russa e dalle insurrezioni popolari interne, chiamate "insorgenze", reclamando il vecchio re e il vecchio ordinamento politico, con anche un ritorno della Chiesa Cattolica. L'esempio principale fu quello dell'esercito della Santa Fede, con a capo il cardinale Rufo di Calabria.
La seconda fase dell'età napoleonica, comincia con la Seconda Campagna d'Italia per riprendere il controllo della penisola. Dopo il 1804 anche in Italia si iniziano a vedere dei Regni, dove a capo del Regno d'Italia andrà Napoleone stesso, con un vice re al suo comando e il Regno di Napoli andrà prima al fratello di Napoleone e successivamente a Giocchino Murat, generale dell'esercito napoleonico. Tra il 1810 e il 1812 ci fu il periodo di massima espansione, coronato da importanti conquiste, dove l'imperatore Napoleone Bonaparte si sposò con la figlia degli Asburgo, Maria Teresa d'Asburgo.
Nel 1812, Napoleone decise di tentare la conquista dell'impero russo, dirigendosi con 700'000 uomini verso Mosca. Lo zar saputo dell'attacco imminente dei francesi si ritirò a San Pietroburgo;  nel mentre l'esercito francese avanzava verso Mosca e una volta arrivati trovarono la città vuota senza abitanti e risorse alimentari. In seguito Napoleone dovette ritirare i suoi uomini non facendo conto di un importante nemico, l'inverno russo. Nel ritorno in Francia morirono circa 600'000 uomini, causando un grosso indebolimento dell'esercito. Questo evento si definisce "l'inizio della fine" dato che gli altri imperi deciso di colpire in questo momento, annientaro Napoleone a Lipsia costrigendolo all'esilio nel 1814 nell'isola d'Elba.
Nel 1815 Napoleone abbandono furtivamente l'isola, con l'intento di tornare in Francia e riprendersi il potere. Inizialmente riuscì nel suo scopo riorganizzando un esercito e basandosi sul consenso popolare, successivamente il 18 giugno 1815 venne sconfitto definitivamente nella battaglia di Waterloo e mandato in esilio nell'isola di Sant'Elena, dove morì il 5 maggio 1821 a seguito di una malattia allo stomaco.

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.

martedì 30 ottobre 2012

LA RIVOLUZIONE FRANCESE-INTRODUZIONE

La rivoluzione francese inizia con una serie di avvenimenti a partire dal 1789 al 1815. La fase più propriamente rivoluzionaria dura fino al 1794.
Questa scoppia per colpa della crisi finanziaria dello stato francese, dove è presente un deficit di 116 milioni di lire tornesi, con un pesante debito pubblico. I ministri delle finanze eletti da Luigi XVI, cercano di introdurre delle riforme per migliorare la situazione trovando contrapposizione con i privilegiati (nobili, clero ecc). Successivamente, dopo una serie di fallimenti, vengono convocati gli Stati Generali a Versailles il 5 maggio 1789, dove questi sono l'assemblea dei 3 ordini in cui è divisa la società francese, cioè, nobiltà,clero e terzo stato.
La causa di fondo è il fatto che l'Antico Regime non reggeva più come forma di società. In Francia ci sono ormai forze sociali e culturali, in grado di farsi carico del progetto di trasformazione. Le forze sociali sono composte principalmente da persone del Terzo Stato, composto a sua volta da dal popolo e i borghesi, mentre le forze culturali comprendono gli illuministi e il loro movimento.
L'elezione negli Stati Generali veniva fatta per "testa", cioè contando ogni singolo componente, ma ci sono voluto 2 mesi per accordarsi su questo metodo.
Successivamente il Terzo Stato si autoproclama Assemblea Nazionale, stufo di aspettare. Il re poi invita gli altri ordini a unirsi a questa, con l'obbiettivo di emanare una nuova Costituzione, creando così l'Assemblea Nazionale Costituente.
Nel contempo a Parigi e nel resto della Francia, il popolo si mette in moto, facendo l'assalto alla Bastiglia il 14 luglio del 1789. A partire dal 20 luglio 1789 anche i contadini si ribellarono a propri signori.
I principali provvedimenti dell'assemblea sono stati:
-4 agosto, abolizione dei diritti feudali
-26 agosto, dichiarazione dei diritti dell'uomo e del cittadino, creando una sorta di monarchia costituente con la divisione dei poteri, esecutivo al Re, legislativo all'Assemblea Legislativa e legge elettorale. Questo è il tipo di stato che verrà utilizzato a partire dal settembre del 1791.
-nazionalizzazione dei beni della Chiesa
-costituzione civile del Clero, dove i sacerdoti diventano funzionari dello stato francese.
 

lunedì 29 ottobre 2012

IL PRINCIPE (Niccolò Machiavelli)

Il principe, scritto da Machiavelli, è un libretto di 26 capitoli, dal capitolo 1 al numero 11 si parla dei principati, dal 12° al 14° del problema degli eserciti, dal 15° al 23° delle qualità di un principe, il capitolo 24 parla delle cause della crisi degli stati italiani. Nel capitolo 25 si parla, invece, del rapporto tra virtù e fortuna, infine il 26° è composto dall'esortazione a liberare "la Italia".
Esso viene scritto nell'anno 1513 a seguito delle "Guerre d'Italia", che vedono scontrarsi la Spagna e la Francia per l'egemonia sul territorio italiano.

IL TRATTATO POLITICO

Un grande cambiamento del trattato politico si ebbe con Niccolò Macchiavelli (1469-1527) e Francesco Guicciardini (1483-1540), nati entrambi nell'epoca di Lorenzo Il Magnifico, in un clima di crisi e incertezza nella penisola italiana. Nel 1512 viene restaurato il potere dei Medici a Firenze, ma dopo il 1527 vengono cacciati e viene restaurata la repubblica; nel 1530 Alessandro De Medici torna al potere per soli 7 anni, dopodiché viene assassinato da una congiura fatta dal cugino Lorenzino.
La riflessione nei trattati cerca strade nuove, diventando sempre più un interpretazione personale; mutando il trattato politico in una forma di moderna saggistica. I due autori, Macchiavelli e Guicciardini non scrivono più per celebrare un principe, ma per cercare di trovare le soluzioni e i rimedi, per la crisi italiana.

LA PROSA-IL GENERE DEL TRATTATO

Nascita e struttura:
I trattati sono dei particolari testi in prosa di tipo narrativo, con una tesi e delle argomentazioni a favore di essa. Il genere in esame si afferma durante il 400, nella forma del dialogo. Questo influisce molto nel genere del trattato, dove scambio e confronto assumono un valore fondamentale; il dialogo diventa la forma letteraria più consona al trattato.
La lingua:
La lingua più utilizzata nei trattati è il latino, spesso linguaggio degli intellettuali d'Europa; solamente quando lo scrittore è interessato ad espandere il suo trattato ad un pubblico più popolare, viene utilizzata la lingua volgare, in modo da permettere a tutti di poterlo leggere.
Nel 500:
Nel cinquecento la trattatistica, assume un ruolo centrale nella scrittura europea. Questo genere è dedicato alla ricerca di regole nei campi delle principali attività umane, come la politica e la cultura.

lunedì 22 ottobre 2012

Sistemi: Multiprocesso, la sua gestione e concetti fondamentali

*Overhead= in generale, sovraccarico del sistema
*Time sharing: è praticamente il concetto della multiprogrammazione, si cerca di spartire il tempo di utilizzo della CPU tra le task di utenti diversi.

Processo:  è un insieme di istruzioni in sequenza che vengono eseguite e dalla memoria utilizzata dallo stesso.
Un programma, sotto richiesta di un utente, può diventare un processo.
Un processo avrà in memoria 3 segmenti: un di stack, uno data e uno di codice.
Un S.O. basato sulla multiprogrammazione deve poter distinguere i processi l'uno dall'altro. I processi hanno una variabile, detta anche pid, che contiene un numero intero ( che parte da 1) che contraddistingue una task dall'altra. Tutti i processi sono raccolti in una tabella dei processi che contiene i nomi dei processi, la CPU utilizzata, la memoria utilizzata.
Questa tabella viene utilizzata da un programma interno del S.O. chiamato scheduler.
Lo scheduler ha il compito di scegliere il processo da eseguire tra la tabella dei processi tramite un algoritmo; esso dovrà avere alcune caratteristiche per eseguire il suo lavoro in maniera ottimale:
- Dovrà essere equo con i processi, senza monopolizzare le risorse ad un unico processo
- Dovrà essere rapido nella scelta del processo da eseguire, indipendentemente dal numero di processi da eseguire
Naturalmente dovrà rispettare anche la gerarchia dei processi: un processo in kernel mode avrà sicuramente più privilegi di un processo in user mode.

Ad ogni cambio di processo avviene anche un cambio di contesto: I dati del processo vengono salvati in memoria insieme ad altri dati come lo stato della CPU, il numero dell'istruzione a cui il processo è arrivato e altri dati.

Per passare da un processo all'altro intercorre un tempo chiamato time slice: questi tempo serve per permettere il passaggio da un contesto all'altro (cioè di cambiare ambiente del processo).
Questo tempo su i sistemi con kernel Linux può essere modificato a piacere, ma può essere dannoso per l'affidabilità di un computer mettere un tempo troppo piccolo, perché il S.O. potrebbe non riuscire a cambiare contesto in tempo, mentre se si mette un tempo troppo elevato ne risentiranno le prestazioni del PC.


Processi:
Un processo su una CPU uniprocessore può essere in quattro stati distinti:
- Running: Il processo è in esecuzione e sta svolgendo le sue istruzioni
- Ready: Il processo può essere eseguito dalla CPU
- Wait o Block: il processo è in attesa,  ad esempio di dati ecc...
- Zombie: è un processo che ha finito la sua esecuzione, ma possiede ancora un pid è una variabile da far ritornare al padre, come un intero, un float, una stringa...
Questo tipo di processo si crea quando un padre di un processo genera un processo figlio e non aspetta il ritorno del valore dal figlio.




Un job che sta girando sul processore può subire un'interruzione se deve eseguire dei trasferimento dati in input/output facendo una system call andando in wait, oppure ha superato il quanto di tempo ha sua disposizione ( Time out) verrà interrotto, andando nello stato Ready. ( Un quanto è un periodo di tempo che il S.O. dedica ad un singolo processo. Più il quanto sarà grande, più il sistema sarà orientato verso il CPU-bound, cioè sistemi che vanno a scatti ma che ha a disposizione più tempo per sfruttare la CPU; il contrario invece, cioè un quanto più piccolo per processo si avrà un sistema predisposto per verso il I/O- bound [ Input/output], dando però un passaggio un sistema più fluido).
Dopo aver ricevuto i dati che gli servivano il processo andrà nello stato di Ready.

I processi tra di loro possono comunicare (IPC, Inter Process Communication). Naturalmente i processi devono essere predisposti per lo scambio di dati.

I processi che non hanno una fine, tipo l'interrupt per aumentare l'ora dell'orologio, quello della tastiera, del mouse ecc.. su Linux si chiamano demoni (daemons), ed essendo processi anch'essi utilizzeranno memoria.
I processi tra di loro possono avere in comune solo il code segment ma solo se lo permette il S.O.
In generale, non condividono memoria.

*Un processo figlio comunica una sola volta con il padre, quando termina e va ritornare un valore.

Capitolo 1-Richiami sulle funzioni, insiemi numerici e insiemi di punti

Funzione: Dati 2 insiemi non vuoti X e Y si chiama applicazione o funzione da X a Y una relazione tra i 2 insiemi che ad ogni x appartenente all'insieme X, fa corrispondere uno e un solo y appartenente a Y.
Dominio: Se y è l'immagine di x tramite f, si scrive y=f(x) dove "f" sta a indicare la funzione e l'insieme X è il dominio di essa.
Codominio: è il sottoinsieme proprio o improprio di Y formato dagli elementi che hanno almeno una controimmagine nell'insieme X.
Classificazione funzioni
                                                      /                                                   \
                                           algebriche                                            trascendenti
                          (funzioni letterali, numeriche...)   (funzioni goniometriche,esponenziali e logaritmiche)
                        /                      |                        \
razionali intere            razionali fratte           irrazionali

Funzione pari: Si dice pari se il suo grafico è simmetrico rispetto all'asse y e se f(-x)=f(x)
Funzione dispari: Si dice dispari se il suo grafico è simmetrico rispetto all'origine e se f(-x)=-f(x)
Funzione crescente: Una funzione si dice strettamente crescente nel suo dominio D se:
 x1<x2 ==> f(x1)<f(x2)

Funzione crescente: Una funzione si dice strettamente decrescente nel suo dominio D se:
 x1<x2 ==> f(x1)>f(x2)
Funzione monotona: Quando la funzione è sempre crescente o decrescente in senso stretto.
Funzione costante: x1,x2   f(x1)=f(x2)
Funzione iniettiva: x1=x2 ==> f(x1)=f(x2)
Funzione suriettiva: Una funzione "f" da X a Y si dice suriettiva se il suo codominio coincide con Y.
Funzione biunivoca: Quando la funzione è sia iniettiva che suriettiva.
Funzione periodica: Una funzione si dice periodica di periodo T se vale: f(x+kT)=f(x) dove k è un numero intero e T deve essere un numero positivo il più piccolo possibile per cui vale l'uguaglianza.
Insieme numerico: Un insieme i cui elementi siano numeri.
Maggiorante:Preso un sottoinsieme di un insieme più grande, un maggiorante è un numero maggiore di tutti i numeri del sottoinsieme.
Estremo superiore: è il più piccolo maggiorante.
Insieme superiormente limitato: è un insieme che ammette l'estremo superiore.

Per dimostrare che un numero "s" è l'estremo superiore di un determinato insieme (E) di numeri reali, si devono far valere 2 proprietà:
- s risulti un maggiorante effettivo dell'insieme E(x<=s)
- Comunque si prenda un numero più piccolo di "s" a piacere, non deve essere un maggiorante, cioè deve esistere almeno un elemento di E maggiore di quel numero preso.
Insieme completo: Particolare insieme che non contiene buchi al suo interno.
Intorno di un numero: Qualsiasi sottoinsieme [a;b] contenente il numero stesso.
Punto di accumulazione: Dato un punto c, che può anche non appartenere all'insieme, è un punto di accumulazione o limite di un insieme lineare se, in ogni intorno di c, esistono infiniti punti dell'insieme.
Il numero 0 è un particolare numero, in quanto è sempre un punto di accumulazione.
Massimo assoluto di una funzione: è il punto "massimo" o più alto che il grafico della funzione può assumere.
Minimo assoluto di una funzione: è il punto "minimo" o più basso che il grafico della funzione può assumere.

martedì 16 ottobre 2012

Java: un linguaggio ad oggetti

La programmazione ad oggetti prevede di raggruppare in una zona circoscritta del codice ,ovvero la classe,  la dichiarazione delle strutture dati, attributi,  e delle procedure,i metodi,  che operano su di esse.

Un programma ad oggetti è un interazione fra più oggetti ( formati da metodi + attributi). 2 oggetti con con le stesse caratteristiche si dicono appartenenti alla stessa classe.

Classe : tipologia di oggetti definiti dallo stesso insieme di attributi e metodi. 
da cui deriva --> classificazione : insieme di oggetti con le stesse caratteristiche e proprietà strutturali

Incapsulamento: possibilità di poter stabilire quali dati possono essere pubblici privati o protetti.

Ereditarietà: permette di derivare nuove classi a partire da quelle già definite. Una classe creata da una classe già esistente , detta sottoclasse, ha già i metodi e le gli attributi della classe padre.

Polimorfismo: si intende la possibilità di dare lo stesso nome a sottoprogrammi che fanno cose diverse.
In java un esempio di polimorfismo può essere il "+" 
Esempi 5 + 3 (somma tra interi)
              1.5 +0.3 (somma tra float)
              "lodato"+"è"+"gay" (concatenazione tra più stringhe)

La decisione sul valore del "+" varia a seconda del tipo degli operandi 

Astrazione : classe astratta -> classe non istanziabile che può avere  metodi astratti
                     metodo astratto -> metodo di una classe astratta di cui non viene definito
                                                      il corpo     (viene definito dalle sottoclassi della classe                                                                    astratta)

Informatica: Appunti in generale

Informatica: scienza dell'informazione e gestione automatica dell'informazione

Piattaforma=S.operativo + CPU

Problema della portabilità del software: consentirne l'utilizzo su ambienti diversi.

Compilazione in Java: crea un file bytecode che verrà poi interpretato dalle varie macchine virtuali.

Interpretazione: ogni istruzione è letta, tradotta, ed eseguita al momento dal processore.

Svantaggi:
maggior tempo di esecuzione e maggior impiego di risorse del sistema
Vantaggi:
Più facilità nelle operazioni di debugging e operazioni di compilazione più rapide.

Macchina Virtuale: insieme di software che consente di eseguire lo stesso programma su piattaforme diverse.


Compilazione: traduzione del codice sorgente in linguaggio macchina.
Fasi:
1- Preprocessing( toglie ciò che non serve come commenti e spazi)
2- Analisi lessicale(controlla se conosce tutti i simboli presenti)
3- Analisi sintattica(guarda se c'è qualche errore di sintassi es. true treu )
4- Analisi semantica(studia il significato : errori a parametri e tipi)

Vantaggio linguaggi compilati:
Velocità della compilazione: minor "peso" a tempo di esecuzione , sia di tempo sia di memoria.
Svantaggi:
Quando vi è un errore in esecuzione , va riscritto e ricompilato, per poi rieseguirlo.


martedì 9 ottobre 2012

Sistemi: L'evoluzione dei computer

La nascita dei computer risale nel XIX secolo, quando Charles B. e Ada Lovelace sviluppano il primo automa, facendo diventare Ada la prima programmatrice della storia.
I computer li possiamo suddividere in 4 grandi generazioni: 
La prima è quella dagli anni quaranta a gli anni circa metà anni cinquanta. I computer più rappresentativi di questa epoca sono L'ENIAC e la Bomba ( Derivato dal suo ticchettio che produceva mentre lavorava).
L'ENIAC è un calcolatore sviluppato negli USA, la Bomba invece è un computer Polacco, poi utilizzato dagli Inglesi, per decifrare il codice Enigma dei Tedeschi nella seconda guerra mondiale.
I calcolatori di questa generazione si distinguono per il non possedere un S.O. e per utilizzare valvole termoionica al posto dei più moderni transistor, i dati in input erano gestiti tramite dei nastri perforati, scritti grazie a speciali macchine da scrivere. Questi calcolatori potevano eseguire solo semplici algoritmi e non potevano essere programmate.

La seconda generazione di computer (dal '55 al '65)  non ha ancora dei dispositivi come il mouse, la tastiera e il monitor. Tutto l'operazione di input si svolge tramite nastri perforati, che possono contenere dei programmi. Il programmatore deve scrivere il programma, tradurlo personalmente in linguaggio macchina istruzione per istruzione ed infine creare il nastro perforato.
Questi sistemi si chiamano batch system, cioè la macchina può eseguire solo un processo alla volta, eseguendo le istruzioni una dopo l'altra. Questi sistemi sono di tipo main frame, cioè grossi computer con alte capacità di calcolo ed affidabilità per gestire una grande quantità di dati.

La terza generazione di computer ( '65- '80) sono formati da poche migliaia di transistor, derivando il nome di mini computer.  Questa nuova generazione introduce il concetto di multiprogrammazione, cioè ottimizzare l'utilizzo della CPU. Quando eseguiamo un processo, esso potrebbe avere bisogno di alcuni dati che devono essere forniti all'utente. Perciò la macchina si mette in attesa, sprecando tempo prezioso (A quei tempi poter eseguire il maggior numero di operazioni possibile alla macchina era fondamentale, soprattutto sotto il punto di vista economico, per poter far funzionare sempre la CPU, sfruttandola al massimo). E la multiprogrammazione serve per evitare questo: quando un processo è in attesa può passare ad un altro processo per ottimizzare i tempi e le operazioni eseguite.
Un esempio per rendere più chiaro l'importanza dei sistemi a multiprocesso può essere:
Prendiamo 3 processi p1, p2, p3 che abbiano rispettivamente 10s, 5s e 8s di tempo per completare la loro esecuzione.
In un sistema batch, cioè quelli della 2° generazione, il tempo che ci impiega teoricamente (senza contare il tempo che ci impiega avviare i processi, caricare i dati ecc..) ci impiegherebbe 10+5+8= 23s di esecuzione.
In un computer di 3° generazione invece, i processi vengono tutti caricati sulla memoria della macchina:

Questo è uno schema di come potrebbe essere gestito un gruppo di 3 processi, soffermandoci solo sulla parte iniziale.


Il sistema avvia il primo processo p1, che dopo 22ms per motivi vari (da una chiamata di sistema, oppure sta aspettando dei dati in input dall'utente) si interrompe. Ed è qui il vantaggio della multiprocesso: sfruttando i tempi morti dei processi si possono portare avanti delle altre task (task, job e processo indicano la stessa cosa, tranne job che può essere un insieme di tasks). Perciò, si avvierà il processo 2, che interromperà a sua volta per far incominciare p3 e così via. Per concludere, se consideriamo il time slice, cioè il tempo per passare da processo a processo e altri fattori (come l'avanzamento dei vari processi e la distribuzione dei tempi morti ecc..)  possiamo concludere 3 processi in 12s (+o-).

I computer di 4° generazione, detti anche micro computer, corrispondono ai computer moderni, con sistemi con milioni o addirittura miliardi di transistor.


lunedì 8 ottobre 2012

La Gerusalemme Liberata- Il Proemio

1°Strofa
Gli elementi che differiscono dalla Gerusalemme Liberata, di Torquato Tasso, all'Orlando Furioso, di Ariosto, sono principalmente 2. Il primo è la religione, alla quale, nel primo poema viene data una grande importanza nella storia e nelle vicende, a differenza dell'altro. La seconda differenza sostanziale era quella delle due guerre combattute all'interno del romanzo; la prima, Gerusalemme Liberata, fu ambientata nel periodo delle crociate e ne narra le vicende, mentre la seconda, l'Orlando Furioso, è ambientata in una storia immaginaria e inventata da Ariosto.
2°Strofa

Nella seconda strofa troviamo "l'invocazione" ad una Musa, una creatura celeste dell'epoca classica, ornata di una corona d'oro di stelle immortali. Questo sta a confermare che nel poema della "Gerusalemme Liberata" è presente anche un tema religioso e solenne, a differenza di quello di Ariosto, dove il linguaggio è più schietto e superficiale.
3°Strofa
In questa parte il Tasso cerca di raccontare storie e vicende che trattano di guerre e battaglie, ingannando il lettore, in modo di fargli leggere le avventure delle Crociate, senza però farlo apparire in modo evidente. Riesce ad attrarre i lettori che prima disprezzavano questi tipi di storie.
4°Strofa
Qui troviamo la dedica al duca Alfonso, dove gli chiede di aiutarlo a farsi notare e di accettare il suo poema, considerandolo un omaggio e un voto(dedica) verso costui.
5°Strofa
Si parla di una nuova crociata che serve per poter togliere ai mussulmani il Santo Sepolcro che detengono; ridandolo ai cristiani con armi e navi da battaglia. Questo viene utilizzato da Torquato Tasso come forma di incitamento verso il duca Alfonso, a ricompiere l'impresa di Goffredo nella prima Crociata.

mercoledì 3 ottobre 2012

Sistemi - Riepilogo comandi da console Linux accennati

Sistemi - Riepilogo comandi da console Linux accennati

Generali:.cd: [change - directory] : cambia la cartella dell'ambiente
.cfdisk: tabella partizioni del disco
.q [quit] : esci
.sudo [super user do] : sintassi --> sudo "processo"
.reboot [riavvia il sistema]
.pstree --> "Albero genialogico dei processi" (per ricordare tree--> albero ps --> process)
.man "nome comando" --> formato help di un comando
.mkdir [make - directory]: crea una cartella vuota

Supporto [Non spiegati]

.ps -ef [trova il pid (process identifier) di un processo]

.ls -all  [listare il contenuto di una directory]
.kill -9 [Sterminato dal sistema operativo]
.kill -15[Suicidati]
.clear - pulisce schermo

.mv [Rinomina il file]-  Sintassi:  mv nome_file_da_rinominare     nuovo_nome_file



Compilatore:

.gedit nomefile.estensione [Apre il file nel editor di linux]
.gcc -o  nomefileoutput.out  nomefile.c  [compila nomefile e crea nome file output]

opzioni da aggiungere al compilatore : -wall [warning all]
                                                                     -pedantic[pedante]




Creare Live USB Linux

Questa guida fa riferimento alla distribuzione Ubuntu, ma è valida per tutte le distribuzioni.

Pre-requisiti: L’immagine ISO dell’ultima versione di Ubuntu scaricabile dal sito italiano ufficiale. Il programma Linux live USB Creator.
Innanzitutto installate l’LinuxUSBLiveCreator(Lili) ed in seguito inserite la penna usb nel computer per poi avviare il programma.
Una volta avviata l’utility:
Innanzitutto la prima cosa da fare è quella di scegliere la chiavetta(o hard disk esterno) dove vogliamo installare Ubuntu.

Selezioniamo la ISO di Ubuntu,possiamo eventualmente scegliere di effettuare il download dell’iso, anche se consiglio di scaricare prima il file immagine che volete avviare da usb.
Adesso nello step 3 dobbiamo lasciare "Live USB", altrimenti apportate le modifiche che volete(vi consiglio di lasciare così per lo scopo che abbiamo).
Ora possiamo scegliere se formattare la nostra chiavetta USB e se vogliamo nascondere i file di installazione(il mio consiglio è di formattarla se non avete dei dati a cui tenete).
Una volta finito, clicchiamo sul fulmine in basso e attendiamo che la procedura finisca.
Fatto ciò la nostra chiavetta è pronta per installare Ubuntu su altri computer(o per provarlo).

Spostiamoci sul computer su cui vogliamo installarlo, prima però quest'ultimo deve essere spento, inseriamo la chiavetta, accendiamo il PC e poi clicchiamo subito il pulsante "ESC"(può darsi che con altri BIOS diversi non sia lo stesso pulsante, comunque solitamente è quello), ci apparirà la sequenza di boot e da qui selezioniamo la nostra chiavetta USB con il tasto ENTER. Attendiamo il caricamento per qualche minuto e poi potremo scegliere se installare Ubuntu o provarlo.

Se avete qualche problema scrivete nei commenti.

Sistemi: Primi accenni dei sistemi operativi, HDD

Transistor: creazione di una porta And e di una porta Or





Porta And fatta con i transistor.

               I1  I2  |  Y
               0    0      0
               0    1      0
               1    0      0
               1    1      1









Porta Or

                I1   I2  |  Y
                0    0       0
                0    1       1
                1    0       1
                1    1       1










Sistema Operativo (S.O.)
Con sistema operativo si intende l'insieme di programmi che gestiscono l'astrazione dell'hardware e delle risorse del computer.
Praticamente il S.O. deve poter permettere all'utente o al programmatore di modificare, di scrivere su dei file, su dei dispositivi, di poter accedere alle periferiche ecc..

Nei sistemi multiprocesso (SMP, Symmetric MultiProcessing) il S.O. deve fare la distinzione tra i processi kernel ( cioè i processi con i privilegi più alti che servono per la gestione del S.O.) e quelli user ( i processi avviati dall'utente).
Chiamata di sistema: un processo che non possiede i privilegi richiede al S.O. un servizio a livello del kernel. (Praticamente chiede al S.O. qualcosa che non avrebbe i privilegi di fare).
Il Kernel (dall'inglese nucleo)  il software vero e proprio del S.O. e può essere di vari tipi:
-Modulare: Questo è il kernel che si è affermato , ad ogni driver aggiunto semplicemente "appende" le righe di codice che gli servono per il corretto funzionamento del dispositivo al software, al kernel.
-MicroKernel: è un kernel con solo le istruzioni base per eseguire le il minimo indispensabile, ha bisogno di software esterni contenenti i driver per il corretto funzionamento dei dispositivi (es. è il microkernel basato su unix è composto da circa 10000 righe di codice, per uno spazio occupato da compresso di circa 2 Mb)

* Per passare da un processo all'altro si utilizzano degli interap o la chiamata di sistema SVC ( SuperVisor Call) che permettono l'interruzione di un processo per passare all'esecuzione di un'altro.*

Quando accendiamo un computer le prime operazioni che svolge sono di controllo dell'hardware, questa fase è indicata con la sigla POST (Power On Self Test) ed è eseguita dal BIOS. Finito il controllo si passa alla fase del Boot Loader, cioè la macchina ricerca nell'hard disk il primo settore (512Kb) del S.O. per iniziare a caricare il kernel dalla memoria secondiaria (dall'hard disk) alla memoria primaria (la ram). Questo settore è chiamato anche Master Boot Record (MSR). Finito la fase di boot loader il BIOS termina e incomincia il S.O.
* Se sono presenti più sistemi operativi ( dovuto a delle partizioni del disco che contengono loro stessi un S.O. ) si può selezionare quale far avviare tramite il boot maneger *

Disco fisso (HDD): è composto da dei dischi, dei piatti costituiti da un materiale magnetico dove è possibile memorizzare dei dati (sia sopra che sotto al piatto). Lo spazio negli HDD viene diviso in settori, su cui è possibile l'accesso tramite 3 variabili: C,H,S che stanno per Cylinder, Head, Sector (Cilindro, Testina, Settore). Questa tecnologia si è poi evoluta in LBA che sta per Large Block Addressing per via dei limiti di memoria accessibile tramite il vecchio sistema CHS.
Gli HHD possono avere al massimo 4 partizioni primarie più una estesa, che è possibile dividere in altre 64 sottopartizioni. Su ogni partizione primaria è possibile installare un S.O.
Nel MBR è contenuto anche la tabella delle partizioni dell'hard disk (Primarie + l'eventuale logica). Le sottopartizioni della partizione logica, se esiste, è contenuta nel root sector.
* La partizione logica non può contenere i file system!*
Per gestire le varie partizioni dell'hard disk esistono programmi (su linux, ad esempio, fdisk). --> GParted
Esiste anche un altra partizione del HDD che è la memoria di swap: la memoria di swap serve in caso se la macchina esaurisse lo spazio sulla memoria primaria, perciò si utilizza della memoria secondaria come memoria primaria. Ma essendo la memoria secondaria molto più lenta della memoria primaria, questo va ad influire sulle capacità della macchina stessa.

I sistemi operativi moderni posseggono una interfaccia grafica, dove l'utente possa gestire la macchina in modo semplice ed intuitivo. Ma negli anni precedenti non esistevano le interfaccia grafiche ( chiamate anche GUI, Graphical User Interface) , esistevano sole le interfaccie caratteri, le così dette Shell ( come il Dos).
La GUI è limitata nelle azioni che si possono fare, mentre la Shell non ha limiti sulle operazioni che può eseguire.

* Il boot può anche avvenire tramite il collegamento con un server: il computer scarica il kernel , scarica i moduli necessari per il S.O. , infine associa ogni modulo al suo dispositivo associato *



lunedì 1 ottobre 2012

Societò di Antico Regime e ordini

SOCIETA' DI ANTICO REGIME:
Modello di società che domina in Europa tra metà '600 e metà '700.
I protagonisti della rivoluzione francese che si avviavano al cambiamento hanno dato il nome di "società di antico regime" alla società "vecchia" che stavano per rinnovare.

Nella società di Antico Regime le gerarchie non erano determinate dalla posizione economica dell'individuo e quindi non era una società di classi ma di ordini: l'appartenenza di un individuo ad un ordine è definita giuridicamente.
Abbiamo tre ordini:
-Clero
-Nobiltà
-Terzo stato (borghesi e contadini non appartenenti a nessuno dei primi due ordini)

(   Adalberone di Laon già secoli prima aveva dato un proprio concetto di divisione della società:
    oratores che pregavano, bellatores che combattevano e laboratores che lavoravano per il    
    mantenimento della società. )

CLERO [Pag 33]

Il clero aveva il monopolio totale dell'istruzione e della pubblica assistenza.
Godeva di particolari immunità:
 -Immunità personale: il sacerdote veniva giudicato da un tribunale ecclesiastico anche per reati comuni.
 -Immunità locale: sottraeva i luoghi sacri all'autorità della polizia o delle magistrature.
 -Immunità  reale: esentava i beni della chiesa dal pagamento delle imposte.

Inoltre i beni e le proprietà della chiesa erano soggette al vincolo della manomorta ovvero l'impedimento di divisione e vendita di questi.

Suddivisione
-Clero regolare
 Ordini religiosi caratterizzati da grande forza economica e culturale

-Clero secolare
 Corpo di sacerdoti al di fuori di un'organizzazione monastica che si divide a sua volta in:
 
     -Alto clero: comprendeva i vertici elle gerarchie ecclesiastiche, dotati di una cultura raffinata e
       notevole forza politica.

    -Basso clero:popolazione contadina e piccolo-borghese dal tenore di vita molto modesto.



NOBILTA' [Pag 35]

Nobile è chi dispone di un titolo che lo riconosce tale. (Concesso in origine dal sovrano).
Carattere distintivo della nobiltà era il mettere in discussione il fatto che ci fosse un ceto superiore agli altri e riconoscersi in esso.
Il titolo che possedeva il nobile concedeva determinati privilegi.
Tra '600 e '700 vive un periodo di crisi dovuta all'emergere di nuovi poteri e ricchezze legate all'attività borghese e dall'affermarsi di uno stato moderno che gli aveva sottratto potere e autonomia.
Importante è la distinzione tra nobiltà di sangue o "spada" e nobiltà di toga; la prima era ottenuta per discendenza la seconda era ottenuta per l'acquisto di una carica pubblica o per servizi svolti al favore del re. Questo faceva sì che anche i borghesi potessero ottenere il tanto desiderato titolo, seppur a prezzo molto caro.

Era comunque dalla terra che la nobiltà traeva la maggiorparte della sua ricchezza.
Persistono in Europa tracce della feudalità; infatti, il signore aveva rendite sia dalle terre coltivate da lui per mezzo di affittuari  o mezzadri sia per gli appezzamenti lavorati dai contadini che dovevano pagare un tot in denaro o natura. Quindi con le tasse da parte dei signori, le decime dalla chiesa e le imposte dallo stato i contadini non se la passavano bene.
Corti signorili dove potevano restare i contadini e lavorare senza doversi preoccupare di guadagnarsi da vivere ma stando comunque sotto il controllo di un signore.

TERZO STATO

- Contadini
- Borghesi (diverse figure sociali e professionali.)
- Popolo multiforme

Nelle grandi città si addensava il popolo multiforme: alcuni dediti a vari mestieri e altri che vivevano in miseria e precarietà.
Quindi aumentano a dismisura mendicità e vagabondaggio.
Per risolvere il problema vengono istituite delle case lavoro dove le persone erano costrette a lavorare.


domenica 30 settembre 2012

Sistemi: Assembler, CPU, bus

Assembly:
La prima istruzione che eseguiamo in un qualsiasi  programma scritto in assembly è l'istruzione Segment.
L'istruzione segment può essere:
- Data Segment: segmento di memoria dove si dichiarano le variabili globali o quelle allocate dinamicamente
- Stack Segment: su questo segmento ci va un po' di tutto, serve per i dati delle funzioni, per passaggio di testo ecc...
Praticamente è una memoria dove si salvano dei dati che dobbiamo riutilizzare in seguito
Esempio: Quando utilizzo una call per saltare ad un blocco di istruzioni. Per ritornare all'istruzione seguente alla call si memorizza in numero dell'istruzione sulla Stack segment, così che tramite la funzione Ret si possa tornare all'istruzione e continuare l'esecuzione del programma.
- Code Segment: segmento dove è contenuto il codice del programma, cioè le istruzioni da eseguire.


Differenza tra processo e programma: Il primo è un insieme di istruzioni, mentre il secondo sono le istruzioni di un programma che sono eseguite in sequenza da un computer.

CPU: sigla inglese di Central Processor Unit

 Registri: sono zone di memoria riservate al processore per eseguire le varie istruzioni.

ALU: dall'Inglese, Arithmetic Logic Unit, è l'unità della CPU addetta ad eseguire i calcoli aritmetici.

FPU: Floating-Point Unit, è designata per eseguire calcoli con numeri con la virgola.





I processori sono formati da una pipeline ( una catena di montaggio) così che il processore può eseguire più istruzioni contemporaneamente.  
- Fetch: preleva dalla memoria l'istruzione da eseguire, incrementando il registro delle istruzioni IP o PC (a meno che non ci sia una JMP, CALL, RET ecc..).

- Decoder: come dice il nome, decodifica l'istruzione da eseguire.

- Read: ricerca i dati che servono per l'istruzione da eseguire.

- Exec. : esegue fisicamente l'istruzione.
                   
                                                                                                        - Write: Scrive in memoria il risultato
                                                                                                        ottenuto.

I processori moderni sono superscalari, cioè possono portare avanti due o più processi contemporaneamente.
Le CPU si possono distinguere in due grandi categorie:
- RISC (Reduce Istruction Set Computer): CPU caratterizzata da istruzioni semplici
- CISC (Complex Istruction Set Computer): CPU caratterizzata da istruzioni molto più complesse, per questo è molto più difficile avere delle pipeline su questi processori.

I computer moderni hanno l'hardware della macchina collegato secondo la tecnologia di Neumann

Con I/O si intendono tutte le periferiche input/output che interagiscono con il processore e la ram




Il collegamento tra i vari componenti (il Bus) è composto da un bus indirizzi, un data bus e un bus di controllo

La velocità della ram è molto più lente rispetto a quella del processore: proprio per questo sul bus si viene a formare un "collo di bottiglia", un rallentamento nel passaggio dei dati.
Per risolvere questo problema si utilizza la cache, memoria a più livelli del processore per arginare il problema del passaggio dei dati. La cache più è vicina al processore (cioè ha un livello più basso) più sarà veloce e sarà di dimensioni contenute, mentre allontanandosi aumenterà di dimensioni e diminuirà di velocità. Le moderne CPU a più core hanno 2 cache riservate a core più una cache unica per tutte i core, che naturalmente essendo condivisa avrà più memoria.

Fattore energetico: Una CPU consumerà più energia se è attraversata da una tensione maggiore o se lavora a frequenze più elevate rispetto al suo standard.

I processori sono formati da dei transistor, dei dispositivi elettronici che possono funzionare da interruttori azionati da un impulso eletttrico.

Quando l'ingresso In sarà a  0 in uscita avremo 1 ( 5V) di tensione, mentre se In è 1 in uscita avremo 0.