Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo...

19

Transcript of Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo...

Page 1: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.
Page 2: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Il linguaggio di programmazione C;Il linguaggio di programmazione C;

Il Sistema Operativo Linux installato, con relativo utilizzo della Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard UNIX;shell bash attraverso i principali comandi standard UNIX;

Il protocollo NFS (Network File System);Il protocollo NFS (Network File System);

Sviluppo di programmi in C per la scrittura e la lettura di file da Sviluppo di programmi in C per la scrittura e la lettura di file da 512 MB su un hard disk remoto;512 MB su un hard disk remoto;

Test di velocità di NFS riguardo la creazione e la lettura Test di velocità di NFS riguardo la creazione e la lettura di file in un hard disk remoto.di file in un hard disk remoto.

Page 3: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Testing dell’efficienza di una rete composta da 5 macchine collegate tra Testing dell’efficienza di una rete composta da 5 macchine collegate tra loro, analizzando la velocità di trasferimento dei dati tramite operazioni di loro, analizzando la velocità di trasferimento dei dati tramite operazioni di lettura e scrittura.lettura e scrittura.

lxmaster01

lxmaster02 lxmaster03 lxmaster04 lxmaster05

switch cisco catalyst 6000

Gigabit Ethernet

Fast Ethernet fullduplex

Page 4: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Il linguaggio C è il linguaggio che abbiamo utilizzato per creare Il linguaggio C è il linguaggio che abbiamo utilizzato per creare programmi mirati al raggiungimento dell’Obiettivo preposto.programmi mirati al raggiungimento dell’Obiettivo preposto.

Venne progettato da Brian W.Kernighan e da Dennis M.Ritchie nei Bell Venne progettato da Brian W.Kernighan e da Dennis M.Ritchie nei Bell Laboratories intorno al 1972 e divenne inizialmente famoso come Laboratories intorno al 1972 e divenne inizialmente famoso come linguaggio di sviluppo di UNIX. E’ proprio grazie alla sua flessibilità che linguaggio di sviluppo di UNIX. E’ proprio grazie alla sua flessibilità che tali programmatori lo utilizzarono per la scrittura della maggior parte delle tali programmatori lo utilizzarono per la scrittura della maggior parte delle funzioni che compongono il kernel del SO stesso, anche se ultimamente funzioni che compongono il kernel del SO stesso, anche se ultimamente in cooperazione con la sua “evoluzione” detta C++ per i SO di ultima in cooperazione con la sua “evoluzione” detta C++ per i SO di ultima generazione.generazione.

Si può definire come un linguaggio di medio livello, potente quasi come Si può definire come un linguaggio di medio livello, potente quasi come un linguaggio macchina(es. assembly)però molto meno complesso e più un linguaggio macchina(es. assembly)però molto meno complesso e più accessibile al programmatore.accessibile al programmatore.

Per la progettazione di programmi in C, inoltre, si possono utilizzare editor Per la progettazione di programmi in C, inoltre, si possono utilizzare editor testuali semplici come testuali semplici come vivi (già implementato in UNIX) oppure grafici come (già implementato in UNIX) oppure grafici come KateKate o un semplice note-pad in qualsiasi SO. o un semplice note-pad in qualsiasi SO.

Per eventuali errori di tipo sintattico infine si può ricorrere ad un semplice Per eventuali errori di tipo sintattico infine si può ricorrere ad un semplice compilatore C.compilatore C.

Page 5: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Il tipo di distribuzione Linux installata è la versione “SUSE Enterprise Il tipo di distribuzione Linux installata è la versione “SUSE Enterprise Server 9”.Server 9”.

PRINCIPALI PROCEDURE DI INSTALLAZIONE:PRINCIPALI PROCEDURE DI INSTALLAZIONE:

• Partizionamento del disco di ognuna delle 5 macchine in un’area Partizionamento del disco di ognuna delle 5 macchine in un’area di 5GB di 5GB dedicata al sistema operativo utilizzando un File System dedicata al sistema operativo utilizzando un File System

