Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010...

13
1‐03‐2010 1 Laboratorio di reti Associato al corso teorico di Reti di Calcolatori tenuto dal Prof. Roberto De Prisco Anno Accademico 2009‐2010 Introduzione Informazioni Docente: Paolo D’Arco Ufficio n. 45, quarto piano, stecca 7 hGp://www.dia.unisa.it/professori/paodar/ Giorno, Orario e luogo delle lezioni Giovedi, dalle 9:00 alle 12:00, Lab. P13 Corso per matricole congrue a 0 Materiale del corso hGp://www.dia.unisa.it/professori/paodar/labreR2010.html

Transcript of Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010...

Page 1: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

1

Laboratorio di reti Associato al corso teorico di Reti di Calcolatori

tenuto dal Prof. Roberto De Prisco

AnnoAccademico2009‐2010Introduzione

Informazioni

•  Docente:PaoloD’Arco– Ufficion.45,quartopiano,stecca7– hGp://www.dia.unisa.it/professori/paodar/

•  Giorno,Orarioeluogodellelezioni– Giovedi,dalle9:00alle12:00,Lab.P13

•  Corsopermatricolecongruea0

•  Materialedelcorso–  hGp://www.dia.unisa.it/professori/paodar/labreR2010.html

Page 2: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

2

Modalitàd’esame

•  ProvapraRcainlaboratorio– Implementazionediunapiccolaapplicazioneclient‐server

•  Il superamento della prova è condizionenecessaria al superamento dell’esame di ReRdicalcolatori– Provasuperatavalidaperunanno

ContenuRdelcorso

Page 3: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

3

ObieVvo

•  Imparareascriveresempliciprogrammiperlacomunicazionesuunaretedicalcolatori

•  Assunzione– Sapetegiàprogrammare,avetefamiliaritàconunSO…

•  Ambientedisviluppo– Linux– CompilatoreC– SocketAPI

Comandi

Useremoterminalitestuali

Nonuseremoildesktopgrafico

Page 4: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

4

TerminaleTestuale

•  Terminaletestuale– Lineedicomando– Prompt

•  Comandi– ls,cd,pwd,cp,rm,mv,cat,mkdir– man<comando>

macbook‐di‐paolo‐darco:~pd>cdCorsi/ReR/Lab2009/CODLEZ/macbook‐di‐paolo‐darco:CODLEZpd>

Interpretedeicomandi

•  Shell– Èilprogrammacheinterpretaicomandi

•  BASH– ÈlashellstandarddiLinux– Echo$SHELL

macbook‐di‐paolo‐darco:~pd>echo$SHELL/bin/bashmacbook‐di‐paolo‐darco:~pd>

Page 5: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

5

EdiRng

•  Editordifile– vi– emacs

•  Occorreimparareadusareuneditor– Bastailminimoindispensabile

•  Manuali– UnaricercasuInternetvifornirànumerosefonR– “manualeeditorvi”

CodiceC#include <stdio.h>

int main(int argc, char **argv) { union { short s; char c[sizeof(short)]; } un;

un.s = 0x0102; printf("CPU = %s - byte ordering: ",getenv("CPU"));

if (sizeof(short) == 2) { if ( un.c[0] == 1 && un.c[1] == 2 ) printf ("big-endian\n"); else if ( un.c[0] == 2 && un.c[1] == 1 ) printf ("little-endian\n"); else printf("unknown\n"); } else printf("size of short: %d.\n",sizeof(short));

exit(0); }

Page 6: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

6

  Compilareunprogrammasignifica1. trasformareilsorgenteCincodiceoggeGo2. collegaretalecodiceoggeGoconlelibrerie(link)

•  gcc(GNUCCompiler)•  gccprog.c (outputina.out)•  gcc–oprogprog.c(outputinprog)•  gcc‐g‐O0‐Werror –O–DDEBUG...(opzionivarie)

Compilazione

FilemulRplielibrerie

