23/04/16

Les 7 couches du modele OSI et leurs fonctions


OSI – Open Systems Interconnection:  “est un modèle de communications entre ordinateurs. Il décrit les fonctionnalités nécessaires à la communication et l’organisation de ces fonctions” dixit toujours Wikipedia.

il permet de simplifier la comprehension du réseau. lorsque je tape une URL sur mon browser,  ma carte réseau envoi des paquets dans le réseau pour récuperer la page.

                                       LES 7 COUCHES DU MODELE OSI

le schema suivant illustre le modele OSI
Chaque couche est théoriquement indépendante des autres couches .Il est très important de connaitre ce modèle si vous voulez faire  le CCNA.
  • On parle de trame de données (en anglais frame) lorsque la couche niveau 2 (appelé liaison d’accès) discute avec son homologue
  • On parle de paquet de données (en anglais packet) lorsque la couche niveau 3 (appelé réseau) discute avec son homologue
  • On parle de segment de données (idem en anglais) lorsque la couche niveau 4 (appelé transport) discute avec son homologue

                              DETAIL ET FONCTIONS DES COUCHES

COUCHE 1- PHYSIQUE

elle décrit les moyens mécaniques,électriques,fonctionnels et méthologiques permettant d'activer, de gérer,et de désactiver des connexions physiques pour la transmission des bits vers et depuis un péripheriques réseau. entre autre , cette couche se charge de la transmission et la réception des données informatique au format binaire (0 et 1).

COUCHE 2- LIAISON DE DONNEES

Cette couche définit comment la transmission des données est effectuée entre 2 machines adjacentes. Par exemple, un PC connecté à un switch, une imprimante connecté à un switch, deux routeurs connectés entre eux…
La notion d’adressage physique est présente. Quand votre carte réseau récoit des 0 et des 1, il faut qu’elle vérifie si c’est bien pour vous. Par exemple pour la technologie Ethernet, on parle d’adresse MAC – Medium Access Control. Votre carte réseau a une adresse MAC qui l’identifie dans le réseau.
Cette couche gère aussi la détection d’erreur de transmission. Par exemple, quand l’émetteur envoi la séquence 11001 et le destinataire récoit 11011, la couche va le détecter.
Pour ethernet, la séquence de données envoyée par l’émetteur est appelé une trame (ou frame en anglais)

COUCHE 3 -RESEAU

La couche 3 fournit des services pour échanger les parties des données individuelles sur le réseau entre les péripheriques finaux identifiés.
La couche 3 va aussi se charger de trouver le meilleur chemin pour acheminer les données jusqu’à la destination.
Aujoud’hui, l’adressage logique utilisée est le protocole IP et la sélection du meilleur chemin s’effectue par les routeurs avec l’aide des protocoles de routage (RIP, OSPF, BGP…)

COUCHE 4-TRANSPORT

Cette couche se charge de plusieurs fonctionnalités essentielles:
  • gère les problème de transport entre les machines (c’est toujours plus sympa si je reçoi un mail en entier)
  • et donc fiabilise les communications (si on perd des données, on demande une retransmission des données manquantes)
  • gère le contrôle de flux (vous téléchargez plus vite quand vous êtes sur du 100Mb/s que sur 2Mb/s… merci à cette couche)
  • fait le lien entre les communications réseaux et les applicatifs (je peux avoir mon browser ouvert en même temps que ma messagerie et mon téléchargement de fichier)
COUCHE 5 -SESSION

Cette couche gère l’ouverture et la fermeture des sessions entre inter-applicatif et intra-applicatif (avec mon browser, je peux ouvrir plusieurs onglets).

COUCHE 6- PRESENTATION

cette couche permet une représentation commune des données transférés entre des services de couche application.

COUCHE 7- APPLICATION 

Cette couche fait l’interface entre l’homme et la machine. Votre browser (firefox, safari,chrome…), votre logiciel de messsagerie (outlook, thunderbird…) sont des applications.

18/04/16

Come cambiare la lingua di interfaccia di Visual Studio

