Diferencia entre revisiones de «Programación multiproceso»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 24: Línea 24:
  
 
Porén, un proceso pode crear novos procesos durante a súa execución, que poden a súa vez, crear novos procesos. Desta forma, a partir dun proceso inicial pódese crear unha xerarquía de procesos.
 
Porén, un proceso pode crear novos procesos durante a súa execución, que poden a súa vez, crear novos procesos. Desta forma, a partir dun proceso inicial pódese crear unha xerarquía de procesos.
 +
 +
=== Clasificación dos tipos de procesos ===
 +
Unha pequena clasificación dos tipos de procesos que se executan no sistema é:
 +
* '''Por lotes'''. Están formados por unha serie de tarefas, das que o usuario só está interesado nu resultado final. O usuario introduce as tarefas e datos iniciais, e deixa que se realice todo o proceso á espera da finalización para obter resultados. Exemplos: impresión de varios documentos, escanear o noso equipo en busca de virus, un programa de cálculo que ten que obter da solución que un algoritmo dará dun problema matemático, etc.
 +
* '''Interactivos'''. É precisa a interacción continua co usuario, que mediante accións suministra datos. Exemplos: o procesador de textos, un formulario que permite introducir datos nunha base de datos, etc.
 +
* '''Tempo real'''. Nestes é crítico o tempo de resposta do sistema. Exeplos: a aplicación GPS que nun dispositivo móvil nos guía, os equipos que controlan os brazos mecánicos en procesos industriáis de fabricación, etc.
  
 
== Fíos ==
 
== Fíos ==

Revisión del 03:31 12 sep 2021

Obxectivos

  • Coñecer os conceptos de programa, proceso, fio e servizo e a relación entre eles.
  • Comprender cómo a técnica do cambio de contexto fai posible a multitarea ou execución simultánea de varios procesos nun mesmo procesador, e un mellor aproveitamento deste.
  • Entender os estados de execución dun proceso e a súa planificación a curto, medio e largo prazo.
  • Identificar os distintos tipos de sistemas multiprocesadores, e a forma na que os diferentes procesadores poden intercambiar información entre sí.
  • Analizar a programación concurrente, a multiprogramación e a programación paralela.
  • Resolver problemas concretos utilizando as clases de Java que permiten crear dinámicamente, e executar, de manera concurrente, novos procesos.
  • Utilizar de xeito efectivo os mecanismos que proporciona Java para xestionar e redireccionar a entrada e a saída estándares e de error de novos procesos creados.

Programas. Procesos, fíos e servizos

Programa e procesos

Un programa conten un conxunto de instruccións que se poden executar directamente nunha máquina. Esta pode ser una máquina física ou, no caso de linguaxes coma Java e .NET, nunha máquina virtual. Un programa é un obxecto estático, normalmente almacenado nun ficheiro binario nun medio de almacenamento secundario, coma pode ser un disco duro.

Un proceso corresponde a unha instancia dun programa en execución. Un proceso é unha entidad dinámica. A execución dun programa comeza coa creación e execución dun proceso; e un proceso pode crear novos procesos se o require.

Para executar un programa, primeiro debe cargarse na memoria. Durante a súa execución, un programa utiliza diversos recursos do sistema:

  • Memoria principal. Consta dunha secuencia de celdas de memoria, todas coa mesma lonxitude en bits, e cada unha identificada pola súa posición. Antes de comenzar a súa execución, un programa debe cargarse nun bloque da memoria principal, que se asigna ó proceso que se crea para executar o programa. Este proceso pode tamén obter máis memoria dinámicamente durante a súa execución.
  • Procesador ou CPU (Central Processing Unit). Executa o proceso que se crea unha vez cargado o programa na memoria. O procesador garda, nun rexistro especial, o contador de programa (PC ou program counter), o enderezo na memoria da instrucción que se está executando. Un proceso non pode operar directamente cos contidos da memoria. Estos deben antes traerse dela e cargarse en rexistros do procesador. As operacións realizanse nunha unidade aritmético-lóxica o UAL (aritmethic and logical unit ou ALU). O seu resultado obtense nun rexistro desde o que se pode transferir a unha posición da memoria.
  • Dispositivos de entrada/saída (E/S). Os procesos comparten os dispositivos de E/S. Debe gardarse información acerca de a qué procesos se lles otorgou acceso a un dispositivo de E/S, e do estado das operacións realizadas sobre él.

