Sunteți pe pagina 1din 30

PSPTema1

UNIDAD1:PROGRAMACINMULTIPROCESO.

1.RECORDANDOCMOPROGRAMARENJAVAYELUSOBSICODELIDENETBEANS.
Lenguaje de programacin Java es un lenguaje de alto nivel, orientado a objetos. El lenguaje es
inusual porque los programas Java son tanto compilados como interpretados. La compilacin
traduceelcdigoJavaaunlenguajeintermediollamadoJavabytecode.ElBytecode,esanalizadoy
ejecutado(interpretado)porJavaVirtualMachine(JVM)untraductorentrebytecode,elsistema
operativo subyacente y el hardware. Todas las implementaciones del lenguaje de programacin
deben emular JVM, para permitir que los programas Java se ejecuten en cualquier sistema que
tengaunaversindeJVM.
LaplataformaJavaesunaplataformaslodesoftwarequeseejecutasobrevariasplataformasde
hardware. Est compuesto por JVM y la interfaz de programacin de aplicaciones (API) Javaun
amplioconjuntodecomponentesdesoftware(clases)listosparausarquefacilitaneldesarrolloy
desplieguedeappletsyaplicaciones.LaAPIJavaabarcadesdeobjetosbsicosaconexinenred,
seguridad, generacin de XML y servicios web. Est agrupada en bibliotecasconocidas como
paquetesdeclaseseinterfacesrelacionadas.

Versionesdelaplataforma:
- Java SE (Plataforma Java, Standard Edition). Permite desarrollar y desplegar aplicaciones Java en
desktopsyservidores,comotambinenentornosempotradosyentiemporeal.
- JavaEE(PlataformaJava,EnterpriseEdition).Laversinempresarialayudaadesarrollarydesplegar
aplicacionesJavaenelservidorportables,robustas,escalablesyseguras.
- JavaME(PlataformaJava,MicroEdition).Proporcionaunentornoparaaplicacionesqueoperanen
unagamaampliadedispositivosmvilesyempotrados,comotelfonosmviles,PDA,STBdeTVe
impresoras.

Para la implementacin y desarrollo de aplicaciones, nos servimos de un IDE (Entorno Integrado de


Desarrollo), que es un programa informtico formado por distintas herramientas de programacin;
comoson:editor,compilador,intrprete,depurador,controldeversiones,

2.INTRODUCCIN:APLICACIONES,EJECUTABLESYPROCESOS.
Asimplevista,parecequeconlostrminosaplicacin,ejecutableyproceso,nosestamosrefiriendoalo
mismo.
Una aplicacin es un tipo de programa informtico, diseado como herramienta para resolver de
maneraautomticaunproblemaespecficodelusuario.

Debemosdarnoscuentadequesobreelhardwaredelequipo,todoloqueseejecutasonprogramas
informticos, que, ya sabemos, que se llama software. Con la definicin de aplicacin anterior,
buscamos diferenciar las aplicaciones, de otro tipo de programas informticos, como pueden ser: los
sistemas operativos, las utilidades para el mantenimiento del sistema, o las herramientas para el
desarrollodesoftware.Porlotanto,sonaplicaciones,aquellosprogramasquenospermiteneditaruna
imagen,enviaruncorreoelectrnico,navegarenInternet,editarundocumentodetexto,chatear,etc.

Recordemos, que un programa es el conjunto de instrucciones que ejecutadas en un ordenador


realizarn una tarea o ayudarn al usuario a realizarla. Nosotros, como programadores y
programadoras, creamos un programa, escribiendo su cdigo fuente; con ayuda de un compilador,

PSPTema1

obtenemos su cdigo binario o interpretado. Este cdigo binario o interpretado, lo guardamos en un


fichero. Este fichero, es un fichero ejecutable, llamado comnmente: ejecutable o binario. Un
ejecutable es un fichero que contiene el cdigo binario o interpretado que ser ejecutado en un
ordenador.

Deformasencilla,unproceso,esunprogramaen ejecucin.Pero,esmsqueeso,un procesoenel


sistemaoperativo(SO),esunaunidaddetrabajocompleta;y,elSOgestionalosdistintosprocesosque
se encuentren en ejecucin en el equipo. En siguientes apartados de esta unidad trataremos ms en
profundidadtodolorelacionadoconlosprocesosyelSO.Lomsimportante,esquediferenciemosque
un ejecutable es un fichero y un proceso es una entidad activa, el contenido del ejecutable,
ejecutndose.

Un proceso es un programa en ejecucin. Un proceso existe mientras que se est ejecutando una
aplicacin.Esms,laejecucindeunaaplicacin,puedeimplicarquesearranquenvariosprocesosen
nuestroequipo;ypuedeestarformadaporvariosejecutablesylibreras.

Una aplicacin es un tipo de programa informtico, diseado como herramienta para resolver de
manera automtica un problema especfico del usuario. Al instalarla en el equipo, podremos ver que
puede estar formada por varios ejecutables y libreras. Siempre que lancemos la ejecucin de una
aplicacin,secrear,almenos,unprocesonuevoennuestrosistema.

2.1.Ejecutables.Tipos.
EnsistemasoperativosWindows,podemosreconocerunficheroejecutable,porquesuextensin,suele
ser.exe.Enotrossistemasoperativos,porejemplo,losbasadosenGNU/Linux,losficherosejecutables
seidentificancomoficherosquetienenactivadosupermisode ejecucin(ynotienenqueteneruna
extensindeterminada).

Segneltipodecdigoquecontengaunejecutable,lospodemosclasificaren:
- Binarios. Formados por un conjunto de instrucciones que directamente son ejecutadas por el
procesadordelordenador.Estecdigoseobtienealcompilarelcdigofuentedeunprogramayse
guarda en un fichero ejecutable. Este cdigo slo se ejecutar correctamente en equipos cuya
plataforma sea compatible con aquella para la que ha sido compilado (no es multiplataforma).
Ejemplosson,ficherosqueobtenemosalcompilarunejecutabledeCoC++.

- Interpretados.Cdigoquesueletratarsecomounejecutable,peronoescdigobinario,sinootro
tipodecdigo,queenJava,porejemplosellamabytecode.Estformadoporcdigosdeoperacin
que tomar el intrprete (en el caso de Java, el intrprete es la mquina virtual Java o JRE). Ese
intrprete ser el encargado de traducirlos al lenguaje mquina que ejecutar el procesador. El
cdigo interpretado es ms susceptible de ser multiplataforma o independiente de la mquina
fsicaenlaquesehayacompilado.

- Untipoespecialdeejecutablesinterpretados,sonlosllamadosscripts.Estosficheros,contienenlas
instrucciones que sern ejecutadas una detrs de otra por el intrprete. Se diferencian de otros
lenguajesinterpretadosporquenosoncompilados.Porloquelospodremosabriryverelcdigo
que contienen con un editor de texto plano (cosa que no pasa con los binarios e interpretados
compilados). Los intrpretes de este tipo de lenguajes se suelen llamar motores. Ejemplos de

PSPTema1

lenguajesdescriptson:JavaScript,php,JSP,ASP,python,ficheros.BATenMSDOS,Powershellen
Windows,bashscriptsenGNU/Linux,

Libreras. Conjunto de funciones que permiten dar modularidad y reusabilidad a nuestros


programas. Las hemos incluido en esta clasificacin, porque su contenido es cdigo ejecutable,
aunque ese cdigo sea ejecutado por todos los programas que invoquen las funciones que
contienen.Elconjuntodefuncionesqueincorporaunalibrerasueleseraltamentereutilizableytil
paralosprogramadores,evitandoquetenganquereescribirunayotravezelcdigoquerealizala
mismatarea.Ejemplodelibrerasson:laslibrerasestndardeC,lospaquetescompiladosDLLen
Windows;lasAPI(InterfazdeProgramacindeAplicaciones),comolaJ2EEdeJava(PlataformaJava
EnterpriseEditionversin2);laslibrerasqueincorporaelframeworkde.NET;etc.

3.GESTINDEPROCESOS.
Como sabemos, en nuestro equipo, se estn ejecutando al mismo tiempo, muchos procesos. Por
ejemplo, podemos estar escuchando msica con nuestro reproductor multimedia favorito; al mismo
tiempo, estamos programando con NetBeans; tenemos el navegador web abierto, para ver los
contenidosdeestaunidad;incluso,tenemosabiertoelMessengerparachatearconnuestrosamigosy
amigas.

Independientemente de que el microprocesador de nuestro equipo sea ms o menos moderno (con


uno o varios ncleos de procesamiento), lo que nos interesa es que actualmente, nuestros SO son
multitarea; como son, por ejemplo, Windows y GNU/Linux. Ser multitarea es, precisamente, permitir
quevariosprocesospuedanejecutarsealmismotiempo,haciendoquetodoselloscompartanelncleo
o ncleos del procesador. Pero, cmo? Imaginemos que nuestro equipo, es como nosotros mismos
cuandotenemosmsdeunatareaquerealizar.Podemos,irrealizandocadatareaunadetrsdeotra,
o,porelcontrario,irrealizandounpocodecadatarea.Alfinal,tendremosrealizadastodaslastareas,
peroparaotrapersonaquenosestmirandodesdefuera,leparecerque,delaprimeraforma,vamos
muylentos(yms,siestesperandoelresultadodeunadelastareasquetenemosquerealizar);sin
embargo,delasegundaforma,leparecerqueestamosmuyocupados,peroquepocoapocoestamos
haciendo lo que nos ha pedido. Pues bien, el micro, es nuestro cuerpo, y el SO es el encargado de
decidir,pormediodelagestindeprocesos,silohacemostododegolpe,ounatareadetrsdeotra.

Enestepunto,esinteresantequehagamosunapequeaclasificacindelostiposdeprocesosquese
ejecutanenelsistema:
- Porlotes.Estnformadosporunaseriedetareas,delasqueelusuariosloestinteresadoenel
resultadofinal.Elusuario,slointroducelastareasylosdatosiniciales,dejaqueserealicetodoel
procesoyluegorecogelosresultados.Porejemplo:enviaraimprimirvariosdocumentos,escanear
nuestroequipoenbuscadevirus,...
- Interactivos.Aquellastareasenlasqueelprocesointeractacontinuamenteconelusuarioyacta
deacuerdoalasaccionesquesterealiza,oalosdatosquesuministra.Porejemplo:unprocesador
de textos, una aplicacin formada por formularios que permiten introducir datos en una base de
datos...
- Tiempo real. Tareas en las que es crtico el tiempo de respuesta del sistema. Por ejemplo: el
ordenador de a bordo de un automvil, reaccionar ante los eventos del vehculo en un tiempo
mximoque consideramoscorrectoyaceptable.Otroejemplo,sonlosequiposquecontrolanlos
brazosmecnicosenlosprocesosindustrialesdefabricacin.

PSPTema1

3.1.Gestindeprocesos.Introduccin.
En nuestros equipos ejecutamos distintas aplicaciones interactivas y por lotes. Como sabemos, un
microprocesador es capaz de ejecutar miles de millones de instrucciones bsicas en un segundo (por
ejemplo,uni7puedellegarhastalos3,4GHz).Unmicro,aesavelocidad,escapazderealizarmuchas
tareas, y nosotros (muy lentos para l), apreciaremos que solo est ejecutando la aplicacin que
nosotrosestamosutilizando.Alfinyalcabo,almicro,lonicoqueleimportaesejecutarinstrucciones
y dar sus resultados, no tiene conocimiento de si pertenecen a uno u otro proceso, para l son
instrucciones.Es,elSOelencargadodedecidirquprocesopuedeentraraejecutarseodebeesperar.
Lo veremos ms adelante, pero se trata de una fila en la que cada proceso coge un nmero y va
tomando su turno de servicio durante un periodo de tiempo en la CPU, pasado ese tiempo, vuelve a
ponersealfinaldelafila,esperandoaquelleguedenuevosuturno.

Losnuevosmicros,convariosncleos,pueden,casitotalmente,dedicarunaCPUalaejecucindeuno
de los procesos activos en el sistema. Pero no nos olvidemos de que adems de estar activos los
procesosdeusuario,tambinseestarejecutandoelSO,porloqueseguirsiendonecesariorepartir
losdistintosncleosentrelosprocesosqueestnenejecucin.