Benché sia consigliabile usare Visual Studio in inglese per l'ovvio motivo che chi programma deve anche saper l'inglese, qualcuno potrebbe volere  usarlo in italiano per un motivo o per un altro. In ogni caso c'e' sempre la possibilità di modificarla ogni volta che vogliamo.


Se qualcuno volesse usare Visual Studio in una determinata lingua, l'ideale sarebbe di scaricarla direttamente nella lingua desiderata,  per fare ciò,   ora basta  che il sito della Microsoft sia in italiano per avere il pacchetto già nella lingua italiana. All'esempio di questa immagine sotto.



dopo aver scaricato, il file dovrebbe avere  come suffisso  _IT per la versione community oppure _IT per la versione Professional (richiede la licenza)


Pero, se per esempio devo passare dall'italiano all'inglese per esempio, ove il pacchetto delle lingue sia già installato, devo andare nella finestra principale di Visual Studio, (con tutte le soluzioni chiuse)
TOOL > options > international settings > Languages  > Italiano.



Nel caso in cui non si vede l'italiano, questo significa che  il pacchetto lingua non e installato, recarsi all'indirizzo seguente e scaricare la  Microsoft Visual Studio Language Park. Languore il file .exe e seguire tutti i passaggi avendo cura di avere chiuso visual studio se l'esecuzione era in corso .






13/04/16

Come virtualizzare il sistema Linux sul mac



VirtualBox  Consente di girare interamente un sistema  operativo in un  altro sistema operativo
VirtualBox alla differenza di altri sistemi di virtualizzazione e' cross-platform, ovvero  può essere ospitato su vari sistemi quali Windows, OS X, UNIX, LINUX. Questa e' la principale peculiarità che fa preferire VirtualBox ad altri programmi, oltre al fatto che ovviamente e assolutamente gratuito.
Per installare  VirtualBox, per  OS X  configurarlo, e ospitarvi un sistema linux linux, scaricare qui il pacchetto .dmg  e seguire  la guida completa per l'istallazione e la configurazione.
bisogna inoltre tenere presente che  e' consigliabile almeno 1GB di memoria Ram per poter fare girare linux sul Mac
                   


Parallels desktop  e' uno dei primi software sul mercato dedicati alla virtualizzazione di altri sistemi sul mac subito dopo l'adozione dei processori intel da parte dei computer Apple,  e' un programma fatto benissimo, che se istallato e configurato correttamente, una volta sulla macchina virtuale non ci accorgiamo neanche.
ora recarsi a Scaricare qui l'ultima versione di Parallels Desktop for Mac, e seguire questa guida per installarlo. una volta fatto l'installazione, scaricare  scaricare il sistema operativo Linux desiderato
(Ubuntu, Fedora, Red Hat, Cent Os, etc.. etc.. )



VMware Fusion

08/04/16

[C] Esercizio svolto: Uso delle funzioni sleep(), fork(), wait(), perror().

Esercizio 1:
Scrivere un programma in C  che crea 10 figli con la fork(), ogni figlio aspetta 5 secondi e termina la propria esecuzione, il padre invece deve aspettare che tutti i processi figli terminino e termina a sua volta.

Soluzione:

Richiami:
fork() :
questa funzione crea un processo figlio,  identico al processo chiamante, nel senso che a partire dal momento i cui viene chiamato, sia il processo figlio che il processo padre (chiamante ) condividono lo stesso codice e si eseguono in parallelo.  La fork(), restituisce zero al figlio e il PID del figlio lo restituisce al padre

PID:
Process ID, numero identificativo di ogni processo in esecuzione.
sleep(secondi):
Mette il processo chiamante in attesa del tempo pari a l'argomento in secondi.
wait():
blocca l'esecuzione il processo  chiamante fino a quando tutti i figli hanno terminato la loro esecuzione.
exit():
Forza la terminazione del processo chiamante
getpid():
questa funzione estrae il PID del processo che l'ha chiamato.


La strategia é quella di creare un ciclo for, e, a ogni giro  creare un processo figlio e farlo terminare  prima di andare al giro  successivo, altrimenti si creerebbero (2^N)-1. dopodiché  fare una wait affinché in padre aspetta che il figlio corrente termini prima che il flusso di esecuzione della for, vada al giro seguente.

la soluzione é dato da questo listato:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define N 10