• UnprogrammapuòavereunastruGuracomplessa• main.c• invocafunzionidilibreriadelsistemaoperaRvo(e.g.,prin4)• invocafunzionidefinitedall’utenteememorizzateinfunc1.c,func2.c,func3.cefunc4.c• protoRpiin“myfunc.h”

• Occorreincludereall’iniziodelmain.c

#include<stdio.h> (/usr/include//usr/lib/include/) #include"myfunc.h” (directorylocale)

affinchèilcompilatoretroviiprotoRpidellefunzioniinvocate

Page 7: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

7

• illinkerrecuperaautomaRcamenteilcodiceoggeGodellefunzionidilibreriadelsistemanelledirectory

/usr/libe/usr/local/lib

• l’utentepuòcompilareseparatamentelesuefunzioni,e.g.,

gcc‐cfunc1.ofunc1.c (creailfileoggeGofunc1.o)

• compilaremain.cpassandoalcompilatoreimoduliogge=oconlepropriefunzioni

gccmain.c‐omainfunc1.ofunc2.ofunc3.ofunc4.o

• addiriGural’utentepotrebbecreareproprielibreriedifunzioni,usandocomandidelSO(e.g.,ar)perraccoglierediversimodulioggeGo,efornirealcompilatoreladirectorycheconRenelalibreria

gcc‐omainmain.c‐LMylibdir

Conclusione:ilprocessodicompilazionepuòdiventarecomplesso,tediosoefacilmentesogge=o

aderrori!Vogliamounavitapiùsemplice!

Page 8: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

8

Comandomake

Idea: Raccogliamo le direVve di compilazione in un unico file, denominatoMakefileomakefile,einvochiamounnuovocomando,make,cheleggeilfilee, a sua volta, invoca il compilatore gcc esaGamente quanto serve e con leopzionigiuste.

Grafodelledipendenze

Makefile

• Codificailgrafodelledipendenze

a.out:file1.ofile2.o gccfile1.ofile2.o

file1.o:file.hfile1.c gcc‐cfile1.c

file2.o:file.hfile2.c gcc‐cfile2.c

target:sourcefile(s) command (dopounTAB)

Sintassicomandi

Ognivoltacheunsourcefilehaunadatadimodificapiùrecentediquelladeltargetfile,iltargetfilevieneaggiornatoeseguendoilcomandospecificato

Page 9: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

9

NostroMakefile#Makefile

CFLAGS=‐g‐O0‐Werror‐cOFLAGS=‐g‐O0‐Werror–o

fun‐corso‐reR.o:fun‐corso‐reR.cgcc$(CFLAGS)fun‐corso‐reR.c

.c:fun‐corso‐reR.o@echocompiling$<withrule1gcc$<$(OFLAGS)$@fun‐corso‐reR.o

clean:rm‐f*~rm‐f*.o

macbook‐di‐paolo‐darco:CODLEZpd$lsMakefile byteorder.c fun‐corso‐reR.cbasic.h byteorder.dSYMmacbook‐di‐paolo‐darco:CODLEZpd$makegcc‐g‐O0‐Werror‐cfun‐corso‐reR.cmacbook‐di‐paolo‐darco:CODLEZpd$makebyteordercompilingbyteorder.cwithrule1gccbyteorder.c‐g‐O0‐Werror‐obyteorderfun‐corso‐reR.omacbook‐di‐paolo‐darco:CODLEZpd$lsMakefile byteorder.c fun‐corso‐reR.obasic.h byteorder.dSYMbyteorder fun‐corso‐reR.cmacbook‐di‐paolo‐darco:CODLEZpd$makecleanrm‐f*~rm‐f*.omacbook‐di‐paolo‐darco:CODLEZpd$lsMakefile byteorder byteorder.dSYMbasic.h byteorder.c fun‐corso‐reR.cmacbook‐di‐paolo‐darco:CODLEZpd$

Esempiod’uso

Page 10: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

10

Insintesi

• Useremoilcomandomakepercompilare

• Useremounfile,fun‐corso‐reH.c,checonRenefunzioniuRli