3.2.EstadosdeunProceso.
Sielsistematienequerepartirelusodelmicroprocesadorentrelosdistintosprocesos,qulesucede
aunprocesocuandonoseestejecutando?Y,siunprocesoestesperandodatos,porquelequipo
haceotrascosasmientrasqueunprocesoquedaalaesperadedatos?

ElSOeselencargadodelagestindeprocesos.

Enesteesquema,podemosver:
- Losprocesosnuevos,entranenlacoladeprocesosactivosenelsistema.
- Losprocesosvanavanzandoposicionesenlacoladeprocesosactivos,hastaquelestocaelturno
paraqueelSOlesconcedaelusodelaCPU.
- ElSOconcedeelusodelaCPU,acadaprocesoduranteuntiempodeterminadoyequitativo,que
llamaremos quantum. Un proceso que consume su quantum, es pausado y enviado al final de la
cola.
- Siunprocesofinaliza,saledelsistemadegestindeprocesos.

Esta planificacin que hemos descrito, resulta equitativa para todos los procesos (todos van a ir
teniendo su quantum de ejecucin). Pero se nos olvidan algunas situaciones y caractersticas de los
procesos:
- Cuandounprocesonecesitadatosdeunarchivoounaentradadedatosquedebasuministrarel
usuario o tiene que imprimir o grabar datos, diremos que el proceso est en una operacin de
entrada/salida' (E/S para abreviar). Este queda bloqueado hasta que haya finalizado esa E/S. El
procesoesbloqueadoporquelosdispositivossonmuchomslentosquelaCPUydeestamanera,
mientrasqueunodeellosestesperandounaE/S,otrosprocesospuedenpasaralaCPUyejecutar

PSPTema1

susinstrucciones.CuandoterminalaE/Squetengaunprocesobloqueado,elSOvolverapasaral
procesoalacoladeprocesosactivos,paraquerecojalosdatosycontineconsutarea(dentrode
suscorrespondientesturnos).
Cuando la memoria RAM del equipo est llena, algunos procesos deben pasar a disco (o
almacenamiento secundario) para dejar espacio en RAM que permita la ejecucin de otros
procesos.

Todo proceso en ejecucin, tiene que estar cargado en la RAM fsica del equipo o memoria
principal,ascomotodoslosdatosquenecesite.

Hayprocesosenelequipocuyaejecucinescrticaparaelsistema,porloquenosiemprepueden
estaresperandoaqueleslleguesuturnodeejecucinhaciendocola.Porejemplo,elpropioSOes
unprogramayporlotantounprocesoounconjuntodeprocesosenejecucin.Seledaprioridada
losprocesosdelSOfrentealosprocesosdeusuario.

Contodoloanterior,podemosquedarnosconlossiguientesestadosenelciclodevidadeunproceso:
1. Nuevo.Procesonuevo,creado.
2. Listo.ProcesoqueestesperandolaCPUparaejecutarsusinstrucciones.
3. Enejecucin.Procesoqueactualmente,estenturnodeejecucinenlaCPU.
4. Bloqueado.ProcesoqueestalaesperadequefinaliceunaE/S.
5. Suspendido. Proceso que se ha llevado a la memoria virtual para liberar, un poco, la RAM del
sistema.
6. Terminado.ProcesoquehafinalizadoyyanonecesitarmslaCPU.

3.3.PlanificacindeprocesosporelSistemaOperativo.
Unproceso,desdesucreacinhastasufin(durantesuvida),pasapormuchosestados.Esatransicin
de estados es transparente para l, todo lo realiza el SO. Desde el punto de vista de un proceso, l
siempreseestejecutandoenlaCPUsinesperas.Dentrodelagestindeprocesosvamosadestacar
doscomponentesdelSOquellevanacabotodalatarea:elcargadoryelplanificador.

Elcargadoreselencargadodecrearlosprocesos.Cuandoseiniciaunproceso(paracadaproceso),el
cargadorrealizalassiguientestareas:
Carga el proceso en memoria principal. Reserva un espacio en la RAM para el proceso. En ese
espacio copia las instrucciones del fichero ejecutable de la aplicacin, las constantes y deja un
espacioparalosdatos(variables)ylapila(llamadasafunciones).Unproceso,durantesuejecucin,
nopodrhacerreferenciaadireccionesqueseencuentrenfueradesuespaciodememoria.Silo
intentara, el SO lo detectar y generar una excepcin (produciendo, por ejemplo, los tpicos
pantallazosazulesdeWindows).

PSPTema1

CreaunaestructuradeinformacinllamadaPCB(BloquedeControldeProceso).Lainformacindel
PCB es nica para cada proceso y permite controlarlo. Esta informacin tambin la utilizar el
planificador.Entreotrosdatos,elPCBestarformadopor:
- Identificador del proceso o PID. Es un nmero nico para cada proceso, como un DNI de
proceso.
- Estadoactualdelproceso:enejecucin,listo,bloqueado,suspendido,finalizando.
- Espaciodedireccionesdememoriadondecomienzalazonadememoriareservadaalprocesoy
sutamao.
- Informacinparalaplanificacin:prioridad,quamtum,estadsticas,...
- Informacinparaelcambiodecontexto:valordelosregistrosdelaCPU,entreelloselcontador
de programa y el puntero a pila. Esta informacin es necesaria para poder cambiar de la
ejecucindeunprocesoaotro.
- Recursosutilizados.Ficherosabiertos,conexiones,

3.4.CambiodecontextoenlaCPU.
Unprocesoesunaunidaddetrabajocompleta.Elsistemaoperativoeselencargadodegestionarlos
procesosenejecucindeformaeficiente,intentandoevitarquehayaconflictosenelusoquehacende
losdistintosrecursosdelsistema.Pararealizarestatareadeformacorrecta,seasociaacadaproceso
unconjuntodeinformacin(PCB)ydeunosmecanismosdeproteccin(unespaciodedireccionesde
memoriadelquenosepuedesaliryunaprioridaddeejecucin).

Imaginemosqueennuestroequipo,enunmomentodeterminado,podemosestarescuchandomsica,
editandoundocumento,almismotiempochateandoconotraspersonasynavegandoenInternet.En
este caso, tendremos ejecutndose en el sistema cuatro aplicaciones distintas, que pueden ser: el
reproductor multimedia VLC, el editor de textos writer de OpenOffice, el Messenger y el navegador
Firefox.Todosellos,ejecutadossinfallosycadaunohaciendousodesusdatos.

Elsistemaoperativo(elplanificador),alrealizarelcambiodeunaaplicacinaotra,tienequeguardarel
estado en el que se encuentra el microprocesador y cargar el estado en el que estaba el
microprocesadorcuandocortlaejecucindeotroproceso,paracontinuarconese.Pero,quesel
estadodelaCPU?

UnaCPU,ademsdecircuitosencargadosderealizarlasoperacionesconlosdatos(llamadoscircuitos
operacionales)tieneunospequeosespaciosdememoria(llamadosregistros)enlosquesealmacenan
temporalmente la informacin que, en cada instante, necesita la instruccin que est procesando la
CPU.ElconjuntoderegistrosdelaCPUessuestado.

Entrelosregistros,destacamoselRegistroContadordeProgramayelpunteroalapila.
- ElContadordePrograma,encadainstantealmacenaladireccindelasiguienteinstruccina
ejecutar. Recordemos, que cada instruccin a ejecutar, junto con los datos que necesite, es
llevada desde la memoria principal a un registro de la CPU para que sea procesada; y, el
resultado de la ejecucin, dependiendo del caso, se vuelve a llevar a memoria (a la direccin
queocupelacorrespondientevariable).PueselContadordePrograma,apuntaaladireccinde
lasiguienteinstruccinquehabrquetraerdelamemoria,cuandoseterminedeprocesarla
instruccinencurso.EsteContadordeProgramanospermitircontinuarencadaprocesopor
lainstruccinendndelohubiramosdejadotodo.

PSPTema1

El Puntero a Pila, en cada instante apunta a la parte superior de la pila del proceso en
ejecucin. En la pila de cada proceso es donde ser almacenado el contexto de la CPU. Y de
dondeserecuperarcuandoeseprocesovuelvaaejecutarse.

LaCPUrealizauncambiodecontextocadavezquecambialaejecucindeunprocesoaotrodistinto.
Enuncambiodecontexto,hayqueguardarelestadoactualdelaCPUyrestaurarelestadodeCPUdel
procesoquevaapasaraejecutar.

3.5.Servicios.Hilos.
Elejemplomsclarodehiloothread,esunjuego.Eljuego,eslaaplicaciny,mientrasquenosotros
controlamos uno de los personajes, los 'malos' tambin se mueven, interactan por el escenario y
quitan vida. Cada uno de los personajes del juego es controlado por un hilo. Todos los hilos forman
parte de la misma aplicacin, cada uno acta siguiendo un patrn de comportamiento. El
comportamiento es el algoritmo que cada uno de ellos seguir. Sin embargo, todos esos hilos
compartenlainformacindelaaplicacin:elnmerodevidasrestantes,lapuntuacinobtenidahasta
esemomento,laposicinenlaqueseencuentraelpersonajedelusuarioyelrestodepersonajes,siha
llegadoelfinaldeljuego,etc.Comosabemos,esasinformacionessonvariables.Puesbien,unproceso,
nopuedeaccederdirectamentealainformacindeotroproceso.Pero,loshilosdeunmismoproceso
estndentrodel,porloquecompartenlainformacindelasvariablesdeeseproceso.

Realizarcambiosdecontextoentrehilosdeunmismoproceso,esmsrpidoymenoscostosoqueel
cambio de contexto entre procesos, ya que slo hay que cambiar el valor del registro contador de
programadelaCPUynotodoslosvaloresdelosregistrosdelaCPU.

Unproceso,estarformadopor,almenos,unhilodeejecucin.

Unprocesoesunaunidadpesadadeejecucin.Sielprocesotienevarioshilos,cadahilo,esunaunidad
deejecucinligera.

Sabes lo que es HyperThreading (HT)? Es una tecnologa patentada por Intel, que incorpor en sus
micros Pentium4 de un slo ncleo para que el propio micro (hardware) simulara la existencia de 2
ncleoslgicos,paraobtenermayorproductividadenprocesosdemsdeunhilo,yaquecadancleo
lgicogestionarcadahilodeformacasiindependiente.EstatecnologalaeliminensusCore2Duoy
Quad; ya que al existir ms de un ncleo hardware no haca falta simular la existencia de ms de un
ncleoporncleofsico.Ylohavueltoaintroducirensufamiliademicroprocesadoresi7,i5ei3.Estos
ltimos,porcadancleofsico,simulan2ncleoslgicos.Buscanasincrementarlaproductividaddel
micro.

Un servicio es un proceso que, normalmente, es cargado durante el arranque del sistema operativo.
Recibe el nombre de servicio, ya que es un proceso que queda a la espera de que otro le pida que
realice una tarea. Por ejemplo, tenemos el servicio de impresin con su tpica cola de trabajos a
imprimir. Nuestra impresora imprime todo lo que recibe del sistema, pero se debe tener cuidado, ya
quesinoseleenvanlosdatosdeunaformaordenada,laimpresorapuedemezclarlaspartesdeun
trabajoconlasdeotro,inclusodentrodelmismofolio.Elserviciodeimpresin,eselencargadodeir
enviandolosdatosdeformacorrectaalaimpresoraparaqueelresultadoseaelesperado.Adems,las
impresoras, no siempre tienen suficiente memoria para guardar todos los datos de impresin de un
trabajocompleto,porloqueelserviciodeimpresinselosdarconformevayanecesitndolos.Cuando

PSPTema1

finalice cada trabajo, puede notificrselo al usuario. Si en la cola de impresin, no hay trabajos
pendientes,elserviciodeimpresinquedaralaesperaypodravisaralaimpresoraparaquequede
enStandBy.

Como este, hay muchos servicios activos o en ejecucin en el sistema, y no todos son servicios del
sistemaoperativo,tambinhayserviciosdeaplicacin,instaladosporelusuarioyquepuedenlanzarse
alarrancarelsistemaoperativoono,dependiendodesuconfiguracinocmolosconfiguremos.

