Universidad Capitan General Gerardo Barrios Facultad de Ciencia y Tecnologia. Sistemas Operativos Tema: Los Servicios Posix Integrantes: Ayala Vásquez William Alcides SMTS110510 Fecha de Entrega: INDICE INTRODUCCION OBJETIVOS OBJETIVOS GENERALES OBJETIVOS ESPECIFICOS MARCO TEORICO DEFINICION DE POSIX (Portable Operating System Interface para UNIX). Familia de estándares relacionados especificados por la IEEE para definir APIs para la compatibilidad de software entre los diferentes sistemas operativos Unix. El término "POSIX" fue sugerido por Richard Stallman en respuesta a un requerimiento de la IEEE, que deseaba un nombre memorable. La familia de estándares POSIX es formalmente designada como IEEE 1003, y el nombre del estándar internacional ISO es ISO/IEC 9945. Si los diseñadores de programas se adecúan a POSIX, sus aplicaciones podrán ejecutarse en cualquier sistema operativo compatible con POSIX. Los sistemas operativos que soportan POSIX son: * A/UX * AIX * BSD/OS * HP-UX * INTEGRITY * Irix * LynxOS * Mac OS X * MINIX * OpenVMS * QNX * RTEMS (POSIX 1003.1-2003 Profile 52) * Solaris * OpenSolaris * UnixWare * VxWorks * Windows con kernel NT (usados en Windows NT, 2000, 2003; XP, Vista): sólo en algunas ediciones o con determinadas aplicaciones instaladas. IEEE (Institute of Electrical and Electronics Engineers) Asociación de profesionales con sede en EEUU que fue fundada en 1884, y que actualmente cuenta con miembros de más de 140 países. Investiga en campos como el aeroespacial, computacional, comunicaciones, etc. APIs 1. (Application Programming Interface - Interfaz de Programación de Aplicaciones). Grupo de rutinas(conformando una interfaz) que provee un sistema operativo, una aplicación o una biblioteca, que definen cómo invocar desde un programa un servicio que éstos prestan. En otras palabras, una API representa un interfaz de comunicación entre componentes software. El software que provee la funcionalidad descrita por una API se dice que es una implementación del API. El API en sí mismo es abstracto, en donde especifica una interfaz y no da detalles de implementación. Un API a menudo forma parte de SDK (Kit de desarrollo de software). Ejemplos de APIs: * API de Windows * API de Internet Explorer. * OpenGL: API de gráficos en 3d. * DirectX. 2. Es el método que utiliza un programa para interactuar con funciones del sistema operativo. 4.4. Ejercicios de POSIX de Tiempo Real Desarrolle las siguientes aplicaciones: 1. Gestión de hilos: o Objetivos: Practicar con la creación y ejecución de hilos o Descripción: Crear un programa con tres hilos Cada hilo consiste en un bucle que pinta 5 veces en pantalla un mensaje diferente (por ejemplo, el valor de un contador) 2. Planificación: o Objetivos: Practicar con la planificación de hilos o Descripción: Asignar a los tres hilos del ejercicio 1 la misma prioridad. Probar 2 casos: a. Hilos planificados con la política SCHED_RR b. Hilos planificados con la política SCHED_FIFO En ambos casos (FIFO y RR) probar las dos siguientes alternativas: a. Poner instrucciones nanosleep() en cada lazo principal b. Usar la función eat() (suministrada en load.c) para simular tiempos de ejecución en cada lazo principal Asignar prioridades diferentes a cada hilo Probar también la diferencia entre que el hilo se duerma (nanosleep()) y que consuma CPU (eat()) 3. Sincronización de acceso mutuamente exclusivo: o Objetivos: Practicar con el mutex para realizar accesos mutuamente exclusivos y evitar la inversión de prioridad. o Descripción: Crear dos hilos que usan un recurso compartido durante un cierto tiempo. Uno tiene prioridad alta, y otro baja. Utilizar el modulo “load.h” para simular tiempos de ejecución. Forzar que el hilo de prioridad alta se active durante la región crítica del hilo de prioridad baja. Crear un tercer hilo de prioridad mediana, y que no comparte el recurso. Forzar que el hilo de prioridad mediana se active durante la espera del hilo de prioridad alta. Observar el efecto de la inversión de prioridad. Eliminar la inversión de prioridad. 4. Sincronización de espera: o Objetivos: Practicar la sincronización de espera con variables condicionales o Descripción: Crear un programa con dos hilos El primer hilo lee un mensaje del teclado, lo escribe en una variable protegida con mutex, y avisa al segundo hilo señalando una variable condicional El segundo hilo espera en la variable condicional y, cuando es señalizado, lee el mensaje y lo pinta en pantalla El proceso se repite indefinidamente. Es decir, no se trata de hilos periódicos, sino de que cada hilo se activa una sola vez, y su código consiste en un bucle indefinido. GLOSARIO