venerdì 11 marzo 2016

Protezione dell' hardware : Dual-Mode

Un sistema operativo deve essere in grado di gestire i malfunzionamenti dei programmi ed evitare che da questi vada in errore l'intero sistema . MS-DOS non sopportava bene questi meccanismi di protezione ,il che lo rendeva molto vulnerabile a virus . Infatti il malfunzionamento di un programma mandava in crash l'intero sistema .
In questo post vi illustrerò uno dei meccanismi di protezione, il Dual-Mode.

Funzione Dual-Mode
Vi piacerebbe avere l'opportunità di accedere a tutte le risorse del sistema operativo ? Se si,pensate sia una buona idea ?
Per fortuna tutto questo non è possibile ,e per rispondere alla seconda domanda, sicuramente sarebbe una cattiva idea ,ergo non un buon meccanismo di protezione . Pensate ad un virus : avendo accesso garantito a qualsiasi parte del sistema ,potrebbe cancellare il sistema operativo ,modificarlo o chissà cos'altro . Basterebbe avere un po di fantasia ,metterla a disposizione di un po di malvagità e il danno sarebbe fatto .  Per fortuna esiste un meccanismo di protezione hardware denominato  Dual-Mode . Fondamentalmente, questo differenzia due modalità di esecuzione delle operazioni : modalità utente e modalità Kernel .
 Esiste dunque un bit di modo ( valore booleano che può assumere il valore 0 o 1) che differenzia tra la modalità kernel ( bit di modo=0) e modalità utente (bit di modo = 1) .
In modalità utente  un qualsiasi programma utente (scusate la cacofonia) non può accedere a risorse privilegiate ,non ne ha il diritto , lo può fare esclusivamente il sistema operativo . Se il programma ha bisogno di una di queste risorse ," chiede il servizio " al sistema operativo attraverso una System Call, se tutto va bene ,il sistema operativo passa in modalità kernel (cambiando il bit di modo) e soddisfa il servizio . Alla fine il controllo ritornerà all'utente con una successiva commutazione del bit di modo a modalità utente. Ad esempio il cambiamento del bit di modo è una funzione privilegiata e può essere svolta esclusivamente dal sistema operativo . Stessa cosa per le operazioni di I/O.
Inizialmente all'accensione del calcolatore , lo stato in cui ci si trova è in modalità kernel (è infatti necessario caricare il sistema operativo).
Come dicevo inizialmente, MS-DOS non sopportava questo meccanismo di protezione ,il che creava una marea di problemi e rende l'idea della mediocrità dello stesso.

mercoledì 9 marzo 2016

Differenza tra sistemi monoprocessore e multiprocessore

