Visualizzazione post con etichetta Linux. Mostra tutti i post
Visualizzazione post con etichetta Linux. Mostra tutti i post

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.