miércoles, 22 de octubre de 2008

servidores de google

Cuando escribimos la sección ‘tecnología’ hace casi dos años, Google confesaba tener cerca de 20 mil servidores Linux en su clúster -uno de los más grandes del mundo-. Hace unas semanas, en el diario ‘New York Times’ aseguraban que disponían de 100 mil.
Realmente no existe un dato oficial de la compañía sobre esta cifra, pero lo que sí sabemos es que Google atiende a cerca de 2000 peticiones por segundo y busca dentro de seis mil millones de documentos. Tristan Louis, en su weblog, se ha preguntado con cuántas máquinas cuenta el buscador para realizar con efectividad su cometido. Y se ha basado en los datos oficiales del registro ‘S-1′ que hace unos días presentó Google ante la Comisión Estadounidense de Valores.
Así, partiendo de que la compañía ha declarado tener 250 millones de dólares invertidos en hardware, ha llegado a la conclusión de que en el clúster existen entre 45 mil y 80 mil servidores.

miércoles, 15 de octubre de 2008

Jerarquía de Almacenamiento:

Jerarquía de Almacenamiento:

Los sistemas de almacenamientos de un sistema de computo se puede organizar de manera jerárquica donde se toman en cuenta su velocidad y costo; los niveles mas altos son costosos pero son mas rápidos, pero a medida que desciende la jerarquía disminuye el tiempo de acceso.

Los sistemas de almacenamiento pueden ser volatiles o no, este cuando pierde su contenido al interrumpirse la energia en el dispositivo; por lo tanto si no se tienen sistemas de respaldo de bateria o generador los datos o información deben escribirse en un almacenamiento no volátil para mayor seguridad.

Un disco electrónico puede diseñarse para ser volátil o no, este disco almacena datos en un gran arreglo de DRAM el cual es volátil, pero muchos de estos contienen un disco duro magnético oculto y una batería; si se va la luz el puede copiar los datos desde la RAM al disco magnético y cuando llega la energía el controlador copia los datos de regreso a la RAM.

EL diseño de un sistema completo de memoria debe equilibrar todos estos factores:
Solo utilizar tanta memoria costosa como sea necesario y proporcionar al mismo tiempo tanta memoria barata no volátil como sea posible
Las cache se pueden instalar para mejorar la deficiencia en le desempeño de acceso o transferencia entre dos componentes.

Almacenamiento en cache

La información se mantiene normalmente en algún sistema de almacenamiento (como la memoria principal). A medida que se utiliza, se copia en un sistema de almacenamiento más rápido -LA CACHE- bajo una BASE temporal.

LA CACHE es muy utilizada ya que primero verificamos si la información que necesitamos esta en ella si no, se busca en el almacenamiento principal donde luego se guarda una copia un la cache.
Los niveles de una jerarquía de almacenamiento puede ser Implícito o Explicito

Coherencia y Consistencia: es una estructura jerárquica de almacenamiento, los mismos datos pueden aparecer en diferentes niveles del sistema de almacenamiento.

lunes, 13 de octubre de 2008

Multiusuario