• Useremounfile,basic.h,cheraccogliereheaderfileemacro

• Ifile:Makefile,fun‐corso‐reR.cebasic.hlitrovatesullapaginadelcorso

fun‐corso‐reR.c

•  DefiniscevariefunzioniperlaleGuraescriGuradeisocket

•  Convenzionesulnome–  reR_nomefunzione

•  Funzionidisponibili–  reH_readn

•  LeggeesaGamentenbyte–  reH_writen

•  ScriveesaGamentenbyte–  reH_readline

•  Leggeunariga(cheterminacon\n)

•  DeGaglinelfilefun‐corso‐reR.c

Page 11: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

11

#ifndef __BASIC__ #define __BASIC__ #include <sys/types.h> /* basic system data types */ #include <sys/socket.h> /* basic socket definitions */ #include <sys/time.h> /* timeval{} for select() */ #include <time.h> /* timespec{} for pselect() */ #include <netinet/in.h> /* sockaddr_in{} and other Internet defns */ #include <arpa/inet.h> /* inet(3) functions */ #include <errno.h> …… #include <unistd.h> #include <sys/wait.h> #include <sys/un.h> /* for Unix domain sockets */

#define MAXLINE 256 #define PORT 12345 #define BACKLOG 5 #define MAX(a, b) ((a) > (b) ? (a) : (b))

#endif

basic.h

RappresentazionedeidaR

LearchiteGuredeicalcolatorimemorizzanoidaRinmodidiversi:

• liGle‐endian:memorizzanoilbytemenosignifica6vo(LSB)nelprimobytedellalocazionedimemoria.

• big‐endian::memorizzanoilbytepiùsignifica6vo(MSB)nelprimobytedellalocazionedimemoria

Esempio.Parolamacchinadi16bitValoredecimale258Rapp.esadecimale:0x0102

Page 12: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

12

Comunicazione

E’ come se nelle architeGure liGle‐endian i daR venissero interpretaRleggendodadestraa sinistra,mentre inquellebig‐endianda sinistraadestra.

Se due programmi, il primo in esecuzione su un calcolatore A conarchiteGura liGle‐endian e il secondo in esecuzione su un calcolatore BconarchiteGurabig‐endian,interpretanoidaRchesiscambianoinmododiverso, le computazioni risultanR sono inconsistenR (e.g, 513 invecedi258).

Curiosità• ScriGuredipopolianRchiedipopoliorientali• Altoversoilbasso,destraversosinistra• ScriGurabustrofedica

SeppurconoscessimoglialfabeRdialtrelingue,diversidainostri,leggendonelnostroversononriusciremmoadinterpretarecorreGamenteciòchec’èscriGo.TuGosommato,ilmondodeicomputerdigitalièmoltopiùsemplice:l’alfabetoèunico(binario)eledirezionisonosoltantodue!

Page 13: Slide Prima Lezione - UNISA · Slide Prima Lezione Author: Paolo D'Arco Created Date: 3/1/2010 3:13:17 PM ...

1‐03‐2010

13

DicheRpoèlanostraarchiteGura?#include <stdio.h>

int main(int argc, char **argv) { union { short s; char c[sizeof(short)]; } un;

un.s = 0x0102; printf("CPU = %s - byte ordering: ",getenv("CPU"));

if (sizeof(short) == 2) { if ( un.c[0] == 1 && un.c[1] == 2 ) printf ("big-endian\n"); else if ( un.c[0] == 2 && un.c[1] == 1 ) printf ("little-endian\n"); else printf("unknown\n"); } else printf("size of short: %d.\n",sizeof(short)); exit(0); }

Conclusioni

• Allafinedelcorsosapremoscrivereprogrammichecomunicanosurete

• IlnostroambientedilavoroèfaGoditerminalitestuali,shell,ededitorditesto

• URlizzeremoilcomandomakepercompilareealcunifiledisupporto,scaricabilidalsitodelcorso

• NellascriGuradiprogrammifaremosempreaGenzionealproblemadellarappresentazionedeidaRindiversearchiteGure.