[en] Efforts of this Thesis are centered on constructing a Virtual Machine over a Cluster system that provides the double functionality of executing traditional workstation jobs as well as distributed applications efficiently. To solve the problem, two major considerations must be addressed: * How share and schedule the workstation resources (especially the CPU) between the local and distributed applications. * How to manage and control the overall system for the efficient execution of both application kinds. Coscheduling is the base principle used for the sharing and scheduling of the CPU. Coscheduling is based on reducing the communication waiting time of distributed applications by scheduling their forming tasks, or a subset of them at the same time. Consequently, non-communicating distributed applications (CPU bound ones) will not be favored by the application of coscheduling. Only the performance of distributed applications with remote communication can be increased with coscheduling. Coscheduling techniques follow two major trends: explicit and implicit control. This classification is based on the way the distributed tasks are managed and controlled. Basically, in explicit-control, such work is carried out by specialized processes and (or) processors. In contrast, in implicit-control, coscheduling is performed by making local scheduling decisions depending on the events occurring in each workstation. Two coscheduling mechanisms which follow the two different control trends are presented in this project. They also provide additional features including usability, good performance in the execution of distributed applications, simultaneous execution of distributed applications, low overhead and also low impact on local workload performance. The design of the coscheduling techniques was mainly influenced by the optimization of these features. An implicit-control coscheduling model is also presented. Some of the features it provides include collecting on-time performance statistics and the usefulness as a basic scheme for developing new coscheduling policies. The presented implicit-control mechanism is based on this model. The good scheduling behavior of the coscheduling models presented is shown firstly by simulation, and their performance compared with other coscheduling techniques in the literature. A great effort is also made to implement the principal studied coscheduling techniques in a real Cluster system. Thus, it is possible to collect performance measurements of the different coscheduling techniques and compare them in the same environment. The study of the results obtained will provide an important orientation for future research in coscheduling because, to our knowledge, no similar work (in the literature) has been done before. Measurements in the real Cluster system were made by using various distributed benchmarks with different message patterns: regular and irregular communication patterns, token rings, all-to-all and so on. Also, communication primitives such as barriers and basic sending and receiving using one and two directional links were separately measured. By using this broad range of distributed applications, an accurate analysis of the usefulness and applicability of the presented coscheduling techniques in Cluster computing is performed.

[es] Los esfuerzos de esta tesis se centran en onstruir una máquina virtual sobre un sistema Cluster que proporcione la doble funcionalidad de ejecutar eficientemente tanto trabajos tradicionales (o locales) de estaciones de trabajo así como aplicaciones distribuidas. Para solucionar el problema, deben tenerse en cuenta dos importantes consideraciones: * Como compartir y planificar los recursos de las diferentes estaciones de trabajo (especialmente la CPU) entre las aplicaciones locales y distribuidas. * Como gestionar y controlar la totalidad del sistema para conseguir ejecuciones eficientes de ambos tipos de aplicaciones. Coscheduling es el principio básico usado para compartir y planificar la CPU. Cosche-duling se basa en la reducción del tiempo de espera de comunicación de aplicaciones distribuidas, planificando simultáneamente todas (o un subconjunto de) las tareas que la componen. Por lo tanto, mediante el uso de técnicas de coscheduling, únicamente se puede incrementar el rendimiento de aplicaciones distribuidas con comunicación remota entre las tareas que la componen. Las técnicas de Coscheduling se clasifican en dos grandes grupos: control-explícito y control-implícito. Esta clasificación se basa en la forma de coplanificar las tareas distribuidas. En control-explícito, la coplanificación es realizada por procesos y (o) procesadores especializados. En cambio, en control-implícito, las técnicas de coscheduling se realizan tomando decisiones de planificación localmente, dependiendo de los eventos que ocurren en cada estación de trabajo. En este proyecto se presentan dos mecanismos de coscheduling, los cuales siguen las dos diferentes filosofías explicadas anteriormente, control-implícito y control-explí-cito. También proporcionan características adicionales incluyendo un buen rendimiento en la ejecución de aplicaciones distribuidas, ejecución simultánea de varias aplicaciones distribuidas, bajo overhead y también bajo impacto en el rendimiento de la carga local. También se presenta un modelo de coscheduling, el cual proporciona una base teórica para el desarrollo de nuevas técnicas de control-implícito. La técnica de control-implícito propuesta se basa en este modelo. El buen comportamiento de las técnicas de coscheduling presentadas en este trabajo se analiza en primer lugar por medio de simulación. También se ha realizado un gran esfuerzo en la implementación de estas técnicas de coscheduling en un Cluster real. El estudio de los resultados obtenidos proporciona una orientación importante para la investigación futura en el campo de coscheduling. En la experimentación en el Cluster real, se han utilizado varios benchmarks distribuidos con diversos patrones de comunicación de paso de mensajes: regulares e irregulares, anillos lógicos, todos-a-todos, etc. También se han utilizado benchmarks que medían diferentes primitivas de comunicación, tales como barreras, enlaces uni y bidireccionales, etc. El uso de esta amplia gama de aplicaciones distribuidas ha servido para demostrar la aplicabilidad de las técnicas de coscheduling en computación distribuida basados en Clusters.