Toda la información asociada a un proceso gardase nun bloque de control de proceso (PCB ou process control block). Se o mesmo programa se executa varias veces crearase cada vez un novo proceso, e cada un terá o seu propio PCB.

Porén, un proceso pode crear novos procesos durante a súa execución, que poden a súa vez, crear novos procesos. Desta forma, a partir dun proceso inicial pódese crear unha xerarquía de procesos.

Clasificación dos tipos de procesos

Unha pequena clasificación dos tipos de procesos que se executan no sistema é:

  • Por lotes. Están formados por unha serie de tarefas, das que o usuario só está interesado nu resultado final. O usuario introduce as tarefas e datos iniciais, e deixa que se realice todo o proceso á espera da finalización para obter resultados. Exemplos: impresión de varios documentos, escanear o noso equipo en busca de virus, un programa de cálculo que ten que obter da solución que un algoritmo dará dun problema matemático, etc.
  • Interactivos. É precisa a interacción continua co usuario, que mediante accións suministra datos. Exemplos: o procesador de textos, un formulario que permite introducir datos nunha base de datos, etc.
  • Tempo real. Nestes é crítico o tempo de resposta do sistema. Exeplos: a aplicación GPS que nun dispositivo móvil nos guía, os equipos que controlan os brazos mecánicos en procesos industriáis de fabricación, etc.

Fíos

Para crear un proceso é preciso reservar espacio na memoria para él, o que require unha cantidade considerable de tempo e recursos do sistema. A comunicación entre procesos requiere de certos mecanismos especiais que se verán na sección correspondente.

Os fios ou febras (threads) denomínanse tamén procesos lixeiros (lightweight processes). A creación dun novo fío para un proceso existente faise de manera sinxela e rápida xa que non require reservar e inicializar espazo na memoria porque esta é compartida por todos os fíos dun mesmo proceso. Con isto a comunicación entre eles faise moi sinxela: se un fío dun proceso modifica un obxecto situado na memoria, os demáis fios do mesmo proceso poden ver os cambios realizados. Precísanse mecanismos de sincronización entre fios para evitar problemas que poden darse se os distintos fios modifican sen control obxectos situados na memoria compartida.

Como veremos máis adiante, o planificador a corto plazo ou CPU scheduler é quen xestiona de maneira independente os distintos fíos dun mesmo proceso.

Un proceso en execución ten inicialmente un fio. A ejecución dun proceso termina cando finaliza a execución de todos os seus fíos. E do mesmo xeito, se se termina a execución dun proceso, acábase tamen coa execución de todos os seús fíos.

Servizos

Os servizos son un tipo particular de proceso que proporcionan determinados servizos (valga a redundancia) a outros procesos. Execútanse en segundo plano (en background) sen ser directamente utilizados polos usuarios.

Os servizos executanse continuamente sendo normalmente iniciados polo sistema operativo durante o seu arranque. Adoitan proporcionar información acerca da súa execución en ficheiros de log, nos que van anotando todos os eventos que se producen durante a súa execución e detalles acerca das accións que realizan.

Poden proporcionar servizos a outros procesos no mesmo ordenador ou a outros ordenadores. Neste último caso, adoitan comunicarse a través dunha red de comunicaciones utilizando protocolos de rede estándares coma TCP ou UDP (da familia de protocolos TCP/IP). Este tipo de servizos en rede son un compoñente fundamental dos sistemas distribuidos. Neste contexto as aplicacións servidoras (sevidores) prestan servizo a outras aplicacións (Clientes) que utilizan estes servizos. Como cabe supoñer, unha aplicación pode actuar á vez como cliente e como servidor, proporcionando un servizo a outras aplicacións e o mesmo tempo utilizar os servizos que proporciona outra aplicación.