Unservicio,esunprocesoquequedaalaesperadequeotroslepidaquerealiceunatarea.

3.6.Creacindeprocesos.
En muchos casos necesitaremos que una aplicacin lance varios procesos. Esos procesos pueden
realizar cada uno una tarea distinta o todos la misma. Por ejemplo, imaginemos un editor de texto
plano sencillo. Estamos acostumbrados a que los distintos ficheros abiertos se muestren en pestaas
independientes,perocmoimplementamoseso?

Lasclasesquevamosanecesitarparalacreacindeprocesos,son:
Clase java.lang.Process. Proporciona los objetos Proceso, por los que podremos controlar los
procesoscreadosdesdenuestrocdigo.
Clasejava.lang.Runtime.Clasequepermitelanzarlaejecucindeunprogramaenelsistema.Sobre
todossoninteresanteslosmtodosexec()deestaclase,porejemplo:
Runtime.exec(Stringcomando);devuelveunobjetoProcessquerepresentaalprocesoenejecucin
queestrealizandolatareacomando.

Laejecucindelmtodoexec()puedelanzarlasexcepciones:SecurityException,sihayadministracin
de seguridad y no tenemos permitido crear subprocesos. IOException, si ocurre un error de E/S.
NullPointerExceptionyIllegalArgumentException,sicommandoesunacadenanulaovaca.

3.7.Comandosparalagestindeprocesos.
Es cierto que podemos pensar que ya no necesitamos comandos. Y que podemos desterrar el
intrpretedecomandos,terminaloshell.Haymltiplesmotivosporlosqueestonoesas:
- En el apartado anterior, hemos visto que necesitamos comandos para lanzar procesos en el
sistema.
- Adems de las llamadas al sistema, los comandos son una forma directa de pedirle al sistema
operativoquerealicetareaspornosotros.
- Construir correctamente los comandos, nos permitir comunicarnos con el sistema operativo y
poderutilizarlosresultadosdeestoscomandosennuestrasaplicaciones.
- EnGNU/Linux,existenprogramasenmodotextopararealizarcasicualquiercosa.Enmuchoscasos,
cuandoutilizamosunainterfazgrfica,staesunfrontenddelprogramaenmodocomando.Este
frontend,puedeproporcionartodasoalgunasdelasfuncionalidadesdelaherramientareal.
- La administracin de sistemas, y ms si se realiza de forma remota, es ms eficiente en modo
comando. Las administradoras y administradores de sistemas experimentadas utilizan scripts y
modocomandos,tantoensistemasWindowscomoGNU/Linux.

Elcomienzo enel mundodeloscomandos,puede resultaraterrador,haymuchsimoscomandos,es


imposible aprendrselos todos! Bueno, no nos alarmemos, con este par de trucos podremos
defendernos:

PSPTema1

Elnombredeloscomandossueleestarrelacionadoconlatareaquerealizan,sloqueexpresado
eningls,outilizandosiglas.Porejemplo:tasklistmuestraunlistadodelosprocesosensistemas
Windows; y en GNU/Linux obtendremos el listado de los procesos con ps, que son las siglas de
'processstatus'.
Susintaxissiempretienelamismaforma:nombreDelComandoopciones
Las opciones, dependen del comando en s. Podemos consultar el manual del comando antes de
utilizarlo. En GNU/Linux, lo podemos hacer con "man nombreDelComando"; y en Windows, con
"nombreDelComando/?"

RecuerdadejarsiempreunespacioenblancodespusdelnombreDelComandoyentrelasopciones.

Despus de esos pequeos apuntes, los comandos que nos interesa conocer para la gestin de
procesosson:

Windows. Este sistema operativo es conocido por sus interfaces grficas, el intrprete de comandos
conocido como Smbolo del sistema, no ofrece muchos comandos para la gestin de procesos.
Tendremos:
- tasklist. Lista los procesos presentes en el sistema. Mostrar el nombre del ejecutable, su
correspondienteIdentificadordeprocesoyelporcentajedeusodememoria,entreotrosdatos.
- taskkill. Mata procesos. Con la opcin /PID especificaremos el Identificador del proceso que
queremosmatar.

GNU/Linux.Enestesistemaoperativo,todosepuederealizarcualquiertareaenmodotexto,adems
dequelosdesarrolladoresydesarrolladorasrespetanenlaimplementacindelasaplicaciones,quesus
configuraciones se guarden en archivos de texto plano. Esto es muy til para las administradoras y
administradoresdesistemas.
- ps.Listalosprocesospresentesenelsistema.Conlaopcin"aux"muestratodoslosprocesosdel
sistemaindependientementedelusuarioqueloshayalanzado.
- pstree. Muestra un listado de procesos en forma de rbol, mostrando qu procesos han creado
otros. Con la opcin "AGu" construir el rbol utilizando lneas gua y mostrar el nombre de
usuariopropietariodelproceso.
- kill.Mandasealesalosprocesos.Laseal9,mataralproceso.Seutiliza"kill9<PID>".
- killall.Mataprocesosporsunombre.Seutilizacomo"killallnombreDeAplicacion".
- nice. Cambia la prioridad de un proceso. "nice n 5 comando" ejecutar el comando con una
prioridad5.Pordefectolaprioridades0.Lasprioridadesestnentre20(msalta)y19(msbaja).

3.8.Herramientasgrficasparalagestindeprocesos.
Pero, tenemos que hacerlo todo en modo comandos? qu nos permite hacer el Administrador de
tareas de Windows con los procesos? No hay ninguna herramienta grfica similar en los sistemas
GNU/Linux?

Tanto los sistemas Windows como GNU/Linux proporcionan herramientas grficas para la gestin de
procesos.EnelcasodeWindows,setratadelAdministradordetareas,yenGNU/LinuxdelMonitordel

PSPTema1

10

sistema. Ambos, son bastante parecidos, nos ofrecen, al menos, las siguientes funcionalidades e
informacin:
- Listadodetodoslosprocesosqueseencuentranactivosenelsistema,mostrandosuPID,usuarioy
ubicacindesuficheroejecutable.
- Posibilidaddefinalizarprocesos.
- InformacinsobreelusodeCPU,memoriaprincipalyvirtual,red,
- Posibilidaddecambiarlaprioridaddeejecucindelosprocesos.

SysInternals,esunconjuntodeutilidadesavanzadasparaSOWindowspublicadascomofreeware.En
particular, recomendamos las herramientas grficas "Process Explorer" y "Process Monitor". "Process
Explorer" nos dar informacin ms completa sobre los procesos activos en el sistema; y "Process
Monitor"nosinformardelaactividad(deE/S)delosprocesosehilosactivosenelsistema:ficherosa
losqueestnaccediendo,actividadenred,creacindehilos,etc.

4.PROGRAMACINCONCURRENTE.
Hasta ahora hemos programado aplicaciones secuenciales u orientadas a eventos. Siempre hemos
pensadoennuestrasaplicacionescomosiseejecutarandeformaaisladaenlamquina.Dehecho,el
SOgarantizaqueunprocesonoaccedealespaciodetrabajo(zonadememoria)deotro,estoes,unos
procesosnopuedenaccederalasvariablesdeotrosprocesos.Sinembargo,losprocesos,enocasiones,
necesitancomunicarseentreellos,onecesitanaccederalmismorecurso(fichero,dispositivo,etc.).En
esas situaciones, hay que controlar la forma en la que esos procesos se comunican o acceden a los
recursos,paraquenohayaerrores,resultadosincorrectosoinesperados.

Podemosverlaconcurrenciacomounacarrera,enlaquetodosloscorredorescorrenalmismotiempo
buscandounmismofin,queesganarlacarrera.Enelcasodelosprocesos,competirnporconseguir
todoslosrecursosquenecesiten.

Ladefinicindeconcurrencia,noesalgosencillo.Eneldiccionario,concurrenciaeslacoincidenciade
variossucesosalmismotiempo.

Nosotros podemos decir que dos procesos son concurrentes, cuando la primera instruccin de un
procesoseejecutadespusdelaprimerayantesdelaltimadeotroproceso.

Porotrolado,hemosvistoquelosprocesosactivosseejecutanalternandosusinstantesdeejecucin
enlaCPU.Y,aunquenuestroequipotengamsdeunncleo,lostiemposdeejecucindecadancleo
se repartirn entre los distintos procesos en ejecucin. La planificacin alternando los instantes de
ejecucinenlagestindelosprocesos,hacequelosprocesosseejecutendeformaconcurrente.Olo
queeslomismo:multiproceso=concurrencia.
La programacin concurrente proporciona mecanismos de comunicacin y sincronizacin entre
procesosqueseejecutandeformasimultaneaenunsistemainformtico.Laprogramacinconcurrente
nospermitirdefinirquinstruccionesdenuestrosprocesossepuedenejecutardeformasimultnea
con las de otros procesos, sin que se produzcan errores; y cules deben ser sincronizadas con las de
otrosprocesosparaquelosresultadosseancorrectos.
En el resto de la unidad pondremos especial cuidado en estudiar cmo solucionar los conflictos que
puedensurgircuandodosomsprocesosintentanaccederalmismorecursodeformaconcurrente.

PSPTema1

11

4.1.Paraquconcurrencia?
Porsupuesto,laejecucindeunaaplicacindeformasecuencialyaisladaenunamquinaesloms
eficienteparaesaaplicacin.Entonces,paraqulaconcurrencia?

Lasprincipalesrazonesporlasqueseutilizaunaestructuraconcurrenteson:
- Optimizar la utilizacin de los recursos. Podremos simultanear las operaciones de E/S en los
procesos. La CPU estar menos tiempo ociosa. Un equipo informtico es como una cadena de
produccin,obtenemosmsproductividadrealizandolastareasconcurrentemente.
- Proporcionar interactividad a los usuarios (y animacin grfica). Todos nos hemos desesperado
esperando que nuestro equipo finalizara una tarea. Esto se agravara sino existiera el
multiprocesamiento,slopodramosejecutarprocesosporlotes.
- Mejorarladisponibilidad.Servidorquenorealicetareasdeformaconcurrente,nopodratender
peticionesdeclientessimultneamente.
- Conseguir un diseo conceptualmente ms comprensible y mantenible. El diseo concurrente de
un programa nos llevar a una mayor modularidad y claridad. Se disea una solucin para cada
tareaquetengaquerealizarlaaplicacin(notodomezcladoenelmismoalgoritmo).Cadaproceso
seactivarcuandoseanecesariorealizarcadatarea.
- Aumentarlaproteccin.Tenercadatareaaisladaenunprocesopermitirdepurarlaseguridadde
cada proceso y, poder finalizarlo en caso de mal funcionamiento sin que suponga la cada del
sistema.

Los anteriores pueden parecer los motivos para utilizar concurrencia en sistemas con un solo
procesador. Los actuales avances tecnolgicos hacen necesario tener en cuenta la concurrencia en el
diseodelasaplicacionesparaaprovecharsupotencial.Losnuevosentornoshardwareson:
- Microprocesadoresconmltiplesncleosquecompartenlamemoriaprincipaldelsistema.
- Entornos multiprocesador con memoria compartida. Todos los procesadores utilizan un mismo
espaciodedireccionesamemoria,sintenerconcienciadedndeestninstaladosfsicamentelos
mdulosdememoria.
- Entornosdistribuidos.Conjuntodeequiposheterogneosono,conectadosporredy/oInternet.

Losbeneficiosqueobtendremosaladoptarunmodelodeprogramaconcurrenteson:
- Estructurar un programa como conjunto de procesos concurrentes que interactan, aporta gran
claridadsobreloquecadaprocesodebehacerycuandodebehacerlo.
- Puede conducir a una reduccin del tiempo de ejecucin. Cuando se trata de un entorno
monoprocesador,permitesolaparlostiemposdeE/Sodeaccesoaldiscodeunosprocesosconlos
tiempos de ejecucin de CPU de otros procesos. Cuando el entorno es multiprocesador, la
ejecucindelosprocesosesrealmentesimultneaeneltiempo(paralela),yestoreduceeltiempo
deejecucindelprograma.
- Permiteunamayorflexibilidaddeplanificacin.Procesosdealtaprioridadpuedenserejecutados
antesdeotrosprocesosmenosurgentes.
- La concepcin concurrente del software permite un mejor modelado previo del comportamiento
delprograma,yenconsecuenciaunanlisismsfiabledelasdiferentesopcionesquerequierasu
diseo.

