lunedì 23 maggio 2016

Cos'è un firewall?

Sentiamo sovente parlare di firewall,di configurare un firewall e cosi via. Ma cos'è veramente un firewall in termini spiccioli? 
Un firewall(muro di protezione) è un modulo software o anche hardware posto tra un sistema affidabile e uno inaffidabile . Generalmente, il sistema non fidato è considerato internet(rete esterna) e il sistema fidato è considerato una rete locale (LAN) . Il firewall limita l'accesso di rete tra questi due domini,controlla e registra tutte le connessioni e al limite,a seconda della configurazione, potrebbe anche bloccarle . 
In alcuni casi è possibile prevedere  una rete parzialmente fidata ,detta zona smilitarizzata ,DMZ(demilitiarized zone).
Questo terzo dominio contiene sistemi che devono essere isolati dalla rete interna(cosi' da mantenerne l'integrità), ma che hanno bisogno di comunicare con l'esterno . Si pensi ad esempio ad un web server. 
In questo schema le connessioni sono consentite da internet ai calcolatori della DMZ e dalla rete locale alla rete internet,ma non da internet alla rete locale e ne dalla DMZ alla rete locale.



 

venerdì 13 maggio 2016

Traduttore testo-binario

Vi siete mai chiesti come suona il vostro nome in codice binario? Probabilmente no ,ma, se per eccesso di curiosità siete "ansiosi" di tradurre un testo in binario ,metto a disposizione una semplice GUI che realizza questo compito :

Ecco come si presenta la GUI


In realtà non si tratta di una vera e propria interpretazione da testo a binario ,ma , il tutto consiste in una traduzione dei caratteri(che compongono la stringa) in un numero univoco  secondo l'alfabeto Unicode. Questo numero viene poi tradotto in binario. Quindi,ricapitolando, è una traduzione da testo ad Unicode,e da Unicode a binario. 
Per chi non lo sapesse l'alfabeto Unicode è un sistema di codifica del testo,che assegna un numero ad ogni carattere .

mercoledì 11 maggio 2016

Memoria virtuale: Come facilita la vita dei programmatori?

Per permettere la multiprogrammazione è necessario caricare più processi possibile in memoria .Ma non è necessario che l'intero processo si trovi completamente in RAM per essere eseguito ; difatti, i processi non vengono mai caricati interamente in memoria centrale, ma "a pezzi". Lo stesso ragionamento è valido per il sistema operativo ad esempio.
Chi è avvezzo alla programmazione non avrà difficoltà ad immaginare questa situazione : si pensi per esempio ad un programma che contiene codice per gestire delle eccezioni o situazioni di errore. Spesso,sono porzioni di codice che verranno eseguite raramente e quindi non è necessario avere sempre il relativo codice in memoria. Insomma anche nei casi in cui è necessario disporre di tutto il programma è possibile che non serva tutto in una volta . Inoltre,per il principio di località  se la CPU sta eseguendo una certa istruzione,probabilmente la prossima istruzione ad essere eseguita sarà nelle vicinanze di quella correntemente in esecuzione.
Questo meccanismo di caricare "a pezzi" un programma è permesso dalla memoria virtuale.
Cos'è la memoria virtuale?
 La memoria virtuale è una tecnica che permette di eseguire i processi che possono anche non essere completamente in memoria . Non è altro che un meccanismo di separazione tra la memoria logica com'è vista dall'utente dalla memoria fisica . Cosi facendo i programmi possono essere anche più grandi della memoria fisica ,tanto vengono caricati a pezzi e quando si ha bisogno del "pezzo" non caricato in memoria ,ma che risiederà bensi' sul disco(page fault),lo si carica,oppure lo si rimpiazza con un altro pezzo di processo in memoria centrale se questa è piena(esistono degli appositi algoritmi di rimpiazzo delle pagine) . Questa tecnica ,inoltre, permette di aumentare il grado di multiprogrammazione poichè ogni programma ha bisogno di meno memoria fisica e questo permette di caricare più programmi in memoria,ottenendo una maggiore produttività della CPU senza aumentarne il tempo di risposta(http://zangariappunti.blogspot.it/2016/04/scheduling-della-cpu.html).L'unico svantaggio di questo meccanismo è di non essere semplice da realizzare e può ridurre le prestazioni del sistema .



Tornando a noi...
Ora,dovrebbe essere semplice rispondere alla domanda posta nel titolo del post (Come facilita la vita dei programmatori?). La risposta è semplice, questi, infatti non necessitano affatto di preoccuparsi della quantità di memoria fisica disponibile per i motivi sopra citati.
La  memoria virtuale viene realizzata per tramite della paginazione su richiesta . Con questa i "pezzi dei processo" ,di cui parlavo prima ,si dicono pagine e chi si occupa di "spostare" le pagine da memoria a disco e viceversa ,è il paginatore.

domenica 8 maggio 2016

Systems of Linear Equations : Gaussian algorithm in java

Gaussian elimination(named after Carl Friedrich Gauss) is an algorithm for solving systems of linear equations . It consists to trasform a matrix into an upper triangular matrix . 
In this post I propose you a small java application that solves linear equations using gaussian algorithm. 
If you click here,you can download the jar file of the application : Gaussian elimination

How does it work?
As soon as you open the application , you will see a window dialog that will ask you the number of linear equations .


Insert the equation number and click the button "OK". After that, you have to insert  the coefficient of the " n "  variables of the system :

Then ,click the button "Calculate".
Here's an example:
Let's consider this system of linear equations:

Solutions will be :