Un servidor multifío é unha técnica habitual dos servizos para mellorar o tempo de resposta ante peticións de servizos de outros procesos. Consiste en crear un novo fío para responder a cada nova petición recibida, ou ben manter un pool de fíos, de xeito que a cada nova petición se lle pode asignar inmediatamente un fío xa disponible no pool. Así o fío principal queda libre para recibir novas peticións.

Cada sistema operativo ten os seus propios mecanismos para xestionar os servicios, xa sexa para arrancar, reiniciar ou parar servizos, ou configuralos para o seu arranque automático ó iniciar o sistema.

Servizos en Windows

O administrador de servizos (services.msc) permite arrancar e deter servizos, así como consultar o estado de execución e obter información adicional acerca de cada un. Permite tamén configurar o modo de arranque para cada servicio:

  • automático: se inicia automáticamente en cada arranque do sistema operativo
  • automático (inicio retrasado): agarda a que o sistema operativo se teña cargado e se inicia automáticamente
  • manual: iniciase cando unha aplicación o precisa
  • manual (desencadenar inicio): só se iniciará se non hai demasiados servizos en execución
  • deshabilitado: o servizo non se pode iniciar

Servizos en Linux

Existen sofisticados sistemas para a xestión, control e configuración de servizos.

O antiguo sistema initd de System V está sendo desplazado polo novo systemd . Para systemd utilízase o comando systemctl.

Para amosar unha lista con todos os servizos existentes no sistema:

$ systemctl list-unit-files
Aqueles para os que se amosa enabled na columna STATE arrancan automáticamente cando inicia o sistema.

Para amosar todos os servizos cargados no sistema:

$ systemctl --type=service
Que estén cargados non significa que estén en ejecución actualmente (o estado de execución aparece na columna SUB).

Para cada servicio, se pueden ejecutar comandos del tipo:

$ systemctl acción servizo

Onde:

  • servizo é o nome do servicio
  • acción e o que se desexa realizar sobre el servicio.

As accións disponibles son:

Acción Función
status Amosa o estado de execución do servizo.
start / stop / restart Arranca/para/reinicia o servizo.
reload Alternativa a restart. Utilízase para que o servicio tome en consideración os cambios realizados na súa configuración pero sen reiniciar o servizo.
enable / disable Establece que el servicio arranque / no arranque automáticamente cuando arranca el sistema.

Multitarefa

Os sistemas operativos que se utilizan na maioría dos casos na actualidade permiten executar múltiples procesos simultáneamente. É posible escoitar música e navegar por internet mentres se están transferindo ficheiros dun cartafol a outro, aínda que só exista un procesador no sistema. Como é posible? A execución dun prodceso detense a intervalor regulares de tempo; nese intre toma o control un programa especial do sistema operativo, que pode parar a execución do proceso actual e pasar a executar outro proceso de ser preciso.