PSPTema1

12

4.2.Condicionesdecompetencia.
Acabamosdeverquetenemosquedesecharlaideadequenuestraaplicacinseejecutardeforma
aislada. Y que, de una forma u otra, va a interactuar con otros procesos. Distinguimos los siguientes
tiposbsicosdeinteraccinentreprocesosconcurrentes:
- Independientes.SlointerfierenenelusodelaCPU.
- Cooperantes.Unprocesogeneralainformacinoproporcionaunservicioqueotronecesita.
- Competidores.Procesosquenecesitanusarlosmismosrecursosdeformaexclusiva.

En el segundo y tercer caso, necesitamos componentes que nos permitan establecer acciones de
sincronizacinycomunicacinentrelosprocesos.
Unprocesoentraencondicindecompetenciaconotro,cuandoambosnecesitanelmismorecurso,ya
sea forma exclusiva o no; por lo que ser necesario utilizar mecanismos de sincronizacin y
comunicacinentreellos.

Un ejemplo sencillo de procesos cooperantes, es "un proceso recolector y un proceso productor". El


procesorecolectornecesitalainformacinqueelotroprocesoproduce.Elprocesorecolector,quedar
bloqueadomientrasquenohayainformacindisponible.

El proceso productor, puede escribir siempre que lo desee (es el nico que produce ese tipo de
informacin). Por supuesto, podemos complicar esto, con varios procesos recolectores para un slo
productor;ysieseproductorpuededarinformacinatodoslosrecolectoresdeformasimultneaono;
o a cuntos procesos recolectores puede dar servicio de forma concurrente. Para determinar si los
recolectorestendrnqueesperarsuturnoono.Peroyaabordaremoslassolucionesaestassituaciones
msadelante.

Enelcasodeprocesoscompetidores,vamosacomenzarviendounasdefiniciones:
- Cuando un proceso necesita un recurso de forma exclusiva, es porque mientras que lo est
utilizando l, ningn otro puede utilizarlo. Se llama regin de exclusin mutua o regin crtica al
conjuntodeinstruccionesenlasqueelprocesoutilizaunrecursoyquesedebenejecutardeforma
exclusivaconrespectoaotrosprocesoscompetidoresporesemismorecurso.
- Cuandomsdeunprocesonecesitanelmismorecurso,antesdeutilizarlotienenquepedirsuuso,
unavezqueloobtienen,elrestodeprocesosquedarnbloqueadosalpediresemismorecurso.Se
dice que un proceso hace un lock (bloqueo) sobre un recurso cuando ha obtenido su uso en
exclusinmutua.
- Porejemplodosprocesos,compitenpordosrecursosdistintos,yambosnecesitanambosrecursos
paracontinuar.Sepuededarlasituacinenlaquecadaunodelosprocesosbloqueeunodelos
recursos, lo que har que el otro proceso no pueda obtener el recurso que le falta; quedando
bloqueadosunprocesoporelotrosinpoderfinalizar.Deadlockointerbloqueo,seproducecuando
los procesos no pueden obtener, nunca, los recursos necesarios para continuar su tarea. El
interbloqueoesunasituacinmuypeligrosa,yaquepuedellevaralsistemaasucadaocuelgue.

Creesquenoesusualquepuedadarseunasituacindeinterbloqueo?Veamosunejemplosencillo:
uncrucedecaminosycuatrocoches.

PSPTema1

13

Elcocheazulnecesitalasregiones1y3paracontinuar,elamarillo:2y1,elrojo:4y2,yelverde:3y4.
Obviamente,nosiemprequedarnbloqueados,perosepuededarlasituacinenlaqueningunoceda.
Entonces,quedarninterbloqueados.

5.COMUNICACINENTREPROCESOS.
Dosespaciosdememoriadedosprocesos:AyB;protegidosconunalambredeespino,laproteccin
delSO,paraimpedirqueunoaccedaalespaciodememoriadelotro.Cadaespaciodememoriaconsus
bloques de cdigo, datos y pila. En el bloque da datos del proceso A, una variable llamada valor,
contieneelvalor20.EnelbloquedecdigodelprocesoB,preguntaporelvalordelavariablevalor.
CmopuedeobteneresevalorelprocesoB?CmopuededarleesevalorelprocesoA?

Como ya hemos comentado en ms de una ocasin a lo largo de esta unidad, cada proceso tiene su
espacio de direcciones privado, al que no pueden acceder el resto de procesos. Esto constituye un
mecanismodeseguridad;imaginaqulocura,sitienesundatoentuprogramaycualquierotro,puede
modificarlodecualquiermanera.Tuprogramageneraraerrores,comopoco.

Porsupuesto,nosdamoscuentadeque,sicadaprocesotienesusdatosyotrosprocesosnopueden
acceder a ellos directamente, cuando otro proceso los necesite, tendr que existir alguna forma de
comunicacinentreellos.

Comunicacinentreprocesos:unprocesodaodejainformacin;recibeorecogeinformacin.

Dosespaciosdememoriadedosprocesos:AyB;protegidosconunalambredeespino,laproteccin
delSO,paraimpedirqueunoaccedaalespaciodememoriadelotro.Cadaespaciodememoriaconsus
bloques de cdigo, datos y pila. En el bloque da datos del proceso A, una variable llamada valor,
contieneelvalor20.EnelbloquedecdigodelprocesoB,preguntaporelvalordelavariablevalor.
CmopuedeobteneresevalorelprocesoB?CmopuededarleesevalorelprocesoA?Loslenguajes
deprogramacinyelsistemaoperativocreanuncanaldecomunicacinporquelosprocesospodrn
comunicarse.Elvalor20,pasaatravsdecanaldecomunicacindeunprocesoaotro.

Loslenguajesdeprogramacinylossistemasoperativos,nosproporcionanprimitivasdesincronizacin
quefacilitanlainteraccinentreprocesosdeformasencillayeficiente.

Unaprimitiva,hacereferenciaaunaoperacindelacualconocemossusrestriccionesyefectos,pero
no su implementacin exacta. Veremos que usar esas primitivas se traduce en utilizar objetos y sus
mtodos, teniendo muy en cuenta sus repercusiones reales en el comportamiento de nuestros
procesos.

PSPTema1

14

Clasificaremos las interacciones entre los procesos y el resto del sistema (recursos y otros procesos),
comoestastres:
- Sincronizacin:Unprocesopuedeconocerelpuntodeejecucinenelqueseencuentraotroenese
determinadoinstante.
- Exclusin mutua: Mientras que un proceso accede a un recurso, ningn otro proceso accede al
mismorecursoovariablecompartida.
- Sincronizacin condicional: Slo se accede a un recurso cuando se encuentra en un determinado
estadointerno.

5.1.Mecanismosbsicosdecomunicacin.
Sipensamosenlaformaenlaqueunprocesopuedecomunicarseconotro.Senosocurrirnestasdos:
- Intercambio de mensajes. Tendremos las primitivas enviar (send) y recibir (receive o wait)
informacin.
- Recursos(omemoria)compartidos.Lasprimitivassernescribir(write)yleer(read)datosenode
unrecurso.

Enelcasodecomunicarprocesosdentrodeunamismamquina,elintercambiodemensajes,sepuede
realizardedosformas:
- Utilizarunbufferdememoria.
- Utilizarunsocket.

La diferencia entre ambos, est en que un socket se utiliza para intercambiar informacin entre
procesos en distintas mquinas a travs de la red; y un buffer de memoria, crea un canal de
comunicacin entre dos procesos utilizando la memoria principal del sistema. Actualmente, es ms
comnelusodesocketsquebuffersparacomunicarprocesos.Trataremosenprofundidadlossockets
enposterioresunidades.Peroveremosunpardeejemplosmuysencillosdeambos.

En java, utilizaremos sockets y buffers como si utilizramos cualquier otro stream o flujo de datos.
Utilizaremoslosmtodosreadwriteenlugardesendreceive.

Conrespectoalaslecturasyescrituras,debemosrecordar,quesernbloqueantes.Esdecir,unproceso
quedarbloqueadohastaquelosdatosestnlistosparapoderserledos.Unaescritura,bloquearal
procesoqueintentaescribir,hastaqueelrecursonoestpreparadoparapoderescribir.Aunque,esto
est relacionado con el acceso a recursos compartidos, cosa que estudiaremos en profundidad, en el
apartado6.1Regionescrticas.

5.2.Tiposdecomunicacin.
Ya hemos visto que dos procesos pueden comunicarse. Remarquemos algunos conceptos
fundamentalessobrecomunicacin.

Encualquiercomunicacin,vamosatenerlossiguienteselementos:
- Mensaje.Informacinqueeselobjetodelacomunicacin.
- Emisor.Entidadqueemite,generaoesorigendelmensaje.
- Receptor.Entidadquerecibe,recogeoesdestinatariadelmensaje.
- Canal.Medioporelqueviajaoesenviadoyrecibidoelmensaje.

PSPTema1

15

Muestralostrestiposdecanales:smplex,dplexysemidplex.Ensmplex,lacomunicacinesentre
unemisoryunreceptor;ylosmensajesviajanenunslosentido,desdeelemisorhaciaelreceptor.En
el caso dplex, los interlocutores pueden ser emisores y receptores al mismo tiempo. Los mensajes
pueden viajar en ambos sentidos de forma simultnea. Por ltimo, el caso semidplex, los
interlocutores,tambinpuedenseremisoresyreceptores;pero,losmensajes,aunqueelcanalpermite
quelosmensajesviajenenambossentidos,nolopuedenhacerdeformasimultaneacomosucedecon
loscanalesdplex.

Podemosclasificarelcanaldecomunicacinsegnsucapacidad,ylossentidosenlosquepuedeviajar
lainformacin,como:
- Smplex. La comunicacin se produce en un slo sentido. El emisor es origen del mensaje y el
receptorescuchaelmensajealfinaldelcanal.Ejemplo:reproduccindeunapelculaenunasalade
cine.
- Dplex(FullDuplex).Puedenviajarmensajesenambossentidossimultneamenteentreemisory
receptor.Elemisorestambinreceptoryelreceptorestambinemisor.Ejemplo:telefona.
- Semidplex (Half Duplex). El mensaje puede viajar en ambos sentidos, pero no al mismo tiempo.
Ejemplo:comunicacinconwalkietalkies.

Otra clasificacin dependiendo de la sincrona que mantengan el emisor y el receptor durante la


comunicacin,ser:
- Sncrona.Elemisorquedabloqueadohastaqueelreceptorrecibeelmensaje.Ambossesincronizan
enelmomentodelarecepcindelmensaje.
- Asncrona.Elemisorcontinaconsuejecucininmediatamentedespusdeemitirelmensaje,sin
quedarbloqueado.
- Invocacinremota.Elprocesoemisorquedasuspendidohastaquerecibelaconfirmacindequeel
receptorrecibidocorrectamenteelmensaje,despusemisoryreceptorejecutarnsncronamente
unsegmentodecdigocomn.

Dependiendodelcomportamientoquetengan losinterlocutoresqueintervienenen lacomunicacin,


tendremoscomunicacin:
- Simtrica.Todoslosprocesospuedenenviaryrecibirinformacin.
- Asimtrica.Slounprocesoactadeemisor,elrestosloescucharnelolosmensajes.

En nuestro anterior ejemplo bsico de comunicacin con sockets: el proceso SocketEscritor, era el
emisor; el proceso SocketLector, era el receptor. El canal de comunicacin: sockets. En el ejemplo,
hemos utilizado del socket en una sola direccin y sncrona; pero los sockets permiten comunicacin
dplexsncrona(encadasentidodelacomunicacin)ysimtrica(ambosprocesospuedenescribireny
leerdelsocket);tambinexistenotrostiposdesocketsquenospermitirnestablecercomunicaciones
asimtricasasncronas(DatagramSocket).

En el caso del ejemplo de las tuberas, la comunicacin que se establece es simplex sncrona y
asimtrica.