La CPU (unità di elaborazione centrale) è quel componente hardware che si occupa di curare tutte le funzioni di un computer basato sull'architettura di von Neumann (macchina a programma memorizzato) . E' dunque la componente fondamentale di un calcolatore . 
Un sistema con un solo processore ,dotato di una sola CPU principale è un sistema monoprocessore . In realtà un piccolo grado di parallelismo è dovuto ai vari controllori dei componenti( per esempio della memoria ) , ma si tratta di processori specializzati (guarda qui : http://zangariappunti.blogspot.it/2016/03/funzionamento-dei-dispositivi-di.html )  . L'uso di microprocessori specializzati insieme ad una sola CPU non rende un sistema monoprocessore in multiprocessore  . 
Negli ultimi anni i sistemi multiprocessore hanno iniziato a dominare il mondo della computazione . Questo tipo di sistema dispone di più CPU che condividono tra loro risorse (come il clock di sistema,le memoria ,il bus e i dispositivi periferici) . I sistemi multiprocessori hanno 3 principali vantaggi : migliori prestazione,maggiore affidabilità e  sono più economici, costano infatti di meno rispetto che avere più sistemi monoprocesore .

martedì 8 marzo 2016

Funzionamento dei dispositivi di Input/Output

Vi siete mai chiesti come fa il nostro computer a riconoscere la pressione della tastiera,i click del mouse,o l'uso di altre periferiche di I/O(Input/Output) ?  Se si, vediamo di scoprire cosa succede ,ma prima bisogna chiarire cos'è un sistema operativo e com'è fatto un dispositivo di I/O.
Sistema Operativo
Un sistema operativo è quel software che agisce da intermediario tra utente e hardware ; Ci permette di utilizzare in maniera efficiente i componenti hardware che fanno parte dei nostri computer.
Esempi di sistemi operativi sono Windows,MacOs,Linux,Unix ,ecc.  Il S.O. viene caricato in memoria all'avvio dal programma di bootstrap che si trova in una ROM o in una EEPROM . In realtà il bootstrap non carica l'intero sistema operativo,ma ne carica il kernel (nucleo) che è l'unico processo del sistema operativo sempre in esecuzione . Il bootstrap e le memorie in cui è contenuto sono dette firmware.
Dispositivi di I/O
I device di I/O sono il mouse,il monitor,la stampante,la tastiera ,ecc.
Ogni device di I/O ha al suo interno un controller (una sorta di piccolo processore) e un buffer locale che funge da memoria locale .
Ogni calcolatore è dunque composto da una CPU(Central Processing Unit o più familiarmente chiamata processore) e da questo insieme di controllori di dispositivi connessi mediante bus comuni. I sistemi operativi contengono per ogni controllore un driver del dispositivo che si coordina con il controllore e funge da interfaccia con il resto del sistema.

Vediamo ora di dare una risposta alla domanda nel titolo :
Appena il driver del controllore si accorge dell'operazione da intraprendere(per esempio click del mouse o pressione di un tasto della tastiera) ,il controllore trasferisce i dati dal dispositivo al buffer locale . Appena questa operazione finisce,il controllore manda un interrupt alla CPU. Un'interrupt non è altro che un evento asincrono , che richiede l'attenzione della CPU . Si dice asincrono perchè è in effetti impossibile sapere quando avverrà ,pensate ad un click del mouse . Appena la CPU termina il suo ciclo di clock salva il suo stato corrente e gestisce l'interruzione . Il modo più semplice per gestire le interruzioni  è attraverso il vettore di interrupt, che è  una tabella di puntatori salvata in genere nelle prime locazioni di memorie(le più basse) .L'accesso a questa sequenza di indici avviene per mezzo di un indice codificato dallo stesso segnale di interruzione,allo scopo di fornire l'indirizzo della procedura di gestione delle interrupt.
Se durante la gestione di un interrupt ne arriva un'altro quest'ultimo viene messo in coda ,la CPU infatti non gestisce gli interrupt a catena,ma in modo sequenziale . Appena termina la gestione degli interrupt la CPU riprende il suo lavoro .
Questa forma di I/O guidata dalle interruzioni è adatta al trasferimento di piccoli dati,ma pensate in caso di trasferimenti pesanti . In questo caso viene in aiuto il DMA(Direct Memory Access).Il DMA è un meccanismo che permette alla CPU di essere "sollecitata" il meno possibile . Viene infatti mandato alla CPU un interrupt "iniziale",questa delega al DMA la gestione del trasferimento in memoria (per questo accesso diretto alla memoria).
 Pensate per esempio ad una stampa di centinaia di pagine . Invece di mandare interrupt alla CPU per ogni blocco di byte,grazie al DMA viene mandato alla CPU un interrupt all'inizio e alla fine dell'operazione.

lunedì 7 marzo 2016

Stirling engine

I want to show you my Stirling engine ; it was invented by Robert Stirling who was a scottish clergyman.
.
Stirling engine is classified as external combustion engine which works through temperature difference . In fact if you look carefully this video ,you can see some candles which heat the can and the steel wool inside .

I built it with recycled materials . I hope you like my work .



.


Some scientist think that Stirling engine is the future of solar energy .
For more detailed informations you can click here : https://en.wikipedia.org/wiki/Stirling_engine

domenica 6 marzo 2016

Rappresentazione di oggetti in java

Come noto Java è un linguaggio di programmazione orientato agli oggetti, è ,dunque per noi centrale il concetto di oggetto .Vediamo in questo post come rappresentare graficamente un oggetto in Java ; Un oggetto è un istanza di una classe  . Spesso ,sopratutto per chi è alle prime armi, si tende a confondere il concetto di classe e di oggetto , vediamo di chiarirlo .
Una classe è un TIPO, è  la specificazione di un'idea che definisce il comportamento  e le caratteristiche comuni che ogni oggetto deve avere  (Per maggiori informazioni è possibile consultare il post precedente sulle classi).
Un oggetto viene creato a partire dalla classe .E' una variabile il cui tipo è definito dalla classe  e che attraverso l'operatore " . " può usufruire delle operazioni messe a disposizione da quest'ultima .
Vediamo degli esempi :

 Prendendo in considerazione la classe creata nel post "Cos'è una classe?" creiamo una variabile oggetto di tipo Automobile inizializzata al valore null . Il valore "speciale" null indica che l'oggetto non esiste,vediamone la rappresentazione grafica :

Se provassimo ad invocare un'operazione sulla variabile a , troveremmo una  eccezzione di tipo java.lang.NullPointerException .

Creiamo ora la variabile oggetto "a" attraverso l'operatore new. Si noti come il colore new è di colore diverso rispetto al resto della riga,questo significa che è parola chiave di java.

Vediamo graficamente :
E se ne modificassimo lo stato? Proviamo a"truccare" la nostra Ferrari modificandone la cilindrata  in 6000 cm^3
Come al solito aiutiamoci graficamente :
Abbiamo modificato la nostra Ferrari . Si noti che nell'ultima porzione di codice si è chiamata la stampa a video mediante il metodo println dell'oggetto out presente nella classe System . Dentro le parentesi del metodo println per stampare lo stato dell'oggetto si è fatto uso del metodo toString() già citato nel precedente post. In realtà avremmo potuto anche solo scrivere System.out.println(a) poichè java riconosce automaticamente che stiamo chiamando il toString().

Vediamo il risultato della stampa:




Per chi è nuovo nel mondo della programmazione inizialmente è molto utile disegnare un oggetto,per capirne il comportamento .

















Cos'è una classe ?

In Java , una classe non è altro che la concretizzazione di un'idea definita da metodi e attributi. Ad esempio se avete in mente un automobile ,senza troppa fantasia si può esplicitare una classe Automobile(per convenzione i nomi delle classi iniziano con lettera maiuscola). Gli attributi di questa potrebbe essere la cilindrata ,il modello,il numero di posti ,i cavalli,ecc. Le operazioni (i metodi) invece, potrebbero essere i classici metodi set e get,oppure un metodo che a partire dai cavalli ne calcola i KW . Insomma l'unico limite è esclusivamente la nostra fantasia .


E' sempre buona norma inserire il metodo String toString() in ogni classe, che è semplicemente la descrizione dello stato di un oggetto(istanza di una classe) .In realtà oltre al toString è buona norma inserire anche i metodi boolean equals (Object o) e int hashCode(),ma questo è un discorso più complesso .