di tipo di tipo ext3ext3 e in un’area relativamente piccola (256MB) dedicata e in un’area relativamente piccola (256MB) dedicata allo allo swapping, che tra l’altro Linux utilizza raramente;swapping, che tra l’altro Linux utilizza raramente;

• Settaggio delle impostazioni varie,quali Keyboard Language, Settaggio delle impostazioni varie,quali Keyboard Language, Time Zone, System Language, Boot loader (di tipo GRUB o Time Zone, System Language, Boot loader (di tipo GRUB o LILO);LILO);

• Impostazioni relative alla registrazione degli accounts Impostazioni relative alla registrazione degli accounts rootroot e e useruser con le relative passwords;con le relative passwords;

• Scelta delle Scelta delle home directoryhome directory dei vari utenti. dei vari utenti.

Page 6: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

La shell è uno dei livelli che compongono i sistemi operativi UNIX. La shell è uno dei livelli che compongono i sistemi operativi UNIX. Esegue la read (o lettura) di una linea di comando dallo standard input e Esegue la read (o lettura) di una linea di comando dallo standard input e la interpreta secondo uno schema di regole prefissato. In pratica rende la interpreta secondo uno schema di regole prefissato. In pratica rende comprensibili alla macchina i comandi che le vengono inviati.comprensibili alla macchina i comandi che le vengono inviati.

PRINCIPALI COMANDI DELLA SHELL:PRINCIPALI COMANDI DELLA SHELL:

lsls: visualizza il contenuto di una directory;: visualizza il contenuto di una directory; cdcd: cambia la directory di lavoro;: cambia la directory di lavoro; mkdirmkdir: crea una nuova directory;: crea una nuova directory; touchtouch: crea un nuovo file;: crea un nuovo file; rmrm: cancellazione di un file;: cancellazione di un file; chmodchmod: cambia i diritti di lettura,scrittura ed eseguibilità di un file; : cambia i diritti di lettura,scrittura ed eseguibilità di un file; moremore: visualizza il contenuto di un file;: visualizza il contenuto di un file; susu: cambia utenza;: cambia utenza; cd ..cd .. : sale al livello precedente nella struttura gerarchica del file system; : sale al livello precedente nella struttura gerarchica del file system; psps: visualizza i nomi dei processi in esecuzione in una data shell;: visualizza i nomi dei processi in esecuzione in una data shell; rebootreboot: riavvio del sistema;: riavvio del sistema; sshssh: prende il controllo di una macchina remota collegata in rete; : prende il controllo di una macchina remota collegata in rete; findfind: ricerca di un file nel sistema.: ricerca di un file nel sistema.

Page 7: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Il Network File System è un protocollo sviluppato inizialmente da Sun Il Network File System è un protocollo sviluppato inizialmente da Sun Microsystems nel 1984. L'NFS è un file system che consente ai computer Microsystems nel 1984. L'NFS è un file system che consente ai computer di utilizzare la rete per accedere ai dischi remoti come fossero dischi locali.di utilizzare la rete per accedere ai dischi remoti come fossero dischi locali.

NFS è spesso associato a sistemi Unix, sebbene spesso sia utilizzato NFS è spesso associato a sistemi Unix, sebbene spesso sia utilizzato anche da macchine utilizzanti i sistemi operativi Macintosh e Microsoft anche da macchine utilizzanti i sistemi operativi Macintosh e Microsoft Windows. Windows.