Nos damos cuenta, que conocer las caractersticas de la comunicacin que necesitamos establecer
entreprocesos,nospermitirseleccionarelcanal,herramientasycomportamientomsconvenientes.

PSPTema1

16

6.SINCRONIZACINENTREPROCESOS.
Ya tenemos mucho ms claro, que las situaciones en las que dos o ms procesos tengan que
comunicarse,cooperaroutilizarunmismorecurso;implicarquedebahaberciertosincronismoentre
ellos.Obien,unostienenqueesperarqueotrosfinalicenalgunaaccin;o,tienenquerealizaralguna
tareaalmismotiempo.

Enestecaptulo,veremosdistintasproblemticas,primitivasysolucionesdesincronizacinnecesarias
pararesolverlas.Tambinescierto,queelsincronismoentreprocesoslohaceposibleelSO,yloque
hacen los lenguajes de programacin de alto nivel es encapsular los mecanismos de sincronismo que
proporciona cada SO en objetos, mtodos y funciones. Los lenguajes de programacin, proporcionan
primitivasdesincronismoentrelosdistintoshilosquetengaunproceso;estasprimitivasdellenguaje,
lasveremosenlasiguienteunidad.

Comencemos viendo un ejemplo muy sencillo de un problema que se nos plantea de forma ms o
menoscomn:inconsistenciasenlaactualizacindeunvalorcompartidoporvariosprocesos;as,nos
daremoscuentadelaimportanciadelusodemecanismosdesincronizacin.

En programacin concurrente, siempre que accedamos a algn recurso compartido (eso incluye a los
ficheros),debemostenerencuentalascondicionesenlasquenuestroprocesodebehacerusodeese
recurso: ser de forma exclusiva o no? Lo que ya definimos anteriormente como condiciones de
competencia.

Enelcasodelecturasyescriturasenunfichero,debemosdeterminarsiqueremosaccederalfichero
comoslolectura;escritura;olecturaescritura;yutilizarlosobjetosquenospermitanestablecerlos
mecanismosdesincronizacinnecesariosparaque unprocesopuedabloquearelusodel ficheropor
otrosprocesoscuandolloestutilizando.

Estoseconocecomoelproblemadelosprocesoslectoresescritores.Elsistemaoperativo,nosayudar
aresolverlosproblemasqueseplantean;yaque:
- Si el acceso es de slo lectura. Permitir que todos los procesos lectores, que slo quieren leer
informacindelfichero,puedanaccedersimultneamenteal.
- En el caso de escritura, o lecturaescritura. El SO nos permitir pedir un tipo de acceso de forma
exclusiva al fichero. Esto significar que el proceso deber esperar a que otros procesos lectores
terminensusaccesos.Yotrosprocesos(lectoresoescritores),esperarnaqueeseprocesoescritor
hayafinalizadosuescritura.

Debemostenerencuentaque,nosotros,noscomunicamosconelSOatravsdelosobjetosymtodos
proporcionados por un lenguaje de programacin; y, por lo tanto, tendremos que consultar
cuidadosamente la documentacin de las clases que estamos utilizando para conocer todas las
peculiaridadesdesucomportamiento.

6.1.Regionescrticas.
La definicin comn, y que habamos visto anteriormente, de una regin o seccin crtica, es, el
conjuntodeinstruccionesenlasqueunprocesoaccedeaunrecursocompartido.Paraqueladefinicin
seacorrecta,aadiremosque,lasinstruccionesqueformanesaregincrtica,seejecutarndeforma
indivisibleoatmicaydeformaexclusivaconrespectoaotrosprocesosqueaccedanalmismorecurso
compartidoalqueseestaccediendo.

PSPTema1

17

Alidentificarydefinirnuestrasregionescrticasenelcdigo,tendremosencuenta:
- Se protegern con secciones crticas slo aquellas instrucciones que acceden a un recurso
compartido.
- Lasinstruccionesqueformanunaseccincrtica,sernlasmnimas.Incluirnslolasinstrucciones
imprescindiblesquedebanserejecutadasdeformaatmica.
- Sepuedendefinirtantasseccionescrticascomoseannecesarias.
- Unnicoprocesoentraensuseccincrtica.Elrestodeprocesosesperanaquestesalgadesu
seccincrtica.Elrestodeprocesosesperan,porqueencontrarnelrecursobloqueado.Elproceso
queestensuseccincrtica,eselquehabloqueadoelrecurso.
- Al final de cada seccin crtica, el recurso debe ser liberado para que puedan utilizarlo otros
procesos.

Algunoslenguajesdeprogramacinpermitendefinirbloquesdecdigocomoseccionescrticas.Estos
lenguajes, cuentan con palabras reservadas especficas para la definicin de estas regiones. En Java,
veremoscmodefinirestetipoderegionesaniveldehiloenposterioresunidades.

Aniveldeprocesos,loprimero,haremos,quenuestroejemplodeaccesosmltiplesaunfichero,sea
correctoparasuejecucinenunentornoconcurrente.Enestapresentacinidentificaremoslaseccin
o secciones crticas y qu objetos debemos utilizar para conseguir que esas secciones se ejecuten de
formaexcluyente.

Ennuestroejemplo,hemosvistocmodefinirunaseccincrticaparaprotegerlasactualizacionesde
unfichero.Cualquieractualizacindedatosenunrecursocompartido,necesitarestablecerunaregin
crticaqueimplicarcomomnimoestasinstrucciones:
- Leereldatoquesequiereactualizar.Pasareldatoalazonadememorialocalalproceso.
- Realizarelclculodeactualizacin.Modificareldatoenmemoria.
- Escribireldatoactualizado.Llevareldatomodificadodememoriaalrecursocompartido.

Debemosdarnoscuentadequenosreferimosaunrecursocompartidodeformagenrica,eserecurso
compartidopodrser:memoriaprincipal,fichero,basededatos,etc.

6.1.1.Categoradeprocesoclientesuministrador.
En este caso, vamos a hacer una introduccin a los procesos que podremos clasificar dentro de la
categoraclientesuministrador.
- Cliente.Esunprocesoquerequiereosolicitainformacinoserviciosqueproporcionaotroproceso.
- Suministrador.Probablemente,tesuenemseltrminoservidor;pero,noqueremosconfundirnos
conelconceptodeservidorenelqueprofundizaremosenprximasunidades.Suministrador,hace
referencia a un concepto de proceso ms amplio; un suministrador, suministra informacin o
servicios;yaseaatravsmemoriacompartida,unfichero,red,ocualquierotrorecurso.
- Informacin o servicio es perecedero. La informacin desaparece cuando es consumida por el
cliente; y, el servicio es prestado en el momento en el que cliente y suministrador estn
sincronizados.

Entre un cliente y un suministrador (ojo, empecemos con un proceso de cada), se establece


sincronismoentreellos,pormediodeintercambiodemensajesoatravsdeunrecursocompartido.
Entre un cliente y un servidor, la comunicacin se establece de acuerdo a un conjunto mensajes a
intercambiar con sus correspondientes reglas de uso; llamado protocolo. Podremos implementar

PSPTema1

18

nuestros propios protocolos, o, protocolos existentes (ftp, http, telnet, smtp, pop3, ); pero an
tenemosqueveralgunosconceptosmsantesdeimplementarprotocolos.

Clienteysuministrador,son,losprocesosquevimosennuestrosejemplosdeusobsicodesocketsy
comunicacin a travs de tuberas (apartado 5.1. Mecanismos bsicos de comunicacin); y, por
supuesto,sepuedeextenderaloscasosenlosquetengamosunprocesoqueleeyotroqueescribeen
unrecursocompartido.

Entre procesos cliente y suministrador debemos disponer de mecanismos de sincronizacin que


permitanque:
- Unclientenodebepoderleerundatohastaquenohayasidocompletamentesuministrado.Asnos
aseguraremosdequeeldatoledoescorrectoyconsistente.
- Un suministrador ir produciendo su informacin, que en cada instante, no podr superar un
volumen de tamao mximo establecido; por lo que el suministrador, no debe poder escribir un
datosisehaalcanzadoesemximo.Estoesas,paranodesbordaralcliente.

Lomssencillo,espensarqueelsuministradorsloproduceundatoqueelclientetienequeconsumir.
Qusincronismohacefaltaenestasituacin?
- Elclientetienequeesperaraqueelsuministradorhayageneradoeldato.
- Elsuministradorgeneraeldatoydealgunaformaavisaalclientedequepuedeconsumirlo.

Podemospensarendarunasolucinaestasituacinconprogramacinsecuencial.Incluyendounbucle
enelclienteenelqueesttesteandoelvalordeunavariablequeindicaqueeldatohasidoproducido.

Como podemos ver en este grfico el pseudocdigo del cliente incluye el bucle del que habamos
mencionado. Ese bucle hace que esta solucin sea poco eficiente, ya que el proceso cliente estara
consumiendotiempodeCPUsinrealizarunatareaproductiva;loqueconocemoscomoesperaactiva.
Adems,sielprocesosuministrador quedarabloqueadoporalgunarazn,ellotambin bloquearaal
procesocliente.

Enlosprximosapartados,vamosacentrarnosenlosmecanismosdeprogramacinconcurrenteque
nospermitenresolverestosproblemasdesincronizacinentreprocesosdeformaeficiente,llamados
primitivas de programacin concurrente: semforos y monitores; y son estas primitivas las que
utilizaremosparaprotegerlasseccionescrticasdenuestrosprocesos.

6.2.Semforos.
Veamosunaprimerasolucineficientealosproblemasdesincronismo,entreprocesosqueaccedena
unmismorecursocompartido.

Podemosvervariosprocesosquequierenaccederalmismorecurso,comocochesquenecesitanpasar
poruncrucedecalles.Ennuestroscruces,lossemforosnosindicancundopodemospasarycundo
no.Nosotros,antesdeintentarentrarenelcruce,primeromiramoselcolorenelqueseencuentrael
semforo,ysiestenverde(abierto),pasamos.Sielcoloresrojo(cerrado),quedamosalaesperade
queesemismosemforonosindiquequepodemospasar.Estemismofuncionamientoeselquevana
seguir nuestros semforos en programacin concurrente. Y, son una solucin eficiente, porque los
procesosquedarnbloqueados(ynoenesperaactiva)cuandonopuedanaccederalrecurso,yserel
semforoelquevayadesbloquendoloscuandopuedanpasar.

PSPTema1

19

Un semforo, es un componente de bajo nivel de abstraccin que permite arbitrar los accesos a un
recursocompartidoenunentornodeprogramacinconcurrente.

Alutilizarunsemforo,loveremoscomountipodato,quepodremosinstanciar.Eseobjetosemforo
podrtomarundeterminadoconjuntodevaloresysepodrrealizarconlunconjuntodeterminado
de operaciones. Un semforo, tendr tambin asociada una lista de procesos suspendidos que se
encuentranalaesperadeentrarenelmismo.

Dependiendodelconjuntodedatosquepuedatomarunsemforo,tendremos:
- Semforos binarios. Aquellos que pueden tomar slo valores 0 1. Como nuestras luces verde y
roja.
- Semforosgenerales.PuedentomarcualquiervalorNatural(enterononegativo).

Encualquiercaso,losvaloresquetomaunsemfororepresentan:
- Valoriguala0.Indicaqueelsemforoestcerrado.
- Valormayorde0.Elsemforoestabierto.

Cualquiersemforopermitedosoperacionesseguras(laimplementacindelsemforogarantizaquela
operacin de chequeo del valor del semforo, y posterior actualizacin segn proceda, es siempre
segurarespectoaotrosaccesosconcurrentes):
objSemaforo.wait(): Si el semforo no es nulo (est abierto) decrementa en uno el valor del
semforo.Sielvalordelsemforoesnulo(estcerrado),elprocesoqueloejecutasesuspendeyse
encolaenlalistadeprocesosenesperadelsemforo.
objSemaforo.signal():Sihayalgnprocesoenlalistadeprocesosdelsemforo,activaunodeellos
paraqueejecutelasentenciaquesiguealwaitquelosuspendi.Sinohayprocesosenesperaenla
listaincrementaen1elvalordelsemforo.