A multitarefa (multitasking consiste na execución simultánea de máis dun proceso nun procesador o longo dun intervalo de tempo

A rápida alternancia entre procesos permite xerar ó usuario a ilusión de que se están executando simultaneamene aínda que en cada momento haí realmente un único proceso en execución.

Cómo é que se fai para alternar a execución entre procesos? Faise mediante o que se denomina cambio de contexto: antes de empezar a executar un novo proceso, gárdase o estado de execución do proceso actual para poder retomar máis adiante a súa execución no mesmo punto onde foi interrumpido. O que se garda son os contidos do contador de programa (PC) e os rexistros do procesador, para a continuación ser cambiados eses datos polos do novo proceso.

O rendemento dun sistema aumenta se dispón de máis dun procesador (sistema multiprocesador). Neste caso, podense executar en paralelo varios procesos, un en cada procesador.

Normalmente sempre haberá moitos máis procesos que procesadores, polo que tamén no caso dos sistemas multiprocesadores, farase multitarefa en cada procesador.

Se puede pensar que, cuando solo se dispone de un procesador, no compensa la multitarea, porque, al tiempo de ejecución de los procesos, hay que sumar el tiempo necesario para los cambios de contexto, además del tiempo que necesita el sistema operativo para planificar la ejecución de los distintos procesos. Mais non é así porque:

  1. Tempo adicado: o tempo que se adica a isto é pequeno en comparación con que se adica á execución dos procesos e se pode xustificar coas ventajas de executar varios procesos ó mismo tiempo, especialmente para sistemas interactivos nos que hai unha frecuente interacción entre o usuario e o ordenador. Os usuarios fan xeralmente varias cousas á vez, e desexarán que todas avances e teñan unha resposta rápida cando intercuantuan con calquera das mesmas.
  2. Uso do procesador: durante a execución dos procesos, adoita haber períodos moi longos de tempo nos que non se fai uso do procesador por estar esperando a que finalicen operacións de E/S. Por exemplo, no traballo cun procesador de textos, o procesador pasa a maioría do tempo desocupado esperando a que o usuario escriba ou realiza algunha acción co rato; ou mentres obten o contido almacenado nun ficheiro ou graba os cambios do documento nun ficheiro.

A figura amosa a execución de dous procesos que alternan periodos de uso do procesador con periodos de espera para que se realicen operacións de E/S; o tempo total de execución e só lixeiramente superior o de calquera deles por serapada, xa que en xeral é posible utilizar o procesador para ou outro procesa mentras un está a espera de que se complete unha operación de E/S.

Sistemas monoprocesadores e multiprocesadores

Un sistema monoprocesador ten un único procesador mentres que un sistema multiprocesador ten varios. En ambos podense executar varios procesos de xeito simultáneo mediante técnicas de programación concurrente que permiten a comunicación e sincronización entre procesos.

Denominanse procesos concurrentes os que se executan simultáneamente durante un intervalo de tempo:

  • de forma real (en sistemas multiprocesadores)
  • de forma simulada (en sistemas monoprocesadores, ou nun mesmo procesador dun sistema multiprocesador).

Falase de programación concurrente:

  • cando se executan varios procesos concurrentes nun sistema
  • para facer referencia ás técnicas que permiten o desenvolvemento de programas que utilizan varios procesos concurrentes que funcionan de forma conxunta e coordinada para realizar unha tarefa.

Sistemas monoprocesadores

A execución concurrente de varios procesos nun sistema monoprocesador se conoce con el nombre de multiprogramación. Coa técnica do cambio de contexto permítese unha multitarefa efectiva e un mellor aproveitamento do procesador, xa que se asigna a outro proceso durante o tiempo no que un proceso está inactivo ou á espera de que se termine de realizar unha operación de E/S.

Os procesadores multinúcleo (multicore en inglés: dual-core con dous núcleos, quad-core con catro núcleos, hexa-core con seis núcleos e octa-core con oito núcleos) conteñen varios núcleos ou unidades de proceso integradas. Porén pódense considerar un tipo de sistemas multiprocesadores aínda que con importantes diferencias con respecto a sistemas multiprocesadores con procesadores independentes.

Sistemas multiprocesadores

Os sistemas multiprocesadores son os que dispoñen de máis de un procesador. A programación paralela consiste na execución de varios procesos concurrentes nun sistema multiprocesador. Estos procesos podense executar con paralelismo real. Úsase tamén este termo para referencias ás técnicas que permiten desenvolver programas que utilizan varios procesos concurrentes que poden executarse en distintos procesadores dun sistema multiprocesador. Estas serán distintas segundo o tipo de sistema multiprocesador de que se trate; pero as linguaxes de alto nivel proporcionan bibliotecas de funcións ou de clases que permiten facer abstracción da arquitectura e utilizar as mesmas operaciones, que se implementarán de distinta maneira segundo a plataforma concreta.

Pódense clasificar dependendo da súa arquitectura en formentente acoplados ou débilmente acoplados

Sistemas fortemente acoplados

Nestes sistemas existe unha memoria compartida para todos os procesadores. Todos eles acceden a mesma e ó sistema de E/S a través do mismo bus de conexión.

Podense distinguir dous tipos de sistemas multiprocesadores fortemente acoplados:

  1. Sistemas multiprocesadores simétricos (SMP): os procesadores do sistema funcionan todos de igual xeito sen que ningún se diferencie do resto.
  2. Sistemas multiprocesadores asimétricos (tamén denominados master-slave): un dos procesadores do sistema, o maestro ou master, controla ó resto dos procesadores (slave).

Sistemas débilmente acoplados

Nestes sistemas non hai memoria compartida; cada procesador ten a súa propia memoria e o seu propio sistema de E/S, e o que existe é unha rede de comunicacións entre os procesadores.

Para esa rede, hai tres posibilidades:

  1. Que os procesadores estén físicamente cercanos uns ós outros e comunicados mediante unha rede a medida de alta velocidade e con unha estructura regular. Este tipo de sistemas utilízanse en supercomputación e para aplicacións especializadas intensivas en cálculo.
  2. Que estén formados por ordenadores convencionales conectados mediante unha rede de área local convencional, formando o que se denomina un cluster. Neste caso non hai unha rede especializada deseñada a medida, nin processadores de alto rendemento. Cabe destacar dentro desde grupo os clusters Beowulf nos que existe un ordenador que funciona como controlador do cluster e como servidor de ficheiros para él, e que se usa como consola para todo o cluster. Os nodos só son accesibles a través do controlador polo que non adoitan ter teclados nin monitores. O controlador e todos os nodos funcionan con sistemas operativos de tipo UNIX ou Linux convencionais nos que se instala determinado software, e para engadir añadir un novo ordenador ou nodo só é preciso conectalo á rede.
  3. Que os procesadores estén en ordenadores independentes comunicados mediante unha rede de área amplia (WAN) ou a través de internet. Estes son los sistemas distribuidos, caracterizados pola heteroxeneidade do hardware sobre o que están construidos e pola relativa independencia entre os sistemas que os constituen. Nun sistema distribuido non hai memoria compartida nin rede de conexión específica entre os distintos ordenadores; a comunicación entre procesos realízase mediante mensaxes a través da rede de comunicacións que comunica os distintos ordenadores, para os que adoitan utilizarse os protocolos de rede estándares TCP o UDP.
A programación distribuida consiste na execución de varios procesos concurrentes nun sistema distribuido. Útilizase tamén este termo para referenciar ó desenvolvemento de programas que utilizan varios procesos concurrentes que poden executarse en distintos procesadores dun sistema distribuido, e as técnicas que o fan posible.

As principales vantaxes dos sistemas distribuidos é que son altamente escalables e configurables; os seus inconvintes é que son sistemas heteroxéneos e complexos de manter, e que a sincronización entre procesos pode ser complexa también. Ademáis, a comunicación entre procesos faise a través da rede, que ten unha velocidade limitada e que polo tanto pode convertirse nun cuello de botella.

Ventaxas e inconvintes da programación concurrente

Kernel e chamadas ó sistema

Estados de execución dun proceso

Glosario

  • Servizo en red. Servizo que se presta a procesos remotos cos que a comunicación se realiza mediante protocolos estándares de rede.
  • Servizo. Proceso co que non interactúan directamente os usuarios; son outros procesos os que lle requieren que lles proporcione un determinado servizo.
  • Sistema distribuido. Sistema multiprocesador no que os procesadores están en ordenadores autónomos que se comunican entre sí a través dunha rede de comunicacións.
  • Sistema monoprocesador. Sistema que dispón dun único procesador.
  • Sistema multiprocesador. Sistema que dispón de máis dun procesador.


Creditos y referencias