NFS permette ad n calcolatori che compongono un sistema distribuito di NFS permette ad n calcolatori che compongono un sistema distribuito di condividere file, directory od un intero file system utilizzando il protocollo condividere file, directory od un intero file system utilizzando il protocollo client-server. Un calcolatore (client) deve richiedere esplicitamente ad un client-server. Un calcolatore (client) deve richiedere esplicitamente ad un altro calcolatore (server) del sistema distribuito di condividere una altro calcolatore (server) del sistema distribuito di condividere una directory o un file, dichiarando un punto di montaggio. Una volta effettuato directory o un file, dichiarando un punto di montaggio. Una volta effettuato un montaggio un utente sul calcolatore client accede alla directory un montaggio un utente sul calcolatore client accede alla directory montata in modo assolutamente trasparente, ossia accede alla directory montata in modo assolutamente trasparente, ossia accede alla directory remota credendo di accedere ad una directory locale.remota credendo di accedere ad una directory locale.

NFS si può pensare inoltre come uno strato superiore del famoso NFS si può pensare inoltre come uno strato superiore del famoso protocollo TCP/IP. protocollo TCP/IP.

Page 8: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

#include <stdio.h>#include <string.h>#include <curses.h>int main (int argc, char *argv[]){

FILE *wp;int blank=0;int car=0;char a=' ';int words=0;int cont=0;

if(argc!=2){ printf("\nSintax error! - Correct sintax: counter filename \n\n");

exit(-1);}wp=(fopen(argv[1], "w"));

while(a){

if(a==EOF){ if((car==0)&&(blank==0)&&(words==0)) printf("\n\nEmpty file...\n\n");

printf("\n\n#Characters are: %d \n\n",car);printf("\n\n# Blanks are: %d \n\n",blank);

printf("\n\n#Words are: %d \n\n",words);exit(-1);

}fputc(a=getchar(),wp);if((a!=' ')&&(a!=EOF)&&(a!='\n')){ car++;

cont++;}

if(a==' ') blank++;

if(((a==' ')||(a=='\n')||(a==EOF))&&(cont!=0)){ cont=0;

words++; }

}}

Questo Questo programma è programma è stato per così stato per così dire dire l’introduzione al l’introduzione al linguaggio C e al linguaggio C e al suo utilizzo. Una suo utilizzo. Una semplice semplice funzione che funzione che calcola il numero calcola il numero di parole,di blank di parole,di blank e di caratteri e di caratteri presenti in un presenti in un testo scritto in un testo scritto in un file creato al file creato al momento momento dell’esecuzione.dell’esecuzione.

Page 9: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

#include <stdio.h>#include <stdio.h>#include <string.h>#include <string.h>#include <curses.h>#include <curses.h>#define SIZE 512024576#define SIZE 512024576#define SIZE1 65536#define SIZE1 65536int main(int argc, char *argv[])int main(int argc, char *argv[]){{

if((argc!=3)||(atoi(argv[2])>SIZE1))if((argc!=3)||(atoi(argv[2])>SIZE1)){{

if(argc!=3)if(argc!=3) printf("\n\nWrong Sintax ! Correct Sintax: fcreate OutputFile BlockSize\n\n");printf("\n\nWrong Sintax ! Correct Sintax: fcreate OutputFile BlockSize\n\n");

if(atoi(argv[2])>SIZE1)if(atoi(argv[2])>SIZE1) printf("\n\nBlockSize too long. It must be <= %d\n\n",SIZE1);printf("\n\nBlockSize too long. It must be <= %d\n\n",SIZE1);

exit(-1);exit(-1);}}FILE *wp;FILE *wp;char buffer[SIZE1];char buffer[SIZE1];char *bp;char *bp;bp=&buffer[0];bp=&buffer[0];int conv=atoi(argv[2]);int conv=atoi(argv[2]);int i=0,count,j=0;int i=0,count,j=0;for(i=0; i<SIZE1; i++)for(i=0; i<SIZE1; i++) buffer[i]='#';buffer[i]='#';

int cicle=(SIZE/conv);int cicle=(SIZE/conv);wp=fopen(argv[1], "w");wp=fopen(argv[1], "w");

for(i=0;i<cicle;i++)for(i=0;i<cicle;i++) fwrite(bp,1,conv,wp);fwrite(bp,1,conv,wp);