Ademsdelaoperacinseguraanterior,conunsemforo,tambinpodremosrealizarunaoperacin
nosegura,queeslainicializacindelvalordelsemforo.Esevalorindicarcuntosprocesospueden
entrarconcurrentementeenl.Estainicializacinlarealizaremosalcrearelsemforo.

Parautilizarsemforos,seguiremoslossiguientespasos:
Unprocesopadrecreareinicializartantosemforo.
El proceso padre crear el resto de procesos hijo pasndoles el semforo que ha creado. Esos
procesoshijosaccedenalmismorecursocompartido.
Cadaprocesohijo,harusodelasoperacionesseguraswaitysignalrespetandoesteesquema:
- objSemaforo.wait();Paraconsultarsipuedeaccederalaseccincrtica.
- Seccincrtica;InstruccionesqueaccedenalrecursoprotegidoporelsemforoobjSemaforo.
- objSemaforo.signal();Indicarqueabandonasuseccinyotroprocesopodrentrar.
- El proceso padre habr creado tantos semforos como tipos secciones crticas distintas se
puedan distinguir en el funcionamiento de los procesos hijos (puede ocurrir, uno por cada
recursocompartido).

La ventaja de utilizar semforos es que son fciles de comprender, proporcionan una gran capacidad
funcional(podemosutilizarlospararesolvercualquierproblemadeconcurrencia).Pero,sunivelbajode
abstraccin,loshacepeligrososdemanejary,amenudo,sonlacausademuchoserrores,comoesel

PSPTema1

20

interbloqueo.Unsimpleolvidoocambiodeordenconduceabloqueos;yrequierenquelagestinde
unsemforosedistribuyaportodoelcdigoloquehaceladepuracindeloserroresensugestines
muydifcil.

En java, encontramos la clase Semaphore dentro del paquete java.util.concurrent; y su uso real se
aplicaaloshilosdeunmismoproceso,paraarbitrarelaccesodeesoshilosdeformaconcurrenteauna
mismaregindelamemoriadelproceso.Porello,veremosejemplosdesuusoensiguienteunidades
deestemdulo.

6.3.Monitores.
Los monitores, nos ayudan a resolver las desventajas que encontramos en el uso de semforos. El
problema en el uso de semforos es que, recae sobre el programador o programadora la tarea
implementarelcorrectousodecadasemforoparalaproteccindecadarecursocompartido;y,sigue
estandodisponibleelrecursoparautilizarlosinlaproteccindeunsemforo.Losmonitoressoncomo
guardaespaldas,encargadosdelaproteccindeunoovariosrecursosespecficos;peroencierranesos
recursosdeformaqueelprocesoslopuedeaccederaesosrecursosatravsdelosmtodosqueel
monitorexpone.

Unmonitor,esuncomponentedealtoniveldeabstraccindestinadoagestionarrecursosquevana
ser accedidos de forma concurrente. Los monitores encierran en su interior los recursos o variables
compartidascomocomponentesprivadasygarantizanelaccesoaellasenexclusinmutua.

Ladeclaracindeunmonitorincluye:
- Declaracindelasconstantes,variables,procedimientosyfuncionesquesonprivadosdelmonitor
(soloelmonitortienevisibilidadsobreellos).
- Declaracindelosprocedimientosyfuncionesqueelmonitorexpone(pblicos)yqueconstituyen
lainterfazatravsdelasquelosprocesosaccedenalmonitor.
- Cuerpo del monitor, constituido por un bloque de cdigo que se ejecuta al ser instanciado o
inicializadoelmonitor.Sufinalidadesinicializarlasvariablesyestructurasinternasdelmonitor.
- Elmonitorgarantizaelaccesoalcdigointernoenrgimendeexclusinmutua.
- Tieneasociadaunalistaenlaqueseincluyenlosprocesosquealtratardeaccederalmonitorson
suspendidos.

LospaquetesJava,noproporcionanunaimplementacindeclaseMonitor(habraqueimplementarun
monitor para cada variable o recurso a sincronizar). Pero, siempre podemos implementarnos nuestra
propiaclasemonitor,haciendousodesemforosparaello.

Pensemos un poco, hemos utilizado objetos que pueden encajar con la declaracin de un monitor
aunquesutipodedatonofueramonitor?,no?,seguro?Cuandorealizamosunalecturaoescrituraen
fichero, nuestro proceso queda bloqueado hasta que el sistema ha realizado completamente la
operacin.Nosotrosinicializamoselusodelficheroindicando surutaalcrearelobjeto,porejemplo,
FileReader; y utilizamos los mtodos expuestos por ese objeto para realizar las operaciones que
deseamos con ese fichero. Sin embargo, el cdigo que realmente realiza esas operaciones es el
implementado en la clase FileReader. Si bien, esos objetos no proporcionan exclusin mutua en los
accesosalrecurso;o,porlomenos,noentodossusmtodos.Aunas,podemosdecirqueutilicemos
objetosdetipomonitoralaccederalosrecursosdelsistema,aunquenotengancomonombreMonitor.

PSPTema1

21

Lasventajasqueproporcionaelusodemonitoresson:
- Uniformidad:Elmonitorproveeunanicacapacidad,laexclusinmutua,noexistelaconfusinde
lossemforos.
- Modularidad:Elcdigoqueseejecutaenexclusinmutuaestseparado,nomezcladoconelresto
delprograma.
- Simplicidad:Elprogramadoroprogramadoranonecesitapreocuparsedelasherramientasparala
exclusinmutua.
- Eficiencia de la implementacin: La implementacin subyacente puede limitarse fcilmente a los
semforos.

Y,ladesventaja:
- Interaccindemltiplescondicionesdesincronizacin:Cuandoelnmerodecondicionescrece,y
sehacencomplicadas,lacomplejidaddelcdigocrecedemaneraextraordinaria.

6.3.1.Monitores:Lecturasyescriturasbloqueantesenrecursoscompartidos.
Recordemos,elfuncionamientodelosprocesosclienteysuministradorpodraserelsiguiente:
- Utilizanunrecursodelsistemaamododebuffercompartidoenelque,elsuministradorintroduce
elementos;y,elclientelosextrae.
- Se sincronizarn utilizando una variable compartida que indica el nmero de elementos que
contieneesebuffercompartido,cuyotamaomximoserN.
- El proceso suministrador, siempre comprueba antes de introducir un elemento, que esa variable
tengaunvalormenorqueN.Alintroducirunelementoincrementaenunolavariablecompartida.
- Elprocesocliente,extraerunelementodelbufferydecrementarelvalordelavariable;siempre
queelvalordelavariableindiquequehayelementosqueconsumir.

Losmecanismosdesincronismoquenospermitenelanteriorfuncionamientoentreprocesos,sonlas
lecturas y escrituras bloqueantes en recursos compartidos del sistema (streams). En el caso de java,
disponemosde:

Arquitecturajava.io.
- Implementacin de clientes: Para sus clases derivadas de Reader como son InputStream,
InputStreamReader, FileReader, ; los mtodos read(buffer) y read(buffer, desplazamiento,
tamao).
- Implementacin de suministradores: Con sus anlogos derivados de Writer; los mtodos
write(info)ywrite(info,desplazamiento,tamao).
Arquitecturajava.nio(disponibledesdelaversin1.4deJava).Dentrodejava.nio.channels:
- Implementacindeclientes:SusclasesFileChannelySocketChannel;losmtodosread(buffer)y
read(buffer,desplazamiento,tamao).
- Implementacin de suministradores: Sus clases FileChannel y SocketChannel; los mtodos
write(info)ywrite(info,desplazamiento,tamao).

Y recordemos que, como vimos en el apartado 6.1 Regiones crticas; tendremos que hacer uso del
mtodo lock() de FileChannel; para implementar las secciones crticas de forma correcta. Tanto para
suministradorescomoparaclientes,cuandoestemosutilizandounficherocomocanaldecomunicacin
entreellos.

PSPTema1

22

Si nos damos cuenta, hasta ahora slo hemos hablado de un proceso Suministrador y un proceso
cliente.Elcasoenelqueunsuministradortengaquedarservicioamsdeuncliente,aprenderemosa
solucionarlo utilizando hilos o threads, e implementando esquemas de clienteservidor, en las
prximasunidades.Noobstante,debemostenerclaro,queelsincronismocuandohayunainformacin
quegeneraunproceso(ohilo),yquerecolectaotroproceso(ohilo)atenderalascaractersticasque
hemosdescritoenestosaparatados.

6.4.Memoriacompartida.
Unaformanaturaldecomunicacinentreprocesoseslaposibilidaddedisponerdezonasdememoria
compartidas (variables, buffers o estructuras). Adems, los mecanismos de sincronizacin en
programacinconcurrentequehemosvisto:regionescrticas,semforosymonitores;tienensurazn
deserenlaexistenciaderecursoscompartidos;incluidalamemoriacompartida.

Cuandosecreaunproceso,elsistemaoperativoleasignalosrecursosinicialesquenecesita,siendoel
principal recurso: la zona de memoria en la que se guardarn sus instrucciones, datos y pila de
ejecucin. Pero como ya hemos comentado anteriormente, los sistemas operativos modernos,
implementan mecanismos que permiten proteger la zona de memoria de cada proceso siendo sta
privada para cada proceso, de forma que otros no podrn acceder a ella. Con esto, podemos pensar
quenohayposibilidaddetenercomunicacinentreprocesospormediodememoriacompartida.Pues,
no es as. En la actualidad, la programacin multihilo (que abordaremos en la siguiente unidad y, se
refiere, a tener varios flujos de ejecucin dentro de un mismo proceso, compartiendo entre ellos la
memoriaasignadaalproceso),nospermitirexaminaralmximoestafuncionalidad.

Pensemos ahora en problemas que pueden resultar complicados si los resolvemos con un slo
procesador,porejemplo:laordenacindeloselementosdeunamatriz.Ordenarunamatrizpequea,
no supone mucho problema; pero si la matriz se hace muy muy grande... Si disponemos de varios
procesadores y somos capaces de partir la matriz en trozos (convertir un problema grande en varios
ms pequeos) de forma que cada procesador se encargue de ordenar cada parte de la matriz.
Conseguiremos resolver el problema en menos tiempo; eso s, teniendo en cuenta la complejidad de
dividirelproblemayasignaracadaprocesadorelconjuntodedatos(ozonadememoria)quetieneque
manejarylatareaoprocesoarealizar(yfinalizarconlatareadecombinartodoslosresultadospara
obtener la solucin final). En este caso, tenemos sistemas multiprocesador como los actuales
microprocesadores de varios ncleos, o los supercomputadores formados por mltiples ordenadores
completos(eidnticos)trabajandocomounnicosistema.Enamboscasos,contaremosconayudade
sistemas especficos (sistemas operativos o entornos de programacin), preparados para soportar la
cargadecomputacinenmltiplesncleosy/oequipos.

6.5.Colademensajes.
Elpasodemensajesesunatcnicaempleadaenprogramacinconcurrenteparaaportarsincronizacin
entre procesos y permitir la exclusin mutua, de manera similar a como se hace con los semforos,
monitores,etc.Suprincipalcaractersticaesquenoprecisadememoriacompartida.

Los elementos principales que intervienen en el paso de mensajes son el proceso que enva, el que
recibeyelmensaje.

Dependiendo de si el proceso que enva el mensaje espera a que el mensaje sea recibido, se puede
hablardepasodemensajessncronooasncrono:

PSPTema1

23

Enelpasodemensajesasncrono,elprocesoqueenva,noesperaaqueelmensajesearecibido,y
continasuejecucin,siendoposiblequevuelvaagenerarunnuevomensajeyaenviarloantesde
quesehayarecibidoelanterior.Porestemotivosesuelenemplearbuzonesocolas,enlosquese
almacenan los mensajes a espera de que un proceso los reciba. Generalmente empleando este
sistema,elprocesoqueenvamensajesslosebloqueaopara,cuandofinalizasuejecucin,osiel
buzn est lleno. Para conseguir esto, estableceremos una serie de reglas de comunicacin (o
protocolo)entreemisoryreceptor,deformaqueelreceptorpuedaindicaralemisorqucapacidad
restantequedaensucolademensajesysiestllenoono.
Enelpasodemensajessncrono,elprocesoqueenvaelmensajeesperaaqueunprocesoloreciba
para continuar su ejecucin. Por esto se suele llamar a esta tcnica encuentro, o rendezvous.
Dentrodelpasodemensajessncronoseenglobaalallamadaaprocedimientoremoto(RPC),muy
popularenlasarquitecturascliente/servidor.