int main ()
{   
    int pid, i;
    for(i = 0; i < N; i++)
    {
        if ((pid = fork()) == 0) /* i-esimo processo figlio*/
        {
            printf("Step %d: my pid is: %d\n", i, getpid());
            sleep(5);
            exit(0);
        }
        else /* processo padre */
        {
          wait();
        }    
    }/*end for*/

}



L'output é il seguente: 
Step 0: my pid is: 7220
Step 1: my pid is: 7236
Step 2: my pid is: 7252
Step 3: my pid is: 7265
Step 4: my pid is: 7281
Step 5: my pid is: 7297
Step 6: my pid is: 7313
Step 7: my pid is: 7329
Step 8: my pid is: 7345
Step 9: my pid is: 7361

Esercizio 2:
modificare il listato 1 in mode che il processo padre termina dopo la creazione del secondo figlio.

[C] Esercizio svolto: Uso della funzione getpid().

Esercizio:
Scrivere un programma in C (in ambiente Linux) che crea un processo figlio con la fork,  il processo figlio deve stampare a video il proprio PID, mentre il processo padre deve stampare sia il suo PID che quello del figlio appena creare.

Soluzione:


richiami:


PID:
Process ID, numero identificativo di ogni processo in esecuzione.

la fork() :

questa funzione crea un processo figlio,  identico al processo chiamante, nel senso che a partire dal momento i cui viene chiamato, sia il processo figlio che il processo padre (chiamante ) condividono lo stesso codice e si eseguono in parallelo.
La fork(), restituisce zero al figlio e il PID del figlio lo restituisce al padre

getpid():
questa funzione estrae il PID del processo che l'ha chiamato.

il codice é il seguente:


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main ()
{   
    int pid;
    pid = fork();
        if (pid < 0) {
        printf("Something went wrong during the process creation");
        exit(-1);
        }
        if (pid == 0){
             printf("I'm a child and my pid is:   %d\n",  getpid() );
             exit(0);
         }//end if
    printf("I'm a parent and my pid is : %d\n", getpid());
    printf("I'm a parent and the child  pid is : %d\n", pid);


    return 0;  

}

L'output del programma é il seguente:


I'm a parent and my pid is : 20969
I'm a child and my pid is:   20970
I'm the parent and the child pid is: 20970
NOTA: notate come la seconda printf viene eseguita prima della prima, questo  e molto significativo perché il processo figlio e padre si eseguono in parallelo.

[C-LINUX] Cos'e la funzione fork(), e come si usa.

07/04/16

Recuperare il valore di ritorno di un processo figlio

Uso di exit() , e  della macro  WEXITSTATUS  per catturare il valore di ritorno di un processo figlio quando termina .


questo programma crea N processi figli in parallelo, ogni figlio calcola per conto suo la potenza: 2 alla i-esima iterazione, questo può essere utile per esempio per calcolare la sommatoria delle potenze di 2.  

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define N 5


//questo programma crea N processi figli in paralello.
//ogni processo figlio creato fa una cosa e fa la exit.

int result;
int main ()
{
    int status, pid, i,  sum = 0;
    for (i = 0; i < N; i++)
    {   
         pid = fork();
         if (pid == 0){
             printf("Step %d:", i);
             result = power(2, i);
             printf("The partial result is: %d\n", result );
             exit(result);
         }

        wait(&status);
        printf("Valore di ritorno del figlio: = %d \n", WEXITSTATUS(status));

    }

}
Modifichiamo il programma per  calcolare appunto la sommatoria delle  N prime potenze di 2, 



#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define N 5




int result;
int main ()
{
    int status, pid, i,  sum = 0;
    for (i = 0; i <= N; i++)
    {   
         pid = fork();
         if (pid == 0){
             printf("Step %d:", i);
             result = power(2, i);
             printf("The partial result is: %d\n", result );
             exit(result);
         }//end if

        wait(&status);

        sum = sum + WEXITSTATUS(status);
    }//end for 
    printf("the sum is: %d \n", sum);

}

int power(int b, int e)
{ 
    int result =1;
    int i;

    for (i =1; i<=e; i++)
    result=result*b;
    return result;

}