printf("\n\nWriting completed\n\n");printf("\n\nWriting completed\n\n");close(wp);close(wp);

}}

Page 10: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

#include <stdio.h>#include <stdio.h>#include <string.h>#include <string.h>#include <curses.h>#include <curses.h>#define SIZE1 65536#define SIZE1 65536#define SIZE 512024576#define SIZE 512024576int main(int argc, char *argv[])int main(int argc, char *argv[]){{

int n=10,i=0;int n=10,i=0;char car='#';char car='#';

if((argc!=3)||(atoi(argv[2])>SIZE1))if((argc!=3)||(atoi(argv[2])>SIZE1)){{

if(argc!=3)if(argc!=3) printf("\n\nWrong Sintax ! Correct Sintax: fread InputFile BlockSize\n\n");printf("\n\nWrong Sintax ! Correct Sintax: fread InputFile BlockSize\n\n"); if(atoi(argv[2])>SIZE1)if(atoi(argv[2])>SIZE1)

printf("\n\nBlockSize too long. It must be <= %d\n\n",SIZE1);printf("\n\nBlockSize too long. It must be <= %d\n\n",SIZE1); exit(-1);exit(-1);

}}

FILE *wp;FILE *wp;char buffer[SIZE1];char buffer[SIZE1];char *bp;char *bp;bp=&buffer[0];bp=&buffer[0];int bdim=atoi(argv[2]);int bdim=atoi(argv[2]);wp=fopen(argv[1], "r");wp=fopen(argv[1], "r");while(n>0)while(n>0){{ n=fread(bp,1,bdim,wp);n=fread(bp,1,bdim,wp);

i++;i++;} } printf("\n\n %d Reading completed...\n\n",i);printf("\n\n %d Reading completed...\n\n",i);close (wp); close (wp);

}}

Page 11: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Test di velocità in scrittura su disco remoto con variazione di Block Test di velocità in scrittura su disco remoto con variazione di Block Size e n° di macchine.Size e n° di macchine.

1 client

2 clients

BLOCK SIZE (byte)

TIME (sec.)

VELOCITA' (MB/sec)

     

64 25,877 19,790

128 26,830 19,080

256 26,438 19,370

512 26,736 19,150

1024 26,121 19,600

2048 26,853 19,070

4096 27,260 18,780

8192 26,475 19,340

16348 26,468 19,350

32768 26,089 19,630

65536 25,916 19,760

BLOCK SIZE (byte)

TIME 1 (sec)

TIME 2 (sec)

VELOCITA' MEDIA (MB/sec)

       

64 247,904 249,814 2,06

128 187,69 192,015 2,70

256 212,825 209,525 2,42

16348 249,727 253,2 2,04

32768 182,938 178,75 2,83

65536 274,343 274,439 1,87

Page 12: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

3 clients

BLOCK SIZE (byte)

TIME 1 (sec)

TIME 2 (sec)

TIME 3 (sec)

VELOCITA' MEDIA (MB/sec)

         

64 1116,91 1115,733 1116,442 0,46

128 1120,672 1120,277 1119,762 0,46

256 1132,208 1131,52 1130,556 0,45

16348 1140,314 1139,697 1139,195 0,45

32768 1131,114 1130,78 1130,311 0,45

65536 1127,831 1127,264 1126,627 0,45

4 clients

BLOCK SIZE (byte)

TIME 1 (sec)

TIME 2 (sec)

TIME 3 (sec)

TIME 4 (sec)

VELOCITA' MEDIA (MB/sec)

           

64 1131,356 1131,069 1129,438 1130,131 0,45

128 1163,415 1162,886 1162,29 1161,771 0,44

256 1138,117 1137,728 1136,66 1136,259 0,45

Page 13: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

64,0

00

128,0

00

256,0

00

512,0

00

1024,0

0

2048,0

0

4096,0