7.REQUISITOS:SEGURIDAD,VIVACIDAD,EFICIENCIAYREUSABILIDAD.
Como cualquier aplicacin, los programas concurrentes deben cumplir una serie de requisitos de
calidad. En este apartado, veremos algunos aspectos que nos permitirn desarrollar proyectos
concurrentescon,casi,lacompletacertezadequeestamosdesarrollandosoftwaredecalidad.

Todoprogramaconcurrentedebesatisfacerdostiposdepropiedades:
Propiedadesdeseguridad("safety"):estaspropiedadessonrelativasaqueencadainstantedela
ejecucinnodebehaberseproducidoalgoquehagaentraralprogramaenunestadoerrneo:
- Dosprocesosnodebenentrarsimultneamenteenunaseccincrtica.
- Se respetan las condiciones de sincronismo, como: el consumidor no debe consumir el dato
antes de que el productor los haya producido; y, el productor no debe producir un dato
mientrasqueelbufferdecomunicacinestlleno.
Propiedadesdevivacidad("liveness"):cadasentenciaqueseejecuteconduceenalgnmodoaun
avance constructivo para alcanzar el objetivo funcional del programa. Son, en general, muy
dependientes de la poltica de planificacin que se utilice. Ejemplos de propiedades de vivacidad
son:
- Nodebenproducirsebloqueosactivos(livelock).Conjuntosdeprocesosqueejecutandeforma
continuadasentenciasquenoconducenaunprogresoconstructivo.
- Aplazamiento indefinido (starvation): consiste en el estado al que puede llegar un programa
queaunquepotencialmentepuedeavanzardeformaconstructiva.Estopuedesuceder,como
consecuencia de que no se le asigna tiempo de procesador en la poltica de planificacin; o,
porque en las condiciones de sincronizacin hemos establecido criterios de prioridad que
perjudicansiemprealmismoproceso.
- Interbloqueo (deadlock): se produce cuando los procesos no pueden obtener, nunca, los
recursosnecesariosparafinalizarsutarea.Vimosunejemplodeestasituacinenelapartado
4.2Condicionesdecompetencia.

Es evidentemente, que tambin nos preocuparemos por disear nuestras aplicaciones para que sean
eficientes:
- Noutilizarnmsrecursosdelosnecesarios.
- Buscaremoslarigurosidadensuimplementacin:todalafuncionalidadesperadadeformacorrecta
yconcreta.

PSPTema1

24

Y,encuantoalareusabilidad,debemostenerloya,muybienaprendido:
- Implementarelcdigodeformamodular:definiendoclases,mtodos,funciones,...
- Documentarcorrectamenteelcdigoyelproyecto.

Paraconseguirtodoloanteriorcontaremosconlospatronesdediseo;ypondremosespecialcuidado
endocumentarydepurarconvenientemente.

7.1.Arquitecturasypatronesdediseo.
LaArquitecturadelSoftware,tambindenominadaarquitecturalgica,eseldiseodemsaltonivel
de la estructura de un sistema. Consiste en un conjunto de patrones y abstracciones coherentes con
base a las cuales se pueden resolver los problemas. A semejanza de los planos de un edificio o
construccin,estasindicanlaestructura,funcionamientoeinteraccinentrelaspartesdelsoftware.

La arquitectura de software, tiene que ver con el diseo y la implementacin de estructuras de


softwaredealtonivel.Eselresultadodeensamblarunciertonmerodeelementosarquitectnicosde
formaadecuadaparasatisfacerlamayorfuncionalidadyrequerimientosdedesempeodeunsistema,
as como requerimientos no funcionales, como la confiabilidad, escalabilidad, portabilidad, y
disponibilidad;mantenibilidad,auditabilidad,flexibilidadeinteraccin.

Generalmente, no es necesario inventar una nueva arquitectura de software para cada sistema de
informacin. Lo habitual es adoptar una arquitectura conocida en funcin de sus ventajas e
inconvenientesparacadacasoenconcreto.As,lasarquitecturasmsuniversalesson:
- Monoltica.Elsoftwareseestructuraengruposfuncionalesmuyacoplados.
- Clienteservidor.Elsoftwarerepartesucargadecmputoendospartesindependientes:consumir
unservicioyproporcionarunservicio.
- Arquitectura de tres niveles. Especializacin de la arquitectura clienteservidor donde la carga se
divide en capas con un reparto claro de funciones: una capa para la presentacin (interfaz de
usuario), otra para el clculo (donde se encuentra modelado el negocio) y otra para el
almacenamiento(persistencia).Unacapasolamentetienerelacinconlasiguiente.

Otrasarquitecturasmenosconocidasson:
- Enpipeline.Consisteenmodelarunprocesocomprendidoporvariasfasessecuenciales,siendola
entradadecadaunalasalidadelaanterior.
- Entre pares. Similar a la arquitectura clienteservidor, salvo porque podemos decir que cada
elementoesigualaotro(actasimultneamentecomoclienteycomoservidor).
- En pizarra. Consta de mltiples elementos funcionales (llamados agentes) y un instrumento de
control o pizarra. Los agentes estarn especializados en una tarea concreta o elemental. El
comportamientobsicodecualquieragente,es:examinarlapizarra,realizarsutareayescribirsus
conclusionesenlamismapizarra.Deestamanera,otroagentepuedetrabajarsobrelosresultados
generadosporotro.
- Orientada a servicios (Service Oriented Architecture SOA) Se disean servicios de aplicacin
basados en una definicin formal independiente de la plataforma subyacente y del lenguaje de
programacin, con una interfaz estndar; as, un servicio C# podr ser usado por una aplicacin
Java.
- Dirigidaporeventos.Centradaenlaproduccin,deteccin,consumode,yreaccinaeventos.

PSPTema1

25

Lospatronesdediseo,sedefinencomosolucionesdediseoquesonvlidasendistintoscontextosy
quehansidoaplicadasconxitoenotrasocasiones:Sobreuntablerounconjutodemoldesconmoldes
decoloresparafigurasdeplastilinadeanimales,geomtiras,etc.

Ayudana"arrancar"eneldiseodeunprogramacomplejo.
- Danunadescomposicindeobjetosinicial"bienpensada".
- Pensadosparaqueelprogramaseaescalableyfcildemantener.
- Otragenteloshausadoyleshaidobien.
Ayudanareutilizartcnicas.
- Muchagentelosconoceyyasabecmoaplicarlos.
- Estnenunaltoniveldeabstraccin.
- Eldiseosepuedeaplicaradiferentessituaciones.

Existendosmodelosbsicosdeprogramasconcurrentes:
- Unprogramaresultadelaactividaddeobjetosactivosqueinteraccionanentresidirectamenteoa
travsderecursosyserviciospasivos.
- Un programa resulta de la ejecucin concurrente de tareas. Cada tarea es una unidad de trabajo
abstractaydiscretaqueidealmentepuederealizarseconindependenciadelasotrastareas.

Noesobligatorioutilizarpatrones,soloesaconsejableenelcasodetenerelmismoproblemaosimilar
quesolucionaelpatrn,siempreteniendoencuentaqueenuncasoparticularpuedenoseraplicable.

7.2.Documentacin
Paraladocumentacindenuestrasaplicacionestendremosencuenta:
Hayqueaadirexplicacionesatodoloquenoesevidente.Pero,nohayquerepetirloquesehace,sino
explicarporqusehace.

Documentandonuestrocdigoresponderemosaestaspreguntas:
- Dequseencargaunaclase?Unpaquete?
- Quhaceunmtodo?Culeselusoesperadodeunmtodo?
- Paraquseusaunavariable?Culeselusoesperadodeunavariable?
- Qualgoritmoestamosusando?Dedndelohemossacado?
- Qulimitacionestieneelalgoritmo?...laimplementacin?
- Qusedeberamejorar...sihubieratiempo?

EnlasiguientetablatenemosunresumendelosdistintostiposdecomentariosenJava:

Javadoc
Comienzancon"/**",sepueden
prolongaralolargodevariaslneas(que
probablementecomiencenconel
carcter"*")yterminanconlos
caracteres"*/".

Sintxis

Propsito

Cuentaconetiquetasespecficastipo:
@author,@param,@return,...
Generardocumentacinexterna.

Unalnea
Comienzancon"//"y
terminanconlalnea.

TipoC
Comienzancon"/*",sepueden
prolongaralolargodevariaslneas
(queprobablementecomiencencon
elcarcter"*")yterminanconlos
caracteres"*/".

Documentarcdigoqueno
necesitamosqueaparezca
enladocumentacin
externa.

Eliminarcdigo.

PSPTema1

26

Uso

Obligado:

Alprincipiodecadaclase.
Alprincipiodecadamtodo.
Antesdecadavariabledeclase.

Alprincipiode
fragmentodecdigono
evidente.
Alolargodelosbucles.
Siemprequehagamos
algorarooqueel
cdigonoseaevidente.

Ocurreamenudoquecdigoobsoleto
noqueremosquedesaparezca,sino
mantenerlo"porsiacaso".Paraque
noseejecute,secomenta.

Ademsdeloanterior,aldocumentarnuestrasaplicacionesconcurrentesdestacaremos:
- Las condiciones de sincronismo que se hayan implementado en la clase o mtodo (en la
documentacinjavadoc).
- Destacaremos las regiones crticas que hayamos identificado y el recurso que compartido a
proteger.

7.3.Dificultadesenladepuracin.
Cuando estamos programando aplicaciones que incluyen mecanismos de sincronizacin y acceden a
recursos de forma concurrente junto con otras aplicaciones. A la hora de depurarlas, nos
enfrentaremosa:
- Losmismosproblemasdedepuracindeunaaplicacinsecuencial.
- Adems de nuevos errores de temporizacin y sincronizacin propios de la programacin
concurrente.

Losprogramassecuencialespresentanunalneasimpledecontroldeflujo.Lasoperacionesdeestetipo
deprogramasestnestrictamenteordenadoscomounasecuenciatemporallineal.
El comportamientodelprogramaessolofuncindelanaturalezadelasoperacionesindividuales
queconstituyeelprogramaydelordenenqueseejecutan.
En los programas secuenciales, el tiempo que tarda cada operacin en ejecutarse no tiene
consecuenciassobreelresultado.
Paravalidarunprogramasecuencialnecesitaremoscomprobar:
- Lacorrectarespuestaacadasentencia.
- Elcorrectoordendeejecucindelassentencias.

Para validar un programa concurrente se requiere comprobar los mismos aspectos que en los
programassecuenciales,ademsdelossiguientesnuevosaspectos:
Las sentencias se pueden validar individualmente solo si no estn involucradas en el uso de
recursoscompartidos.
Cuando existen recursos compartidos, los efectos de interferencia entre las sentencias
concurrentespuedensermuyvariadosylavalidacinesmuydifcil.Comprobaremoslacorreccin
enladefinicindelasregionescrticasyquesecumplelaexclusinmutua.
Al comprobar la correcta implementacin del sincronismo entre aplicaciones; que es forzar la
ejecucin secuencial de tareas de distintos procesos, introduciendo sentencias explcitas de
sincronizacin.Tendremosencuentaqueeltiemponoinfluyesobreelresultado.

El problema es que las herramientas de depuracin no nos proporcionan toda la funcionalidad que
quisiramosparapoderdepurarnuestrosprogramasconcurrentes.

PSPTema1

27

Conquherramientascontamosparadepurarprogramasconcurrentes?
Imagendeunapiscinaenlaquehayvariosnadadoresnadando,enalgunoscasos,compartiendocalle.
El depurador del IDE NetBeans. En la Unidad 2, veremos que el depurador de NetBeans, s est
preparado para la depuracin concurrente de hilos dentro de un mismo proceso. En esta unidad
estamostratandoprocesosindependientes.
Hacervolcadosdeactividadenunficherodelogoenpantalladesalida(nospermitirhacernosuna
ideadeloquehaestadopasandodurantelaspruebasdedepuracin).
Herramientasdedepuracinespecficas:TotalView(SWcomercial),StreamItDebuggerTool(plugin
paraeclipse),...

