0% encontró este documento útil (0 votos)
85 vistas7 páginas

Programación de Hilos en C para Matrices

Este documento presenta una práctica sobre la creación de hilos en C utilizando la biblioteca pthread.h. Se propone crear un programa para multiplicar matrices cuadradas de tamaño indicado por el usuario utilizando hilos, donde cada hilo multiplicará una fila por su columna correspondiente. Se describe la solución implementada mediante una función recursiva que genera el árbol de procesos requerido de forma recursiva dependiendo del número de niveles especificado por el usuario.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
85 vistas7 páginas

Programación de Hilos en C para Matrices

Este documento presenta una práctica sobre la creación de hilos en C utilizando la biblioteca pthread.h. Se propone crear un programa para multiplicar matrices cuadradas de tamaño indicado por el usuario utilizando hilos, donde cada hilo multiplicará una fila por su columna correspondiente. Se describe la solución implementada mediante una función recursiva que genera el árbol de procesos requerido de forma recursiva dependiendo del número de niveles especificado por el usuario.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd

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].

También podría gustarte