Multiusuario
De Wikipedia
La palabra multiusuario se refiere a un concepto de sistemas operativos, pero en ocasiones también puede aplicarse a programas de computadora de otro tipo (e.g. aplicaciones de base de datos). En general se le llama multiusuario a la característica de un sistema operativo o programa que permite proveer servicio y procesamiento a múltiples usuarios simultáneamente (tanto en paralelismo real como simulado).
En contraposición a los sistemas monousuario, que proveen servicio y procesamiento a un solo usuario, en la categoría de multiusuario se encuentran todos los sistemas que cumplen simultáneamente las necesidades de dos o más usuarios, que comparten los mismos recursos. Actualmente este tipo de sistemas se emplean especialmente en redes, pero los primeros ejemplos de sistemas multiusuario fueron sistemas centralizados que se compartían a través del uso de múltiples dispositivos de interfaz humana (e.g. una unidad central y múltiples pantallas y teclados).
Los recursos que se comparten son por lo regular una combinación de:
Procesador.
Memoria.
Almacenamiento secundario (almacenaje en disco duro).
Programas.
Periféricos como impresoras, plotters, scanners, etc.
De tal modo que los múltiples usuarios tienen la impresión de utilizar una computadora y un sistema operativo unificado, que les están dedicados por completo.
//
Sistemas de tiempo compartido
La primera representación de sistemas multiusuario fue en la forma de sistemas de tiempo compartido en grandes ordenadores destinados a dar servicio a más de una persona al mismo tiempo. El tiempo compartido ejecuta programas separados de forma concurrente, intercambiando porciones de tiempo en el procesador asignadas a cada programa (usuario). En este aspecto, es análogo a la capacidad de multitareas que es común en la mayoría de las computadoras modernas, tanto servidores como domésticas. Sin embargo el tiempo compartido se asocia generalmente también al acceso de varios usuarios por medio del uso de múltiples dispositivos de interfaz humana (por ejemplo terminales tontas), a una sola computadora; mientras que la multitarea solamente implica la realización de múltiples tareas en un sistema operativo, sin importar que éste atienda a múltiples usuarios o a uno solo.
Sistemas operativos multiusuario
En los sistemas operativos antiguos son lo magnifico, la idea de multiusuario guarda el significado original de que éste puede utilizarse por varios usuarios al mismo tiempo, permitiendo la ejecución concurrente de programas de usuario. Aunque la idea original de tiempo compartido o el uso de terminales tontas no es ya el más utilizado. Esto debido a que los ordenadores modernos pueden tener múltiples procesadores, o proveer sus interfaces de usuario a través de una red, o en casos especiales, ya ni siquiera existe una sola computadora física proveyendo los servicios, sino una federación de computadoras en red o conectadas por un bus de alta velocidad y actuando en concierto para formar un cluster.
Desde el principio del concepto, la compartición de los recursos de procesamiento, almacenaje y periféricos facilita la reducción de tiempo ocioso en el (o los) procesador(es), e indirectamente implica reducción de los costos de energía y equipamiento para resolver las necesidades de cómputo de los usuarios. Ejemplos de sistemas operativos con característica de multiusuario son VMS y Unix, así como sus múltiples derivaciones (e.g. IRIX, Solaris, etc.) y los sistemas "clones de Unix" como Linux, FreeBSD y Mac OS X.
En la familia de los sistemas operativos Microsoft Windows, desde Windows 95 hasta la versión Windows VISTA, proveen soporte para ambientes personalizados por usuario, pero no admiten la ejecución de múltiples sesiones de usuario, haciendo necesaria la finalización de una sesion para poder inicar otra distinta (y por lo tanto son, en esencia, sistemas operativos monousuario); Las versiones de Windows 2000 server y Windows 2003 server ofrecen el servicio Terminal Server el cual permite la ejecución remota de diferentes sesiones de usuario.
Es una característica de un sistema operativo moderno. Permite que varios procesos sean ejecutados al mismo tiempo compartiendo uno o más procesadores.
//
Tipos de multitarea
Cooperativa
Los procesos de usuario son quienes ceden la CPU al sistema operativo a intervalos regulares. Muy problemática, puesto que si el proceso de usuario se interrumpe y no cede la CPU al sistema operativo, todo el sistema estará trabado, es decir, sin poder hacer nada. Da lugar también a latencias muy irregulares, y la imposibilidad de tener en cuenta este esquema en sistemas operativos de tiempo real. Un ejemplo sería Windows hasta la versión 95.
Preferente
El sistema operativo es el encargado de administrar el/los procesador(es), repartiendo el tiempo de uso de este entre los procesos que estén esperando para utilizarlo. Cada proceso utiliza el procesador durante cortos períodos de tiempo, pero el resultado final es prácticamente igual que si estuviesen ejecutándose al mismo tiempo. Ejemplos de sistemas de este tipo serían Unix y sus clones (FreeBSD, Linux...), VMS y derivados, AmigaOS, Windows NT...
Real
Sólo se da en sistemas multiprocesador. Es aquella en la que varios procesos se ejecutan realmente al mismo tiempo, en distintos microprocesadores. Suele ser también preferente. Ejemplos de sistemas operativos con esa capacidad: variantes Unix, Linux, Windows NT
Multiprogramación
De Wikipedia
Se denomina multiprogramación a la técnica que permite que dos o más procesos ocupen la misma unidad de memoria principal y que sean ejecutados al "mismo tiempo" (seudo-paralelismo, en una única CPU sólo puede haber un proceso a la vez) en la unidad central de proceso o CPU.
Aporta las siguientes ventajas:
La ya mencionada, varios procesos en ejecución.
Permite el servicio interactivo simultáneo a varios usuarios de manera eficiente.
Aprovecha los tiempos que los procesos pasan esperando a que se completen sus operaciones de E/S
Aumenta el uso de la CPU.
Las direcciones de los procesos son relativas, el programador no se preocupa por saber en dónde estará el proceso dado que el sistema operativo es el que se encarga de convertir la dirección lógica en física.
Un proceso entra a ejecutarse y llega al momento en que tiene que hacer espera por un dispositivo de entrada y/o salida por ejemplo, el CPU estara ocioso mientras espera que el proceso puede usar el dispositivo para así finalmente ejecutarse. Los sistemas de multiprogramación evitan eso ya que durante ese tiempo de esperar pasan a ejecutar otro proceso teniendo así al computador ocupado.
Sistemas operativos multiproceso y multithread
Por Javier Palmero Esteban (E-Mail: palco@gui.uva.es)
1. Concepto de proceso o tarea
Un proceso, o tarea, es un programa en ejecución. Los procesos en un sistema operativo tradicional multiproceso (como en los antiguos UNIX) se caracterizan por:
Un proceso para empezar su ejecución ha de residir completamente en memoria y tener asignados todos los recursos que necesite.
Cada proceso está protegido del resto de procesos, ningún otro proceso podrá escribir en las zonas de memoria pertenecientes a ese proceso.
Los procesos pertenecientes a los usuarios se ejecutan en el modo usuario del procesador (con restricciones de acceso a los recursos), los que pertenecen al sistema se ejecutaran en el modo kernel del procesador (podrán acceder a cualquier recurso).
Para que un proceso de usuario acceda a los recursos tendrá que hacerlo por medio de llamadas al sistema.
Cada proceso tendrá una estructura de datos llamada bloque de control de proceso (BCP), donde se almacenará información acerca del proceso, como:
Identificación del proceso (pid).
Prioridad.
Estado del proceso (ejecución, preparado, suspendido o zombie).
Estado hardware (registros y flags del procesador).
Información de planificación y estadísticas de uso.
Información de gestión de memoria.
Estado de E/S (dispositivos asignados, operaciones pendientes).
Información de gestión de archivos (archivos abiertos, derechos).
Información de mantenimiento.
Los procesos se podrán comunicar, sincronizarse y colaborar entre ellos. Estas operaciones se realizan por:
Comunicación: memoria compartida e intercambio de mensajes.
Sincronización: semáforos.
Colaboración: por LPC y RPC (llamadas a procedimientos locales y remotos).
La razón principal de estas operaciones es que, al residir cada proceso en zonas de memoria independientes, se ha de llamar al sistema para compartir los datos entre los procesos.
Espacio de direcciones lógicas. En este espacio de direcciones reside el proceso (en la parte baja) y las llamadas al sistema (en la parte alta), esto es así para tener un acceso directo a los recursos del sistema. Este espacio de memoria es igual al máximo que nuestro sistema operativo es capaz de gestionar (en un sistema operativo de 32 bits se llegrá hasta 4 GB), y aquí entra en juego la memoria virtual:
Los procesos se dividen en trozos de igual tamaño, llamados páginas, cuando se carga un proceso lo que se hace es llevarlo a la memoria virtual y asignarle un número máximo de páginas en memoria real a emplear (working set).
Cuando el proceso es ejecutado, si quiere acceder a una página que no está en memoria real, se la busca en memoria virtual y se carga en memoria real. Cuando se llega al numero máximo de páginas utilizadas en memoria real por un proceso se procederá a descargar una página de memoria real a la virtual, normalmente se descarga la más antiguamente utilizada.
Los problemas de este sistema es que, si tenemos un programa mal programado, pueden ocurrir problemas de hiperpaginación (se da un gran número de faltas de página que serán utilizadas prontamente).
2 Sistemas operativos multiproceso
Un sistema operativo multiproceso o multitarea es aquel que permite ejecutar varios procesos de forma concurrente, la razón es porque actualmente nuestras CPUs sólo pueden ejecutar un proceso cada vez. La única forma de que se ejecuten de forma simultánea varios procesos es tener varias CPUs (ya sea en una máquina o en varias, en un sistema distribuido).
La magia de un sistema operativo multiproceso reside en la operacíon llamada cambio de contexto. Esta operación consiste en quitar a un proceso de la CPU, ejecutar otro proceso y volver a colocar el primero sin que se entere de nada.
2.1 Mi CPU me la pega con otro
Supongamos que estamos en una máquina con un sistema operativo multiproceso (como UNIX; Windows NT, OS/2, NeXTStep ...), y supongamos que queremos ejecutar el programa Ejecutame que ha sido compilado de forma estática.
Cuando introducimos en el indicador de comandos del shell (o lo lanzamos con un doble click del ratón) el nombre de un fichero ejecutable binario lo que ocurre es que un proceso del sistema (cargador) lo prepara para que posteriormente sea ejecutado. La función que realiza el cargador es:
Crea el BCP. Se le asigna un identificador (pid) y una prioridad base (como máximo la misma que para el usuario, y se le van asignando todos los recursos a excepción de la CPU.
Se le inserta en la tabla de procesos del sistema.
Se carga en memoria virtual. Cuando ya tiene todos los recursos asignados (menos la CPU) se pone el campo de estado del proceso del BCP en preparado y se le ingresa en la cola de procesos listos de la CPU. Al proceso del sistema que controla la cola de la CPU se llama planificador, que es el encargado de elegir que proceso será el siguiente a ocupar la CPU. La elección se realiza mediante prioridades.
El problema reside en que, si un proceso tiene una prioridad muy baja, puede darse el caso que nunca se ejecute. Para evitar esto se emplea us sistema de prioridades dinámicas, es decir, se irán aumentando las prioridades a medida que esperen en la cola. Los pasos del planificador serán los siguientes:
Asignar nuevas prioridades a los procesos en la cola de la CPU.
Elegir aquel proceso con prioridad más alta.
Poner el campo de estado del proceso elegido en ejecución.
Llamar a la rutina de cambio de contexto, que lo que hará será cargar el proceso en la CPU. Es decir, volcará el estado hardware en los registros de la CPU, el último registro a actualizar será el PC (contador de programa), para que la próxima instrucción a ejecutar sea la siguiente donde se quedó el proceso.
2.2 Expulsión de un proceso de la CPU
A cada proceso se le asigna un número determinado de quantums (unidades de tiempo) de utilización de CPU. Este tiempo podrá ser estático o dinámico dependiendo de la prioridad del proceso. Cuando este tiempo acaba se producirá una interrupción de fin de tiempo de ejecución. Cuando ocurre una interrupción (software o hardware) se llama al gestor de interrupciones que a su vez llamará al proceso correspondiente para que la gestione. Las principales interrupciones son:
Interrupción por E/S.
Interrupción por fin de tiempo (en la que se llama al planificador).
Interrupción por error (como la división por 0).
Cuando un proceso solicita una operación de E/S se le pone en estado suspendido y se le coloca en la cola del dispositivo de E/S que quiere utilizar. Cuando ya se ha satisfecho esta operación se le vuelve a poner en estado preparado colocándole en la cola de la CPU.
A nuestro proceso le ha llegado la hora de ejecutarse, la misión del proceso es escribir un mensaje en el dispositivo de salida estándar. Al concederle la CPU se le pone en estado de ejecución y se realiza el cambio de contexto. Se empieza a ejecutar en la dirección n (que es la primera instrucción de nuestro programa) y quiere acceder al distpositivo de salida, por lo cual se pone en estado suspendido y espera en la cola del dispositivo. Cuando deja la CPU los registros del procesador tenían una valores distintos a los originales que teniamos guardados, al realizarse el cambio de contexto se actualizan los campos del BCP con los nuevos valores.
Ya ha obtenido la salida que quería, así que se vuelve a poner en estado preparado e ingresa en la cola de la CPU. Cuando vuelva a la CPU se seguirá ejecutando donde lo dejó. Cuando se ejecute la última instrucción abandonará la CPU (antes que acabe el tiempo asignado), y pasará a un estado zombie donde se irán quitando los recursos asignados.
2.3 Problemas de los procesos
En un sistema operativo tradicional (UNIX, OS/2) al emplear la llamada al sistema de creación de un nuevo proceso (fork en UNIX), lo que el sistema realiza es una copia exacta del padre en el hijo. Se crean 2 procesos iguales y a la hora de programar tendremos el mismo código para ambos procesos, por lo cual tendremos que saber que proceso se ejecuta en ese momento.
int espera;
if(fork()==0) printf("Hola papa!!!!\n");
wait(&espera);
El padre espera hasta que el hijo le salude. El problema reside en que, si el padre es un proceso grande, al crear el hijo tendrá que volcar todo su contenido en el hijo, y si éste no realiza una labor grande estaríamos perdiendo eficiencia.
Al ser padre e hijo dos procesos independientes, su comunicación y compartición de datos será complicada y poco eficiente. Normalmente se crea un proceso hijo para que realice una subtarea, sobre todo para aprovechar tiempo cuando se espera una E/S. Supongamos que realizamos un programa que adquiere ficheros via red y va sumando la cantidad de datos obtenida, mientras los vamos editando. Necesitaremos:
Proceso que nos traiga los ficheros de la red.
Proceso que lanze un editor cada vez que se traiga un fichero entero.
Proceso para que realice la suma de los ficheros.
Los problemas que surgen son:
Necesidad de semáforos para sincronizar los procesos:
Suma<- Traigo fichero -> Edito
Además necesitaremos una zona de memoria compartida de tamaño indeterminado (es decir varias zonas) para que el proceso que está en la red nos diga la cantidad de datos que son traídos.
Y, por supuesto, tenemos tres procesos iguales y con una complicada gestión.
Con este ejemplo se ven los problemas principales de los sistemas operativos multiproceso. Aunque aún falta un problema importante:
Cuando dos procesos (padre e hijo) se ejecutan de forma seguida en la CPU, al ser procesos iguales solo cambian algunos datos del BCP, por lo cual con una nueva gestión podríamos salvar algunas operaciones innecesarias.
Para solucionar estos problemas se han creado una serie de procesos ligeros llamados threads.
3. Concepto de hebras y sistemas operativos Multithread y Multiproceso
Una hebra es un punto de ejecución de un proceso. Un proceso tendrá una o más hebras. Las hebras representan un método software para mejorar el rendiemiento de los sistemas operativos reduciendo el recargo por el cambio de contexto entre procesos. Las hebras de un mismo proceso compartirán recursos, como memoria, archivos ... Las hebras asumirán el papel de los procesos como unidad de planificación. Un proceso será una unidad propietaria de recursos para una serie de hebras.
Un proceso clásico será aquel que solo posea una hebra. Las hebras siempre pertenecerán a un proceso y no podrán existir por ellas mismas. Los procesos serán estáticos y tan solo las hebras podrán ser planificadas por ejecución. Las hebras tendrán un flujo separado de control (o punto de ejecución) y tienen su propia pila y estado hardware. Como todos los recursos (exepto la CPU) son gestionados por el proceso, la comunicación entre sus hebras será mucho más rápida y eficiente, porque todas las hebras de un proceso comparte un mismo espacio de memoria. Cuando se realice un cambio de contexto entre hebras de procesos diferentes se realizará un cambio de contexto entero.
Con las hebras hacemos a los sistemas operativos mucho más rápidos, pero siempre habrá que tener cuidado con la planificación entre hebras, ya que varias hebras podrán acceder a cualquier variable compartida y puede haber problemas de inconsistencia de datos.
Otro detalle interesante es que simplifica algo la tarea de programación.
Si el ejemplo de antes lo hubieramos hecho con hebras, tendríamos un proceso con tres hebras. Ocuparíamos menos memoria y se simplificaría la comunicación entre las subtareas del proceso.
La gestión de las tareas se hará igual que en un sistema operativo multiproceso tradicional, con la salvedad de que, en vez de planificar procesos planificamos hebras de procesos.
Existen varios sistemas operativos multitarea y multithread: Windows NT, OS/2, NeXTStep, Solaris ... Los UNIX tradicionales poco a poco irán adoptando el API de las hebras de POSIX (documento disponible en ftp://ftp.gui.uva.es/pub/windows/winNT/doc/varios ).
4 Windows NT
Cuando se empezó el dise񯠤e Windows NT, Microsoft sabía que tendría que soportar el multiproceso y la multithread. Otra característica importante en el dise񯠤e NT es que su arquitectura base es la de cliente-servidor, por lo cual en NT tendremos una serie de procesos servidores que se comunicaran con sus clientes a través de un mecanismo de paso de mensajes. Y por último hay que decir que NT sigue de cerca la metodología de la programación orientada al objeto. Aún NT no es orientado al objeto, pero esta preparado para ser un sistema operativo orientado al objeto. Para representar los recursos del sistema, se utilizan clases de objeto. Las threads como cualquier otro recurso del sistema se representarán como un objeto, de esta forma se facilita su uso ya que la forma de manejar cualquier recurso del sistema será muy parecida, ya que todos son objetos. Para que NT ejecute un proceso tendrá que tener el mínimo de una thread, ya que lo que el kernel planifica son threads.
Cuando en un proceso de usuario se ejecuta una thread en el kernel se crea otra thread que representa la thread del usuario en el kernel. Es se debe a que lo único que se ejecuta en NT en el modo privilegiado del procesador es su kernel, el resto de servicios del sistema se ejecutara en modo usuario (procesos servidores), asi que necesitaremos una thread que se ejecute dentro del kernel para acceder a los recursos del sistema.Por supuesto el modelo de planificación es el que se comento antes. Tendremos 32 niveles de prioridad clasificados en prioridad de tiempo real y variable.
Las hebras que sean de tiempo real siempre se planificaran antes que el resto de threads del sistema, es decir que si tenemos una thread de prioridad de tiempo real, nustra máquina tan solo ejecutara esta hebra.
Un detalle importante es que el kernel no puede cambiar la prioridad de un thread de tiempo real.
Las threads de tiempo variable tienen una prioridad base y otra variable, la prioridad base de la thread ha de diferir como mucho en 2 niveles respecto a la prioridad del proceso al que pertenece. El kernel se encarga de la prioridad variable:
Si una thread espera una E/S se le sube la prioridad variable.
Si una thread consume mucho tiempo de CPU se le bajara la prioridad variable.
La regla a tener en cuenta es que nunca la prioridad variable ha de ser inferior a la base. Todo lo dicho en el artículo se puede aplicar a Windows NT. En otros artículos sucesivos ampliaremos el alcance de nuestro estudio.

MULTIPROCESAMIENTO Generalidades de Multiprocesadores. Un multiprocesador se define como una computadora que contiene dos o más unidades de procesamiento que trabajan sobre una memoria común bajo un control integrado. Si el sistema de multiprocesamiento posee procesadores de aproximadamente igual capacidad, estamos en presencia de multiprocesamiento simétrico; en el otro caso hablamos de multiprocesamiento asimétrico.
Si un procesador falla, los restantes continúan operando, lo cual no es automático y requiere de un diseño cuidadoso. Un procesador que falla habrá de informarlo a los demás de alguna manera, para que se hagan cargo de su trabajo . Los procesadores en funcionamiento deben poder detectar el fallo de un procesador Determinado. El Sistema Operativo debe percibir que ha fallado un procesador determinado y ya no podrá asignarlo y también debe ajustar sus estrategias de asignación de recursos para evitar la sobrecarga del sistema que está degradado.
Distribución de Ciclos Una “estructura de ciclos o de repetición” implica la repetición de una serie de proposiciones (cuerpo del ciclo) hasta que ocurre alguna condición de terminación, por ejemplo: For i = 1 to 3 Do
El procesador secuencial realizará en secuencia lo siguiente:
En un sistema de multiprocesamiento con tres procesadores disponibles se podrían Ejecutar concurrentemente.
Reducción de la Altura del Arbol Utilizando las propiedades asociativa, conmutativa y distributiva de la aritmética, los Compiladores pueden: 1. Detectar el paralelismo implícito en expresiones algebraicas. 2. Producir un código objeto para multiprocesadores que indique las operaciones que se pueden realizar simultáneamente. 3. Reordenar expresiones para que sean más apropiadas para la computación en paralelo.

Área de Sistemas Paralelos
De Wikiversidad
Saltar a navegación, búsqueda
Los sistemas paralelos son aquellos que tienen la capacidad de realizar varias operaciones de manera simultánea. Generalmente estos sistemas suelen manejar grandes cantidades de información del orden de los terabytes y pueden procesar cientos de peticiones por segundo. Los sistemas paralelos están formados por varios sistemas que comparten la información, los recursos y la memoria de alguna manera.
Los arquitectos de sistemas de pruebas deben interpretar las tecnologías cambiantes, tal como el caso de los procesadores multinúcleo y los buses de datos de alta velocidad, a medida que ellos diseñen, desarrollen e implementen sistemas de prueba.
Frank Lloyd Wright, un influyente arquitecto del siglo XX, dijo una vez, “Cada gran arquitecto… debe ser un gran intérprete original de su tiempo, sus días y su era.” Lo mismo puede ser dicho para los arquitectos de sistemas de prueba. Ellos deben interpretar las tecnologías que evolucionan, tales como los procesadores multinúcleo y los buses de datos de alta velocidad como PCI Express, a medida que ellos diseñan, desarrollan e implementan los sistemas que les han sido encomendados para construcción. Combinando estas tecnologías con el software LabVIEW de National Instruments y el software administrador de prueba NI TestStand, ingenieros de prueba pueden crear sistemas de prueba de alto desempeño capaces de procesamiento paralelo, de mediciones paralelas e incluso de pruebas totalmente paralelas en el piso de producción.
Procesamiento Paralelo
En los diseños tradicionales de CPU, el desempeño está limitado por desafíos pragmáticos tales como la disipación de calor debido a las altas velocidades de reloj. Para asegurar que la plataforma de PC no se quede atrás ante las demandas crecientes en procesamiento, los fabricantes de chips han desarrollado nuevos procesadores con múltiples núcleos de procesamiento. Para que las aplicaciones automatizadas de pruebas aprovechen los beneficios del desempeño y rendimiento de la tecnología multinúcleo, las aplicaciones de software deben apuntar hacia los múltiples núcleos de procesamiento creando múltiples hilos que se ejecuten en los núcleos.
[+] Ampliar Imagen
Figura 1. El compilador de LabVIEW crea hilos separados de ejecución para secciones paralelas de código, sin configuración requerida por parte del usuario.

Sin embargo, escribir aplicaciones multihilo en un lenguaje de programación basado en texto, tal como C, no es algo trivial para la mayoría de los diseñadores e ingenieros de prueba y requiere de experiencia en la semántica de creación y administración de hilos y de pasar datos a través de ellas en forma hilo seguro. Al usar ambientes de programación gráficos, tal como NI LabVIEW, ingenieros pueden aprovechar totalmente el poder del procesamiento multinúcleo. Como se muestra en la Figura 1, dos ciclos en LabVIEW que no comparten una dependencia de dato automáticamente se ejecutarán en hilos separados abstrayendo los detalles de la administración de hilos lejos del desarrollador.
Mediciones Paralelas
Las mediciones paralelas requieren que cada uno de los subcomponentes de un sistema de prueba, no solo el componente de procesamiento, soporten un modelo paralelo. Esto incluye la transferencia y la adquisición de datos.
Figura 2. PCI Express provee ancho de banda dedicado en lugar de transferencia compartida de datos, incrementando significativamente la cantidad de datos que usted puede adquirir y transferir a disco.

La mayoría de los buses de transferencia de datos para instrumentación modular de hoy en día – incluyendo PCI, USB, Ethernet y GPIB – no soportan un modelo de transferencia de datos completamente paralelo debido a que los dispositivos en el bus comparten el ancho de banda. Si la tasa de adquisición o generación acumulada de los dispositivos de E/S es mayor a la velocidad a la cual el bus está disponible, se podrían perder datos. Una solución común para este problema es realizar mediciones secuenciales e integrar grandes bufers de memoria en la tarjeta de E/S para que así los datos no se pierdan mientras esperan por la disponibilidad del bus de comunicaciones.
En contraste, PCI Express, lo último en buses de transferencia de datos de alto desempeño, ofrece un ancho de banda dedicado para cada dispositivo mientras entrega un rendimiento aún mayor que cualquiera de los otros buses comerciales de comunicación mencionados previamente. Disponible en x1, x4, x8 y x16 líneas (pronunciado “por 1,” “por 4” y así sucesivamente), PCI Express provee 250 MB/s de rendimiento útil por línea. Las opciones x1 y x4 son las más comunes para hardware de tipo instrumentación y proveen 250 MB/s y 1 GB/s (cuatro líneas a 250 MB/s) de rendimiento dedicado, respectivamente.

[+] Ampliar Imagen
Figura 3. PCI Express y la instrumentación modular proveen un modelo escalable para mediciones paralelas.

A medida que una tarjeta PCI Express adquiere datos, estos son transferidos desde la memoria en la tarjeta a través de una línea PCI Express dedicada y fluyen hacia un disco duro o hacia la memoria del sistema. Una vez en la memoria del sistema, la aplicación LabVIEW puede acceder los datos, y si se emplea junto con un procesador multinúcleo, la medición paralela se completa, abarcando desde señales hasta mediciones finales.
Prueba Paralela
Con el procesamiento multinúcleo, PCI Express y LabVIEW, arquitectos de pruebas pueden crear sistemas paralelos de medición capaces de probar una sola unidad bajo prueba (UUT) a la vez. La definición de prueba paralela, sin embargo, es que múltiples UUTs sean sometidas simultáneamente a prueba. La alternativa es probar secuencialmente UUTs, una después de la otra. Aunque las pruebas paralelas claramente reducen el tiempo de prueba agregado, incrementan el rendimiento de la misma y mejoran el uso de los instrumentos (ver Figura 4), la complejidad de desarrollar un sistema paralelo de prueba puede ser totalmente prohibitivo. El desarrollo de software administrador de pruebas que implemente la prueba de múltiples UUTs al mismo tiempo requiere de una comprensión a bajo nivel de como el sistema operativo trabaja con operaciones en paralelo, tal como el caso de Windows Critical Sections, y consideraciones cuidadosas de cómo implementar el compartir múltiples instrumentos a través de varias UUTs sin crear conflictos o cuellos de botella.
[+] Ampliar Imagen
Figura 4. Probar múltiples UUTs en paralelo reduce la agregación de tiempo de prueba mientras mejora el uso de los instrumentos.

Una alternativa para desarrollar un sistema personalizado de prueba paralela desde el principio es usar un software administrador de prueba comercial, tal como NI TestStand. NI TestStand abstrae la complejidad de bajo nivel en el desarrollo de sistemas de pruebas paralelas usando características incluidas para la ejecución de secuencias paralelas de prueba en múltiples hilos y administrando tanto los recursos de sistema operativo como de instrumentos.
Completando la Arquitectura de Pruebas Paralelas
Los procesadores multinúcleo y PCI Express están cambiando el panorama de las PC modernas y están ayudando a la programación gráfica de LabVIEW cumplir la promesa de ofrecer un procesamiento y mediciones verdaderamente paralelas basados en el flujo de datos de la lógica de un ingeniero. Cuando NI TestStand se emplea en conjunto, se completa la arquitectura de pruebas paralelas. El resultado son sistemas de prueba con un rendimiento mejorado de datos, usando PCI Express; un poder de procesamiento mejorado, usando LabVIEW y procesadores multinúcleo; y finalmente costos de prueba totales disminuidos por UUT, usando NI TestStand.

Los sistemas operativos web generalmente también se los conoce como escritorios Web:
"Un escritorio web o webtop es un sistema de aplicación de red para integrar aplicaciones web en un espacio de trabajo basado en web. Es un escritorio virtual en la web, corriendo en un navegador de web como software. Los escritorios web a menudo están caracterizados por un entorno similar al de Windows, Mac, o Linux, pero ahora se considera que tiene mucha más funcionalidad al depender de la Internet. Los beneficios típicos incluyen la habilidad de guardar trabajo y configuraciones en la Internet en vez de hacerlo en un escritorio local."(Fuente: Wikipedia)
Sin embargo, hay una controversia entre los expertos de Internet y desarrolladores de software sobre lo que debe ser considerado un WebOS, ya que el término ha sido adoptado en diferentes contextos con diferentes significados. La primera vez que aparece el término “WebOS” es en un proyecto de investigación de computadoras iniciado por la by Universidad de California, Berkeley en 1996 (que ahora continúa en la Universidad Duke), el cual lo describe de esta forma:
"Los WebOS proporcionan servicios básicos de sistemas operativos necesarios para construir aplicaciones que están distribuidas geográficamente, altamente disponibles, escalables y reconfigurables dinámicamente."
Wikipedia también especifica que:
“Común a todo los usos, un sistema operativo Web es diferente de los sistemas operativos de Internet en que es independiente del sistema operativo tradicional de la computadora individual. [...] El término "sistema operativo de Internet" resulta apropiado cuando una plataforma web incluye funciones pertinentes a medios de Internet, tales como tarjetas inalámbricas y otros dispositivos como también páginas web..”
En esta mini-guía me referiré a WebOS como un escritorio virtual en la web, accesible vía un navegador, con múltiples aplicaciones integradas que permiten al usuario administrar y organizar fácilmente sus datos desde cualquier ubicación.
Para este propósito, he analizado los WebOS más interesantes disponibles actualmente dando una descripción detallada de sus prestaciones. Usted descubrirá que algunos de ellos ya han alcanzado un buen nivel de implementación, mientras que otros aún están en sus etapas iniciales. Al analizar estos servicios he identificado las siguientes características como criterio de comparación de esta lista:
API abierta: la topología de la Interfaz de Programación de Aplicaciones que utiliza
Código abierto: la posibilidad para que usuarios y desarrolladores contribuyan al enriquecimiento del WebOS y creación de nuevos widgets
Aplicaciones integradas: las aplicaciones que tiene el WebOS por defecto (el cual puede ser un editor de texto, un mensajero instantáneo, etc.)
Reproductor de audio-video: la disponibilidad de un reproductor de medios dentro del WebOS
Herramienta de edición de fotos: la disponibilidad de una herramienta que le permita al usuario editar imágenes
Cliente de e-mail: la presencia de un cliente de email
Mensajería Instantánea: la disponibilidad de un mensajero instantáneo integrado
Calendarioio: la existencia de un Calendarioio
Herramientas de Colaboración - Conferencia: la presencia de herramientas de colaboración online (tales como VoIP, herramientas de conferencia web, etc.)
Mini-Navegador: la integración de un navegador web
Almacenamiento de archivos: la cantidad de espacio – si hubiera disponible – para almacenar archivos online
Soporte para compartir archivos: el soporte para compartir archivos con otros usuarios
Búsqueda de escritorio: la presencia de un motor de búsqueda de escritorio dentro del WebOS
Lector/agregador de alimentadores RSS: la disponibilidad de un lector RSS
Soporte para widgets: el soporte para widgets (pequeñas aplicaciones)
Juegos: la disponibilidad de juegos dentro del WebOS
Por favor, recuerde que esta mini-guía no pretende ser una fuente definitiva de todos los WebOS disponibles. Esta lista crecerá gracias también a los nuevos ítems que usted sugiera utilizando la sesión comentarios al final del artículo. Su contribución será muy apreciada.

window.google_render_ad();
Desktop On Demand

miércoles, 8 de octubre de 2008

sistema de procedores multiples

La mayoría de los sistemas de hoy en día son sistemas de un solo procesador; es decir, tienen sólo una cpu principal. Sin embargo, existe una tendencia Hacia los sistemas multiprocesador. Son los que tienen más de un procesador en estrecha comunicación, compartiendo el bus de la computadora, el reloj, y en ocasiones la memoria y dispositivos periféricos.

Existen varias razones:

1. Es un mayor rendimiento, se busca realizar mas trabajo en menos tiempo.
2. Los sistemas multiprocesador también pueden ahorrar dinero en comparación con múltiples sistemas con unidades de un solo procesador, debido a que los procesadores pueden compartir periféricos.
3. sistemas multiprocesador es el que incrementa la confiabilidad. Si las funciones se pueden distribuir adecuadamente entre varios procesadores, entonces la falla de un procesador no detendrá el sistema, solo lo hará lento.


Tolerancia de fallas
Requiere un mecanismo que permita detectar, diagnosticar y corregir las fallas. El sistema Tandem emplea la duplicación tanto de hardware para asegurar una operación continúa a pesar de las fallas, costa de dos procesadores idénticos cada uno con su propia memoria local. Los procesadores se conecta mediante un bus un procesador es primario y el otro es de respaldo. Esta solución es obviamente cara, ya que existe una duplicación considerable de hardware.

Los sistemas de procesadores múltiples mas comunes se utilizan el multiprocesamiento simétrico, en el que cada procesador ejecuta una copia idéntica del sistema operativo, y estas copias se comunican entre ellas según sea necesario. Algunos sistema emplean el multiprocesamiento asimétrico en el cada procesador se le asigna una tarea especifica. Un procesador maestro controla el sistema; el otro procesador solicita instrucciones al maestro para recibir instrucciones o tiene tarea definidas previamente. El procesador maestro programa y asigna el trabajo a los procesadores esclavos.

El beneficio de este modelo simétrico es que puede ejecutarse simultáneamente muchos procesos si hay N CPU sin ocasionar ocasionar un deterioro significativo en el rendimiento, debemos controlar con cuidados las acciones de E/s para asegurar que los datos lleguen al procesador apropiado: Asimismo debido a que las CPU son distintas, una puede estar ociosa mientras que otra esta sobrecargada dando por resultado ineficiencias.

La diferencia entre multiprocesador simétrico y asimétrico puede ser resultado del hardware o del software que se utilice. Un hardware especial puede diferenciar a los multiprocesadores múltiples, o puede escribirse el software de manera que solo se permita un maestro y múltiples esclavos