Unadelasnuevassituacionesalasquenosenfrentamosesqueaveces,loserroresqueparecenestar
sucediendo,puedendesaparecercuandointroducimoscdigoparatratardeidentificarelproblema.

Nos damos cuenta de la complejidad que entraa depurar el comportamiento de aplicaciones


concurrentes,esporello,quealdisearlas,tendremosencuentalospatronesdediseo,queyaestn
diseados resolviendo errores comunes de la concurrencia. Podemos verlos como 'recetas', que nos
permitenresolverlosproblemas'tipo'quesepresentanendeterminadascondicionesdesincronismo
y/oenlosaccesosconcurrentesaunrecurso.

8.PROGRAMACINPARALELAYDISTRIBUIDA.
Dos procesos se ejecutan de forma paralela, si las instrucciones de ambos se estn ejecutando
realmentedeformasimultnea.Estosucedeenlaactualidadensistemasqueposeenmsdeunncleo
deprocesamiento.

Laprogramacinparalelaydistribuidaconsideranlosaspectosconceptualesyfsicosdelacomputacin
paralela;siempreconelobjetivodemejorarlasprestacionesaprovechadolaejecucinsimultneade
tareas.

Tanto en la programacin paralela como distribuida, existe ejecucin simultnea de tareas que
resuelvenunproblemacomn.Ladiferenciaentreambases:
- La programacin paralela se centra en microprocesadores multincleo (en nuestros PC y
servidores); o ,sobre los llamados supercomputadores, fabricados con arquitecturas especficas,
compuestos por gran cantidad de equipos idnticos interconectados entre s, y que cuentan son
sistemasoperativospropios.
- La programacin distribuida, se centra en sistemas formados por un conjunto de ordenadores
heterogneos interconectados entre s, por redes de comunicaciones de propsito general: redes
de rea local, metropolitana; incluso, a travs de Internet. Su gestin se realiza utilizando
componentes,protocolosestndarysistemasoperativosdered.

Enlacomputacinparalelaydistribuida:
- Cadaprocesadortieneasignadalatareaderesolverunaporcindelproblema.
- En programacin paralela, los procesos pueden intercambiar datos, a travs de direcciones de
memoriacompartidasomedianteunareddeinterconexinpropia.
- En programacin distribuida, el intercambio de datos y la sincronizacin se realizar mediante
intercambiodemensajes.
- Elsistemasepresentacomounaunidadocultandolarealidaddelaspartesqueloforman.

PSPTema1

28

8.1.Conceptosbsicos.
Comencemosrevisandoalgunasclasificacionesdesistemasdistribuidosyparalelos:
Enfuncindelosconjuntosdeinstruccionesydatos(conocidacomolataxonomadeFlynn):
- LaarquitecturasecuencialladenominaramosSISD(singleinstructionsingledata).
- Las diferentes arquitecturas paralelas (o distribuidas) en diferentes grupos: SIMD (single
instructionmultipledata),MISD(multipleinstructionsingledata)yMIMD(multipleinstruction
multipledata),conalgunasvariacionescomolaSPMD(singleprogrammultipledata).
Porcomunicacinycontrol:
- Sistemas de multiprocesamiento simtrico (SMP). Son MIMD con memoria compartida . Los
procesadores se comunican a travs de esta memoria compartida; este es el caso de los
microprocesadoresdemltiplesncleosdenuestrosPCs.
- SistemasMIMDconmemoriadistribuida.Lamemoriaestdistribuidaentrelosprocesadores
(o nodos) del sistema, cada uno con su propia memoria local, en la que poseen su propio
programa y los datos asociados. Una red de interconexin conecta los procesadores (y sus
memorias locales), mediante enlaces (links) de comunicacin, usados para el intercambio de
mensajes entre los procesadores. Los procesadores intercambian datos entre sus memorias
cuandosepideelvalordevariablesremotas.Tiposespecficosdeestossistemasson:
- Clusters. Consisten en una coleccin de ordenadores (no necesariamente homogneos)
conectados por red para trabajar concurrentemente en tareas del mismo programa.
Aunquelainterconexinpuedenoserdedicada.
- Grid.Esunclustercuyainterconexinserealizaatravsdeinternet.

Veamos una introduccin a algunos conceptos bsicos que debemos conocer para desarrollar en
sistemasdistribuidos:
Distribucin: construccin de una aplicacin por partes, a cada parte se le asigna un conjunto de
responsabilidadesdentrodelsistema.
Nudodelared:unoovariosequiposquesecomportancomounaunidaddeasignacinintegrada
enelsistemadistribuido.
Un objeto distribuido es un mdulo de cdigo con plena autonoma que se puede instanciar en
cualquier nudo de la red y a cuyos servicios pueden acceder clientes ubicados en cualquier otro
nudo.
Componente:Elementodesoftwarequeencapsulaunaseriedefuncionalidades.Uncomponente,
es una unidad independiente, que puede ser utilizado en conjunto con otros componentes para
formarunsistemamscomplejo(concebidoporserreutilizable).Tieneespecificado:losservicios
que ofrece; los requerimientos que necesarios para poder ser instalado en un nudo; las
posibilidades de configuracin que ofrece; y, no est ligado a ninguna aplicacin, que se puede
instanciarencualquiernudoysergestionadoporherramientasautomticas.Suscaractersticas:
- Altacohesin:todosloselementosdeuncomponenteestnestrechamenterelacionados.
- Bajoacoplamiento:niveldeindependenciaqueuncomponenterespectoaotros.
Transacciones: Conjunto de actividades que se ejecutan en diferentes nudos de una plataforma
distribuida para ejecutar una tarea de negocio. Una transaccin finaliza cuando todas las parte
implicadas clientes y mltiples servidores confirman que sus correspondientes actividades han
concluidoconxito.PropiedadesACIDdeunatransaccin:
- Atomicidad: Una transaccin es una unidad indivisible de trabajo, Todas las actividades que
comprendedebenserejecutadasconxito.

PSPTema1

29

Congruencia: Despus deque una transaccin ha sido ejecutada, la transaccin debe dejar el
sistemaenestadocorrecto.Sila transaccin nopuederealizarsecon xito, deberestaurarel
sistemaalestadooriginalprevioaliniciodelatransaccin.
- Aislamiento: La transacciones que se ejecutan de forma concurrente no deben tener
interferencias entre ellas. La transaccin debe sincronizar el acceso a todos los recursos
compartidosygarantizarquelasactualizacionesconcurrentesseancompatiblesentresi.
- Durabilidad: Los efectos de una transaccin son permanentes una vez que la transaccin ha
finalizadoconxito.
Gestor de transacciones. Controla y supervisa la ejecucin de transacciones, asegurando sus
propiedadesACID.

8.2.Tiposdeparalelismo.
Las mejoras arquitectnicas que han sufrido los computadores se han basado en la obtencin de
rendimientoexplotandolosdiferentesnivelesdeparalelismo.

Enunsistemapodemosencontrarlossiguientesnivelesdeparalelismo:
- A nivel de bit. Conseguido incrementando el tamao de la palabra del microprocesador. Realizar
operacionessobremayornmerodebits.Estoes,elpasodepalabrasde8bits,a16,a32yenlos
microprocesadoresactualesde64bits.
- A nivel de instrucciones. Conseguida introduciendo pipeline en la ejecucin de instrucciones
mquinaeneldiseodelosmicroprocesadores.
- Aniveldebucle.Consisteendividirlasinteracionesdeunbucleenpartesquesepuedenrealizarde
manera complementaria. Por ejemplo, un bucle de 0 a 100; puede ser equivalente a dos bucles,
unode0a49yotrode50a100.
- Aniveldeprocedimientos.Identificandoqufragmentosdecdigodentrodeunprogramapueden
ejecutarsedemanerasimultneasininterferirlatareadeunaenlaotra.
- A nivel de tareas dentro de un programa. Tareas que cooperan para la solucin del programa
general(utilizadoensistemasdistribuidosyparalelos).
- Aniveldeaplicacindentrodeunordenador.Serefierealosconceptosquevimosalprincipiodela
unidad,propiosdelagestindeprocesosporpartedelsistemaoperativomultitarea:planificador
deprocesos,RoundRobin,quamtum,etc.

En sistemas distribuidos hablaremos del tamao de grano o granularidad, que es una medida de la
cantidaddecomputacindeunprocesosoftware.Yseconsideracomoelsegmentodecdigoescogido
parasuprocesamientoparalelo.Piedrasdemardedistintostamaosycolores.
- ParalelismodeGranoFino:Norequieretenermuchoconocimientodelcdigo,laparalelizacinse
obtiene de forma casi automtica. Permite obtener buenos resultados en eficiencia en poco
tiempo.Porejemplo:ladescomposicindebucles.
- Paralelismo de Grano Grueso: Es una paralelizacin de alto nivel, que engloba al grano fino.
Requieremayorconocimientodelcdigo,puestoqueseparalelizamayorcantidaddel.Consigue
mejores rendimientos, que la paralelizacin fina, ya que intenta evitar los overhead (exceso de
recursosasignadosyutilizados)quesesuelenproducircuandosedivideelproblemaensecciones
muypequeas.Unejemplodeparalelismogruesoloobtenemosdescomponiendoelproblemaen
dominios(dividiendoconjuntodedatosaprocesar,acompaandoaestos,lasaccionesquedeban
realizarsesobreellos).

PSPTema1

30

8.3.Modelosdeinfraestructuraparaprogramacindistribuida.
Lasaplicacionesdistribuidasrequierenque componentes quese ejecutanendiferentes procesadores
se comuniquen entre s. Los modelos de infraestructura que permiten la implementacin de esos
componentes,son:
- Uso de Sockets: Facilitan la generacin dinmica de canales de comunicacin. Es actualmente la
basedelacomunicacin.Peroalserdemuybajoniveldeabstraccin,nosonadecuadosanivelde
aplicacin.
- RemoteProcedureCall(RPC):Abstraelacomunicacinaniveldeinvocacindeprocedimientos.Es
adecuadaparaprogramacinestructuradabasadaenlibreras.
- Invocacinremotadeobjetos:Abstraelacomunicacinalainvocacindemtodosdeobjetosque
seencuentrandistribuidosporelsistemadistribuido.Losobjetosselocalizanporsuidentidad.Es
adecuadaparaaplicacionesbasadasenelparadigmaOO.
RMI (Remote Method Invocation) es la solucin Java para la comunicacin de objetos Java
distribuidos.Presentauninconveniente,yeselpasodeparmetrosporvalorimplicatiempopara
hacerlaserializacin,enviarlosobjetosserializadosatravsdelaredyluegovolverarecomponer
losobjetoseneldestino.
- CORBA (Common Object Request Brocker Architecture) . Para facilitar el diseo de aplicaciones
basadasenelparadigmaCliente/Servidor.Defineservidoresestandarizadosatravsdeunmodelo
de referencia, los patrones de interaccin entre clientes y servidores y las especificaciones de las
APIs.
- MPI ("Message Passing Interface", Interfaz de Paso de Mensajes) es un estndar que define la
sintaxisylasemnticadelasfuncionescontenidasenunabibliotecadepasodemensajesdiseada
paraserusadaenprogramasqueexplotenlaexistenciademltiplesprocesadores.
- La Interfaz de Paso de Mensajes es un protocolo de comunicacin entre computadoras. Es el
estndar para la comunicacin entre los nodos que ejecutan un programa en un sistema de
memoriadistribuida.LasllamadasdeMPIsedividenencuatroclases:
- Llamadasutilizadasparainicializar,administraryfinalizarcomunicaciones.
- Llamadasutilizadasparatransferirdatosentreunpardeprocesos.
- Llamadasparatransferirdatosentrevariosprocesos.
- Llamadasutilizadasparacreartiposdedatosdefinidosporelusuario.
- Mquina paralela virtual. Paquetes software que permite ver el conjunto de nodos disponibles
como una mquina virtual paralela, ofreciendo una opcin prctica, econmica y popular hoy en
daparaaproximarsealcmputoparalelo.

S-ar putea să vă placă și