[en] The goal of this thesis is to show that it is possible to achieve a better parallel application perfor-mance in multiprocessor operating environments when the kernel and the application cooperate in the resource management. The study includes the whole application, in addition to the components whose manage-ment is mainly supported by the operating system. The selected applications for study are medium grain parallelism applications (ie. servers, subsystems, virtual machines,...). Our work includes a design and implementation of an operating environment in the micro-kernel technology with a new scheduling approach. We have implemented space sharing scheduling policies to isolate applications inside machine partitions; each partition has its own scheduling policy and the user can modify priorities, quantums and policies in his application partition. This approach allows each application to adjust and tune its own scheduling to achieve the better performance it would. Also it permits to protect applications from the other applications faults. We propose a new abstraction: the eXecution context (eXc) as the processor virtual object that allows the application to manage its threads. The eXc are offered by the kernel to the application to run threads in the physical processors that the kernel gives to the application. The kernel communicates to the application, in an asynchronous way, the events that could lead to a rescheduling of its threads. This events are: thread blocked/unblocked, physical processor allocated/deallocated and the clock, to have the possibility of timeouts at application level. New synchronization primitives prevent the deadlock problem when there may be a thread preemption in a mutex area. Our implementation overcomes throughput in one order of magnitude and also has a gain in the execution time for the other application threads. This work has been implemented in a shared memory multiprocessor. We have modified the Mach 3.0 microkernel, the OSF/1 MK operating environment and the CThreads library. This library has been also modified to offer more complete scheduling policies and synchronization mechanisms.

[es] El objetivo de nuestro trabajo ha sido defender la tesis de que, para los entornos de trabajos actuales, multiprocesador, una opción válida para obtener el mejor rendimiento de las aplicaciones paralelas de propósito general es conseguir que el kernel y la propia aplicación cooperen en la gestión de los recursos. El estudio abarca a la aplicación en su conjunto, con todas sus partes, en cuya ejecución el sistema operativo toma una parte activa y decisoria. Y nos hemos centrado en aplicaciones paralelas multiflujo de granularidad media. Hemos diseñado y realizado un entorno de trabajo basándonos en la tecnología microker-nel en el que ofrecemos un nuevo sistema de planificación. A partir de políticas de planificación de particionado de la máquina, hemos aislado a las aplicaciones, unas de otras, y hemos habilitado que en cada partición el usuario pueda decidir qué política de planificación y qué quantums y recálculo de prioridades quiere. Con ello conseguimos, por un lado, que cada aplicación pueda ajustar la planificación que mejor rendimiento le suponga. Por otro, que no queden afectadas unas por el funcionamiento de otras. A partir de la abstracción de procesador virtual, dotamos a la aplicación de la capacidad de gestionar la planificación de sus propios flujos, mediante la nueva abstracción "contexto de eje-cución" (eXc) que el kernel ofrece a la aplicación para que pueda ejecutar un flujo en cada uno de los procesadores físicos que le ha asignado. En este nuevo entorno el kernel puede comunicar de manera asíncrona con la aplicación, transmitiéndole los eventos que puedan afectar a ésta para decidir una replanificación en sus flujos. En concreto, el bloqueo/desbloqueo de flujos, la asigna-ción/desasignación de procesadores físicos y un temporizador para poder disponer del dispositivo reloj a nivel de aplicación. Se han resuelto los problemas de desbanque de flujos dentro de exclusiones mutuas gracias a unas nuevas primitivas de sincronización que evitan el abrazo mortal. Con nuestra realización de paso de gestión de flujos del kernel a la aplicación, además de aumentar el throughput en un orden de magnitud, ganamos tiempo de ejecución para otros flujos de la aplicación. La plataforma de desarrollo ha sido un multiprocesador de memoria compartida sobre el que hemos modificado el microkernel Mach 3.0, con el entorno operativo OSF/1 MK y la librería de threads de usuario CThreads, modificada igualmente para enriquecer y potenciar la parte de planificación de flujos.