0

8192,0

0

16348,0

32768,0

65536,0

0

2

4

6

8

10

12

14

16

18

20

Velo

cit

à (

MB

/sec)

Block Size (byte)

Velocità in scrittura con variazione del Block Size e del numero di clients

4 clients

3 clients

2 clients

1 client

Page 14: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Come si è notato dalle tabelle e dai grafici relativi Come si è notato dalle tabelle e dai grafici relativi alle misurazioni effettuate, il Network File System alle misurazioni effettuate, il Network File System v3 presenta un miglioramento rispetto alle v3 presenta un miglioramento rispetto alle versioni precedenti, per quanto riguarda la versioni precedenti, per quanto riguarda la velocità di trasferimento in scrittura, che risulta velocità di trasferimento in scrittura, che risulta

essere costante anche al variare della dimensione del pacchetto di dati essere costante anche al variare della dimensione del pacchetto di dati inviato (Block Size). Se da un lato però la situazione risulta essere inviato (Block Size). Se da un lato però la situazione risulta essere migliore sotto questo punto di vista, dall’altro c’è da dire che aumentando migliore sotto questo punto di vista, dall’altro c’è da dire che aumentando i client in rete si verifica un crollo delle prestazioni con un abbassamento i client in rete si verifica un crollo delle prestazioni con un abbassamento drastico della velocità.drastico della velocità.

Page 15: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Test di velocità in scrittura e in lettura su disco remoto con valore di Test di velocità in scrittura e in lettura su disco remoto con valore di Block Size fisso (65536 byte) e variazione del n° di threads e n° di Block Size fisso (65536 byte) e variazione del n° di threads e n° di macchine.macchine.

Threads 4 6 8 12 16 20 24

MacchineVELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)

1 20,05 19,53 19,71 18,78 19,18 18,52 19,74

2 0,33 0,35 0,51 0,63 0,62 2,99 4,30

3 * * * 0,44 * 2,61 2,50

4 * * * * * 0,56 0,46

Ciclo di scrittura …Ciclo di scrittura …

Ciclo di lettura …Ciclo di lettura …Threads 4 6 8 12 16 20 24

MacchineVELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)VELOCITA'

(MB/sec)

1 12,09 12,90 12,78 13,48 13,92 14,39 13,58

2 7,88 9,26 7,45 7,53 8,26 5,39 5,45

3 8,68 8,58 5,87 8,26 8,27 8,19 8,39

4 6,56 6,32 6,76 6,70 6,15 6,50 6,34

Page 16: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

46

812

1620

24

0

5

10

15

20

25

Ve

loc

ità

(M

B/s

ec

)

Threads

Velocità di scrittura con variazione del numero di Threads e clients, e Block Size costante (65536 byte)

4 client

3 client

2 client

1 client

Page 17: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

46

812

1620

24

0

2

4

6

8

10

12

14

16

Velo

cit

à (

MB

/sec)

Threads

Velocità di lettura con variazione del numero di Threads e clients, e Block Size costante (65536 byte)

4 client

3 client

2 client

1 client

Page 18: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.

Lasciando invariato, invece, il Block Size ad Lasciando invariato, invece, il Block Size ad un valore definito (nel nostro caso 65536 un valore definito (nel nostro caso 65536 byte) e modificando il numero di threads, si byte) e modificando il numero di threads, si ottengono due risultati diversi per quanto ottengono due risultati diversi per quanto riguarda la scrittura e la lettura. Mentre nel riguarda la scrittura e la lettura. Mentre nel

primo caso all’aumentare dei threads, la velocità aumenta primo caso all’aumentare dei threads, la velocità aumenta visibilmente ad eccezione della rete con un solo client, nel visibilmente ad eccezione della rete con un solo client, nel secondo,la velocità di trasferimento si mantiene pressoché costante. secondo,la velocità di trasferimento si mantiene pressoché costante.

Page 19: Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.