Instituto Politcnico Nacional
Escuela Superior de Cmputo
Prctica 3: Hilos
Integrantes:
- EDGAR RODRIGO ARREDONDO
BASURTO
- OMAR FLORES MEJA
- MIGUEL NGEL AMADOR NAVA
Profesor: Josu Rangel Gonzlez
Asignatura: Sistemas operativos
[Link]
Dentrodelaprogramacionmultitareatenemosaloshilosquesonlaunidadmas
basicadeutilizaciondeCPUyestostambiensondenominadosprocesosligerosyaquese
comportancomoprocesosperonosonindependientes,nialcrearsecopiantodocomoun
procesoperotienelamismabasequeeslaprogramacionconcurrente.
Unadelasmanerasdehacermasefecienteunprogramaesatravezdeestosyaque
tomanlasvariablesglobalesdeunprogramayseejecutandeacuerdoalaprogramacion
queseestablecioperotododentrodeunmismoproceso,estopermiteralizardistintas
tareaslascualespuedenbrindarinformacionunaalaotraosimplementeacelerarla
terminaciondeunproceso.
Mencionadoloanteriorpodemosdecirqueesindispensablesabermanejalosnosoloporla
efecienciasinoporqueenocasionessinoseutilizannosepuedeimplementarlasolucion
deunproblemacomoeselsimplecasodelareproducionautomaticademusica.
Esimportantemencionarquelaformaenqueseejecutanlosprocesosasicomoloshilos
no se puede saber ni predecir su inicio ni terminacion, y esto tambien depende del
sistemaoperativodentrodelcualseejecuten,enestecasoseraenlinuxconlautilizacion
dellenguajec.
Parasucreacionutilizaremoslalibrera<phtread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void
*(*start_routine)(void*), void *arg);
[Link]
Senecesitacrearunpromagramaparamultiplicarmatricezcuadradasquesellenaran
deformaaleatoria,detalformaqueunhilotomeunafilaylamultipliqueporsucolumna
correpondiente,dondeelusuarioindiqueeltamaodelamatrizyelnumerodehilos.
0P
1I
2I
2I
1D
2I
2D
2D
2D
2D
[Link].
Elnmerodenivelesqueelrboldeprocesostieneessolicitadoeingresadoporel
usuarioatravsdelteclado.
[Link]
Paragenerartodoslosprocesosdeunmismonivelseempleounaestructurafor
queesllamadaporelprocesopadreyencadaiteracinsecreaunnuevoprocesohijo.
Paraevitarqueelprocesohijorecincreado,enlasiguienteiteracindelciclo(sinofue
laltima)creeunnuevoproceso,encadaiteracinsehaceusodeunaestructuraifydel
valor regresado por la llamada fork() para que solo el proceso padre sea el que crea
procesos.
Enprimerainstanciaserealizounforcondositeracionesparageneraralproceso
[Link],comosemuestraenlafigurauno,elnmerode
hijoscreadosporcadaprocesoseselmismoentodoelrbolderecho,sucediendolomismo
[Link],lomscmodofuegenerarunafuncinrecursiva,lacual
contienelamismaestructuraforparalageneracindeprocesoshijos,peroquegraciasal
mtodorecursivo,continuacreandomsnivelesdelrbol,dependiendodelnmerode
[Link],queellabasedelprogramasemuestraa
continuacin.
voidcreaHijos(intnumeroHijos,intniveles){
if(niveles<=1){return;}
intstatus;
pid_tcpid=1;
for(inti=0;i<numeroHijos;i++){
if(cpid>0){
cpid=creaProceso();
if(cpid==0){
printf("Soyhijo,miPID:%ldyPPID:%ld\n",(long)getpid(),
(long)getppid());
creaHijos(numeroHijos,niveles1);
}else{
waitpid(cpid,&status,0);
}
}
}
}
[Link]
EdgarRodrigoArredondoBasurto
Debidoaexperienciaspreviasprogramandorbolesbinarios,mepareciclaroque
[Link]
implementarla. La clave fue empezar creando nicamente el padre con dos hijos y
[Link]
surgielproblemadequelaseccindecdigodestinadaalacreacindelosprocesoshijos
porpartedelpadre,tambineraejecutadaporlosprocesoshijosrecincreados,haciendo
[Link]
funcinfork(),conelcualesposibleidentificaralprocesohijo.
[Link]
EdgarRodrigoArredondoBasurto
Larealizacindeestaprcticacontribuyoalamejorcomprensindeloqueun
procesoes,yaqueladefinicininformalesqueesunprogramaenejecucin,sinembargo,
enestecasodeunmismoprogramasedesprendenmltiplesprocesos,dondetodosellos
contienen el mismo cdigo. Esto ltimo me result algo difcil de comprender en el
momentoenqueserealizelprograma,yaqueseestabarealizandounsoloprograma
[Link]
queyaseabordlacreacindeprocesoslosiguienteseraestudiarcomohacerqueel
procesohijocreadotengasupropioprograma,yaquenomeparecemuyfuncionalcrear
muchosprocesosquetenganelmismoprograma.
[Link]
[1][Link].
[2]Silberschatz,[Link].