Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard UNIX; Il protocollo NFS (Network File System); Sviluppo di programmi in C per la scrittura e la lettura di file da 512 MB su un hard disk remoto; Test di velocità di NFS riguardo la creazione e la lettura di file in un hard disk remoto.
Testing dellefficienza di una rete composta da 5 macchine collegate tra loro, analizzando la velocità di trasferimento dei dati tramite operazioni di lettura e scrittura. lxmaster01 lxmaster02lxmaster03lxmaster04lxmaster05 switch cisco catalyst 6000 Gigabit Ethernet Fast Ethernet fullduplex
Il linguaggio C è il linguaggio che abbiamo utilizzato per creare programmi mirati al raggiungimento dellObiettivo preposto. Venne progettato da Brian W.Kernighan e da Dennis M.Ritchie nei Bell Laboratories intorno al 1972 e divenne inizialmente famoso come linguaggio di sviluppo di UNIX. E proprio grazie alla sua flessibilità che tali programmatori lo utilizzarono per la scrittura della maggior parte delle funzioni che compongono il kernel del SO stesso, anche se ultimamente in cooperazione con la sua evoluzione detta C++ per i SO di ultima generazione. Si può definire come un linguaggio di medio livello, potente quasi come un linguaggio macchina(es. assembly)però molto meno complesso e più accessibile al programmatore. Per la progettazione di programmi in C, inoltre, si possono utilizzare editor testuali semplici come vi (già implementato in UNIX) oppure grafici come Kate o un semplice note-pad in qualsiasi SO. Per eventuali errori di tipo sintattico infine si può ricorrere ad un semplice compilatore C.
Il tipo di distribuzione Linux installata è la versione SUSE Enterprise Server 9. PRINCIPALI PROCEDURE DI INSTALLAZIONE: Partizionamento del disco di ognuna delle 5 macchine in unarea di 5GB dedicata al sistema operativo utilizzando un File System di tipo ext3 e in unarea relativamente piccola (256MB) dedicata allo swapping, che tra laltro Linux utilizza raramente; Partizionamento del disco di ognuna delle 5 macchine in unarea di 5GB dedicata al sistema operativo utilizzando un File System di tipo ext3 e in unarea relativamente piccola (256MB) dedicata allo swapping, che tra laltro Linux utilizza raramente; Settaggio delle impostazioni varie,quali Keyboard Language, Time Zone, System Language, Boot loader (di tipo GRUB o LILO); Settaggio delle impostazioni varie,quali Keyboard Language, Time Zone, System Language, Boot loader (di tipo GRUB o LILO); Impostazioni relative alla registrazione degli accounts root e user con le relative passwords; Impostazioni relative alla registrazione degli accounts root e user con le relative passwords; Scelta delle home directory dei vari utenti. Scelta delle home directory dei vari utenti.
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 la interpreta secondo uno schema di regole prefissato. In pratica rende comprensibili alla macchina i comandi che le vengono inviati. PRINCIPALI COMANDI DELLA SHELL: ls: visualizza il contenuto di una directory; cd: cambia la directory di lavoro; mkdir: crea una nuova directory; touch: crea un nuovo file; rm: cancellazione di un file; chmod: cambia i diritti di lettura,scrittura ed eseguibilità di un file; more: visualizza il contenuto di un file; su: cambia utenza; cd.. : sale al livello precedente nella struttura gerarchica del file system; ps: visualizza i nomi dei processi in esecuzione in una data shell; reboot: riavvio del sistema; ssh: prende il controllo di una macchina remota collegata in rete; find: ricerca di un file nel sistema.
Il Network File System è un protocollo sviluppato inizialmente da Sun Microsystems nel L'NFS è un file system che consente ai computer di utilizzare la rete per accedere ai dischi remoti come fossero dischi locali. NFS è spesso associato a sistemi Unix, sebbene spesso sia utilizzato anche da macchine utilizzanti i sistemi operativi Macintosh e Microsoft Windows. NFS permette ad n calcolatori che compongono un sistema distribuito di condividere file, directory od un intero file system utilizzando il protocollo client-server. Un calcolatore (client) deve richiedere esplicitamente ad un altro calcolatore (server) del sistema distribuito di condividere una directory o un file, dichiarando un punto di montaggio. Una volta effettuato un montaggio un utente sul calcolatore client accede alla directory montata in modo assolutamente trasparente, ossia accede alla directory remota credendo di accedere ad una directory locale. NFS si può pensare inoltre come uno strato superiore del famoso protocollo TCP/IP.
#include 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 programma è stato per così dire lintroduzione al linguaggio C e al suo utilizzo. Una semplice funzione che calcola il numero di parole,di blank e di caratteri presenti in un testo scritto in un file creato al momento dellesecuzione.
#include #include #define SIZE #define SIZE int main(int argc, char *argv[]) {if((argc!=3)||(atoi(argv[2])>SIZE1)){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) 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);} FILE *wp; char buffer[SIZE1]; char *bp; bp=&buffer[0]; int conv=atoi(argv[2]); int i=0,count,j=0; for(i=0; i<SIZE1; i++) buffer[i]='#'; buffer[i]='#'; int cicle=(SIZE/conv); wp=fopen(argv[1], "w"); for(i=0;i<cicle;i++) fwrite(bp,1,conv,wp); fwrite(bp,1,conv,wp); printf("\n\nWriting completed\n\n"); close(wp);}
#include #include #define SIZE #define SIZE int main(int argc, char *argv[]) { int n=10,i=0; char car='#'; 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; char buffer[SIZE1]; char *bp; bp=&buffer[0]; int bdim=atoi(argv[2]); wp=fopen(argv[1], "r"); while(n>0) {n=fread(bp,1,bdim,wp); i++;} printf("\n\n %d Reading completed...\n\n",i); close (wp); }
Test di velocità in scrittura su disco remoto con variazione di Block Size e n° di macchine. 1 client 2 clients BLOCK SIZE (byte) TIME (sec.) VELOCITA' (MB/sec) 6425,87719, ,83019, ,43819, ,73619, ,12119, ,85319, ,26018, ,47519, ,46819, ,08919, ,91619,760 BLOCK SIZE (byte) TIME 1 (sec) TIME 2 (sec) VELOCITA' MEDIA (MB/sec) 64247,904249,8142, ,69192,0152, ,825209,5252, ,727253,22, ,938178,752, ,343274,4391,87
3 clients BLOCK SIZE (byte) TIME 1 (sec) TIME 2 (sec) TIME 3 (sec) VELOCITA' MEDIA (MB/sec) ,911115, ,4420, , , ,7620, , ,521130,5560, , , ,1950, , ,781130,3110, , , ,6270,45 4 clients BLOCK SIZE (byte) TIME 1 (sec) TIME 2 (sec) TIME 3 (sec) TIME 4 (sec) VELOCITA' MEDIA (MB/sec) , , , ,1310, , , ,291161,7710, , , ,661136,2590,45
Come si è notato dalle tabelle e dai grafici relativi alle misurazioni effettuate, il Network File System v3 presenta un miglioramento rispetto alle versioni precedenti, per quanto riguarda la velocità di trasferimento in scrittura, che risulta essere costante anche al variare della dimensione del pacchetto di dati inviato (Block Size). Se da un lato però la situazione risulta essere migliore sotto questo punto di vista, dallaltro cè da dire che aumentando i client in rete si verifica un crollo delle prestazioni con un abbassamento drastico della velocità.
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 macchine. Threads Macchine VELOCITA' (MB/sec) 120,0519,5319,7118,7819,1818,5219,74 20,330,350,510,630,622,994,30 3***0,44*2,612,50 4*****0,560,46 Ciclo di scrittura … Ciclo di lettura … Threads Macchine VELOCITA' (MB/sec) 112,0912,9012,7813,4813,9214,3913,58 27,889,267,457,538,265,395,45 38,688,585,878,268,278,198,39 46,566,326,766,706,156,506,34
Lasciando invariato, invece, il Block Size ad un valore definito (nel nostro caso byte) e modificando il numero di threads, si ottengono due risultati diversi per quanto riguarda la scrittura e la lettura. Mentre nel primo caso allaumentare dei threads, la velocità aumenta visibilmente ad eccezione della rete con un solo client, nel secondo,la velocità di trasferimento si mantiene pressoché costante.