Este documento presenta un análisis del proceso de desarrollo de software independiente de la plataforma (cross-platform support middlewares o CPSMs). Describe las herramientas para analizar un CPSM, incluyendo un modelo formal y parámetros característicos. Luego, detalla los pasos para desarrollar un CPSM, como definir servicios, plataformas compatibles y mecanismos de abstracción. Finalmente, incluye un caso de estudio para ilustrar la implementación de un CPSM propio y un análisis comparativo
Este documento presenta los objetivos, temario, metodología docente y evaluación de un curso sobre sistemas concurrentes y distribuidos impartido en el año académico 2013-2014. Incluye apuntes de teoría sobre temas como introducción a la concurrencia, sincronización en memoria compartida, sistemas basados en paso de mensajes e introducción a los sistemas de tiempo real. También contiene problemas de práctica relacionados con cada tema.
Este documento presenta una introducción a la teoría y métodos de la investigación operativa. Explica los orígenes y desarrollo de la programación lineal, teoría de juegos y optimización. Luego, cubre temas como modelización de problemas, programación lineal, dualidad, análisis de sensibilidad, problemas de transporte, redes y programación entera. El objetivo es proporcionar los fundamentos teóricos y herramientas prácticas de la investigación operativa a través de teoría, ejercicios y aplicaciones
Este documento introduce los conceptos básicos de diseño digital de computadoras. Explica que las computadoras evolucionaron de ser grandes y caras máquinas reservadas solo para grandes organizaciones a ser más pequeñas y asequibles para un mayor número de personas. Describe los componentes básicos de una computadora digital como microprocesadores y memoria, y cubre temas como sistemas numéricos binarios, puertas lógicas, registros y ALU. El objetivo es proveer una comprensión general de cómo funcionan las computadoras a nivel básico.
Este documento presenta una revisión teórica del control de procesos industriales continuos. Explica conceptos clave como modelos de procesos, realimentación, elementos de control, diseño de sistemas de control, clasificación de sistemas, respuesta temporal y de frecuencia, lugar de las raíces, funcionamiento y estabilidad de sistemas de control, y sistemas de tiempo discreto.
Este documento presenta apuntes sobre teoría y análisis de señales. Explica los fundamentos del muestreo de señales continuas, incluyendo muestreo periódico y multiperiódico. Detalla cómo se realiza el muestreo de señales continuas por tramos, con un ejemplo numérico. También introduce la transformada Z como herramienta para el análisis de sistemas de tiempo discreto.
Este documento presenta una introducción al lenguaje VHDL. Explica la metodología de diseño de circuitos electrónicos desde la especificación hasta la implementación, haciendo hincapié en el lenguaje VHDL como herramienta de descripción. Se divide en cuatro partes principales: descripción del diseño, introducción a VHDL, elementos sintácticos de VHDL y aplicaciones de VHDL para simulación y síntesis. El objetivo es familiarizar al estudiante con el flujo de diseño de circuitos y las capacidades del
Este documento presenta una introducción al lenguaje de programación C. Explica conceptos básicos como la estructura típica de un programa en C, los tipos de datos escalares y literales, las declaraciones de variables, la entrada y salida por pantalla, expresiones, estructuras de control, vectores, cadenas, funciones, y pasos de parámetros. El documento está dividido en capítulos que cubren estos temas de manera gradual, incluyendo ejemplos de código.
Este libro presenta los conceptos básicos de la econometría aplicada utilizando el software libre Gretl. Explica los modelos de regresión lineal simple y múltiple, contrastes de hipótesis, intervalos de confianza y predicción. Incluye ejemplos y ejercicios resueltos para que los lectores practiquen los métodos econometricos con datos reales.
Este documento presenta los objetivos, temario, metodología docente y evaluación de un curso sobre sistemas concurrentes y distribuidos impartido en el año académico 2013-2014. Incluye apuntes de teoría sobre temas como introducción a la concurrencia, sincronización en memoria compartida, sistemas basados en paso de mensajes e introducción a los sistemas de tiempo real. También contiene problemas de práctica relacionados con cada tema.
Este documento presenta una introducción a la teoría y métodos de la investigación operativa. Explica los orígenes y desarrollo de la programación lineal, teoría de juegos y optimización. Luego, cubre temas como modelización de problemas, programación lineal, dualidad, análisis de sensibilidad, problemas de transporte, redes y programación entera. El objetivo es proporcionar los fundamentos teóricos y herramientas prácticas de la investigación operativa a través de teoría, ejercicios y aplicaciones
Este documento introduce los conceptos básicos de diseño digital de computadoras. Explica que las computadoras evolucionaron de ser grandes y caras máquinas reservadas solo para grandes organizaciones a ser más pequeñas y asequibles para un mayor número de personas. Describe los componentes básicos de una computadora digital como microprocesadores y memoria, y cubre temas como sistemas numéricos binarios, puertas lógicas, registros y ALU. El objetivo es proveer una comprensión general de cómo funcionan las computadoras a nivel básico.
Este documento presenta una revisión teórica del control de procesos industriales continuos. Explica conceptos clave como modelos de procesos, realimentación, elementos de control, diseño de sistemas de control, clasificación de sistemas, respuesta temporal y de frecuencia, lugar de las raíces, funcionamiento y estabilidad de sistemas de control, y sistemas de tiempo discreto.
Este documento presenta apuntes sobre teoría y análisis de señales. Explica los fundamentos del muestreo de señales continuas, incluyendo muestreo periódico y multiperiódico. Detalla cómo se realiza el muestreo de señales continuas por tramos, con un ejemplo numérico. También introduce la transformada Z como herramienta para el análisis de sistemas de tiempo discreto.
Este documento presenta una introducción al lenguaje VHDL. Explica la metodología de diseño de circuitos electrónicos desde la especificación hasta la implementación, haciendo hincapié en el lenguaje VHDL como herramienta de descripción. Se divide en cuatro partes principales: descripción del diseño, introducción a VHDL, elementos sintácticos de VHDL y aplicaciones de VHDL para simulación y síntesis. El objetivo es familiarizar al estudiante con el flujo de diseño de circuitos y las capacidades del
Este documento presenta una introducción al lenguaje de programación C. Explica conceptos básicos como la estructura típica de un programa en C, los tipos de datos escalares y literales, las declaraciones de variables, la entrada y salida por pantalla, expresiones, estructuras de control, vectores, cadenas, funciones, y pasos de parámetros. El documento está dividido en capítulos que cubren estos temas de manera gradual, incluyendo ejemplos de código.
Este libro presenta los conceptos básicos de la econometría aplicada utilizando el software libre Gretl. Explica los modelos de regresión lineal simple y múltiple, contrastes de hipótesis, intervalos de confianza y predicción. Incluye ejemplos y ejercicios resueltos para que los lectores practiquen los métodos econometricos con datos reales.
Este documento presenta una guía de usuario para Gretl, un paquete de software libre para análisis econométrico. Incluye instrucciones para la instalación del programa en sistemas Linux, Windows y Mac OS. Explica las características principales de Gretl como su interfaz gráfica de usuario intuitiva y su capacidad para una amplia gama de técnicas econométricas. También reconoce las contribuciones de otros autores en el desarrollo de Gretl.
Este documento trata sobre el uso de Java2D para el renderizado de figuras, imágenes y texto en dos dimensiones. Explica conceptos clave como Graphics2D, coordenadas, colores, fuentes y formas geométricas. Además, contiene ejemplos de cómo cargar, mostrar y modificar imágenes, así como dibujar diferentes tipos de figuras y texto. El documento está dividido en cinco capítulos que cubren de forma pormenorizada estos temas.
Este documento contiene apuntes sobre algoritmos y estructuras de datos. Incluye secciones sobre análisis de tiempo de ejecución de algoritmos usando notación Big-O, listas enlazadas, árboles binarios y generales, árboles AVL, y grafos. Explica conceptos teóricos y provee implementaciones en Java de varios problemas y estructuras de datos como pilas, colas, árboles y grafos.
Este documento presenta apuntes sobre control robusto y multiobjetivos de sistemas. Se divide en cuatro capítulos que tratan sobre análisis de sistemas con múltiples objetivos, análisis y síntesis de controladores para sistemas con saturaciones, síntesis de controladores mediante programación semidefinida y sintonización robusta de controladores industriales. El documento proporciona una introducción a cada uno de estos temas y sus aplicaciones en el diseño de controladores.
Este documento presenta un plan de mantenimiento para las instalaciones de ósmosis inversa en una planta de tratamiento de agua. Incluye una descripción de los diferentes tipos de mantenimiento y técnicas de análisis predictivo como análisis de vibraciones y aceite. También describe los equipos de la planta e instalaciones de ósmosis inversa, y propone un programa de mantenimiento correctivo, preventivo y predictivo para optimizar la operación y vida útil de los equipos.
Este documento presenta un diagrama que muestra la ejecución secuencial y multiprogramada de dos programas. En la ejecución secuencial, el programa 1 se ejecuta completamente antes de que comience el programa 2. En la ejecución multiprogramada, el sistema operativo permite que ambos programas se ejecuten de forma concurrente, alternando entre ellos.
Este documento presenta una introducción al lenguaje de programación C++. Explica conceptos básicos como tipos de datos, operadores, entrada y salida, estructuras de control y subprogramas. También cubre temas más avanzados como tipos compuestos, manejo de archivos, módulos, bibliotecas y excepciones. El documento está licenciado bajo Creative Commons para su uso no comercial compartiendo con la misma licencia.
Estudio de mejora del mantenimiento mediante la aplicación de la distribución...Eduardo Romero López
Este documento presenta un estudio sobre la aplicación de la distribución de Weibull al análisis de fallos históricos con el objetivo de mejorar el mantenimiento. Explica conceptos teóricos como curvas de fallos, fiabilidad, mantenibilidad y distribuciones estadísticas. Luego, muestra ejemplos prácticos del cálculo de parámetros de Weibull y ajuste de datos reales a esta distribución mediante software estadístico. Finalmente, concluye sobre la utilidad de este enfoque para la predicción de
Desde la primera formulaci´on de los Problemas de Ruteo de Veh´ıculos, una gran
cantidad de m´etodos han sido propuestos para su resoluci´on. Estos m´etodos
incluyen tanto algoritmos exactos como heur´ısticas. En este trabajo se presenta
un relevamiento de algunas de las heur´ısticas que han sido m´as significativas.
Este documento establece normas técnicas complementarias para el diseño y construcción de estructuras de mampostería. Incluye secciones sobre materiales para mampostería, análisis y diseño estructural, mampostería reforzada, confinada y no confinada, mampostería de piedras naturales, y evaluación y rehabilitación de estructuras de mampostería.
Este documento presenta una introducción a las arquitecturas avanzadas de computación paralela. Explica diferentes clasificaciones de sistemas paralelos, fuentes de paralelismo, y métricas para medir el rendimiento de sistemas paralelos. También describe arquitecturas como procesadores vectoriales, procesadores matriciales, redes de interconexión, y multiprocesadores.
Este documento presenta un proyecto de simulación de un péndulo invertido. El objetivo principal es diseñar un controlador óptimo para estabilizar el péndulo, incluso cuando está inicialmente en la posición vertical inestable. El proyecto incluye el modelado matemático del sistema, el diseño e implementación de controladores PID y LQR, y el desarrollo de una aplicación en Java para simular el péndulo invertido de forma interactiva.
Este documento presenta una introducción a la criptografía y la seguridad en computadores. En la primera sección se discuten conceptos básicos como la historia de la criptografía, números grandes y terminología. La segunda sección cubre fundamentos teóricos como teoría de la información, complejidad algorítmica, aritmética modular, curvas elípticas y otros temas. El documento contiene ejemplos y ejercicios propuestos para comprender mejor los conceptos.
Este documento introduce los conceptos básicos para administrar una red local basada en Internet. Explica la asignación de direcciones IP, el enrutamiento entre redes y la elección de una estructura de direcciones. También cubre temas como subredes, clases de direcciones, puentes, gateways y la configuración del enrutamiento. El objetivo es proporcionar una guía para tomar las decisiones de diseño e implementación necesarias al administrar una red TCP/IP.
Este documento presenta notas sobre álgebra lineal. Introduce conceptos fundamentales como estructuras algebraicas (grupos, anillos, cuerpos), espacios vectoriales, aplicaciones lineales, sistemas de ecuaciones lineales y determinantes. Explica propiedades de estas ideas y su relación, con ejemplos. El objetivo es proporcionar una introducción general a los temas básicos del álgebra lineal.
This document provides information about power electronics projects available from Vision Groups. It lists 100 project titles within various domains of power electronics, including buck converters, boost converters, AC-DC converters, rectifiers, inverters, motor drives, renewable energy, and more. It also provides contact information for Vision Groups, which offers guidance and support for completing these projects, including project reports, demonstrations, and embedded hardware kits. Students can implement their own project ideas or choose from the lists of titles.
Este documento trata sobre el aseguramiento de la calidad en las empresas. Explica que el aseguramiento de la calidad involucra factores como los recursos humanos, la tecnología, los procedimientos y los procesos. También describe el ciclo PDCA como una herramienta clave para el aseguramiento de la calidad y menciona que las normas de calidad pueden ayudar a las empresas a satisfacer consistentemente los requisitos de los clientes. Además, señala que los sistemas de calidad se pueden aplicar a empresas
Paginas de la enseñanza de la historia de mexicomoyotla
Este documento lista varias páginas web que ofrecen recursos para la enseñanza de la historia de México, incluyendo contenidos educativos, juegos interactivos y herramientas didácticas.
Tres de los cuatro organismos subsidiarios de Pemex reportaron pérdidas en 2013 debido a factores como menores
precios del petróleo, volúmenes de venta y efectos cambiarios. Pemex Exploración y Producción perdió $42,000 mdp,
Pemex Refinación $123,000 mdp y Pemex Petroquímica $14,769 mdp. Pemex anunció una inversión récord de $28,000
mdd en 2014, de los cuales el 85% se destinará a exploración y producción
El documento describe los blogs como herramientas web 2.0 que permiten publicar contenidos de forma cronológica y actualizarlos constantemente. Explica que los blogs pueden ser educativos, corporativos o personales y servir para compartir conocimientos, ideas o fines publicitarios. Finalmente, destaca que los blogs son útiles como herramientas educativas para la comunicación, el aprendizaje y el intercambio de ideas entre la comunidad educativa.
Este documento describe varios medios y métodos de educación no formal. Explica que las instituciones de educación no formal pueden ser específicas o no específicas, dependiendo de si su función principal es educativa o no. También describe varios medios itinerantes, medios de comunicación como radio, televisión y cine, y nuevas tecnologías como ordenadores y telecomunicaciones que pueden usarse para la educación no formal.
Este documento presenta una guía de usuario para Gretl, un paquete de software libre para análisis econométrico. Incluye instrucciones para la instalación del programa en sistemas Linux, Windows y Mac OS. Explica las características principales de Gretl como su interfaz gráfica de usuario intuitiva y su capacidad para una amplia gama de técnicas econométricas. También reconoce las contribuciones de otros autores en el desarrollo de Gretl.
Este documento trata sobre el uso de Java2D para el renderizado de figuras, imágenes y texto en dos dimensiones. Explica conceptos clave como Graphics2D, coordenadas, colores, fuentes y formas geométricas. Además, contiene ejemplos de cómo cargar, mostrar y modificar imágenes, así como dibujar diferentes tipos de figuras y texto. El documento está dividido en cinco capítulos que cubren de forma pormenorizada estos temas.
Este documento contiene apuntes sobre algoritmos y estructuras de datos. Incluye secciones sobre análisis de tiempo de ejecución de algoritmos usando notación Big-O, listas enlazadas, árboles binarios y generales, árboles AVL, y grafos. Explica conceptos teóricos y provee implementaciones en Java de varios problemas y estructuras de datos como pilas, colas, árboles y grafos.
Este documento presenta apuntes sobre control robusto y multiobjetivos de sistemas. Se divide en cuatro capítulos que tratan sobre análisis de sistemas con múltiples objetivos, análisis y síntesis de controladores para sistemas con saturaciones, síntesis de controladores mediante programación semidefinida y sintonización robusta de controladores industriales. El documento proporciona una introducción a cada uno de estos temas y sus aplicaciones en el diseño de controladores.
Este documento presenta un plan de mantenimiento para las instalaciones de ósmosis inversa en una planta de tratamiento de agua. Incluye una descripción de los diferentes tipos de mantenimiento y técnicas de análisis predictivo como análisis de vibraciones y aceite. También describe los equipos de la planta e instalaciones de ósmosis inversa, y propone un programa de mantenimiento correctivo, preventivo y predictivo para optimizar la operación y vida útil de los equipos.
Este documento presenta un diagrama que muestra la ejecución secuencial y multiprogramada de dos programas. En la ejecución secuencial, el programa 1 se ejecuta completamente antes de que comience el programa 2. En la ejecución multiprogramada, el sistema operativo permite que ambos programas se ejecuten de forma concurrente, alternando entre ellos.
Este documento presenta una introducción al lenguaje de programación C++. Explica conceptos básicos como tipos de datos, operadores, entrada y salida, estructuras de control y subprogramas. También cubre temas más avanzados como tipos compuestos, manejo de archivos, módulos, bibliotecas y excepciones. El documento está licenciado bajo Creative Commons para su uso no comercial compartiendo con la misma licencia.
Estudio de mejora del mantenimiento mediante la aplicación de la distribución...Eduardo Romero López
Este documento presenta un estudio sobre la aplicación de la distribución de Weibull al análisis de fallos históricos con el objetivo de mejorar el mantenimiento. Explica conceptos teóricos como curvas de fallos, fiabilidad, mantenibilidad y distribuciones estadísticas. Luego, muestra ejemplos prácticos del cálculo de parámetros de Weibull y ajuste de datos reales a esta distribución mediante software estadístico. Finalmente, concluye sobre la utilidad de este enfoque para la predicción de
Desde la primera formulaci´on de los Problemas de Ruteo de Veh´ıculos, una gran
cantidad de m´etodos han sido propuestos para su resoluci´on. Estos m´etodos
incluyen tanto algoritmos exactos como heur´ısticas. En este trabajo se presenta
un relevamiento de algunas de las heur´ısticas que han sido m´as significativas.
Este documento establece normas técnicas complementarias para el diseño y construcción de estructuras de mampostería. Incluye secciones sobre materiales para mampostería, análisis y diseño estructural, mampostería reforzada, confinada y no confinada, mampostería de piedras naturales, y evaluación y rehabilitación de estructuras de mampostería.
Este documento presenta una introducción a las arquitecturas avanzadas de computación paralela. Explica diferentes clasificaciones de sistemas paralelos, fuentes de paralelismo, y métricas para medir el rendimiento de sistemas paralelos. También describe arquitecturas como procesadores vectoriales, procesadores matriciales, redes de interconexión, y multiprocesadores.
Este documento presenta un proyecto de simulación de un péndulo invertido. El objetivo principal es diseñar un controlador óptimo para estabilizar el péndulo, incluso cuando está inicialmente en la posición vertical inestable. El proyecto incluye el modelado matemático del sistema, el diseño e implementación de controladores PID y LQR, y el desarrollo de una aplicación en Java para simular el péndulo invertido de forma interactiva.
Este documento presenta una introducción a la criptografía y la seguridad en computadores. En la primera sección se discuten conceptos básicos como la historia de la criptografía, números grandes y terminología. La segunda sección cubre fundamentos teóricos como teoría de la información, complejidad algorítmica, aritmética modular, curvas elípticas y otros temas. El documento contiene ejemplos y ejercicios propuestos para comprender mejor los conceptos.
Este documento introduce los conceptos básicos para administrar una red local basada en Internet. Explica la asignación de direcciones IP, el enrutamiento entre redes y la elección de una estructura de direcciones. También cubre temas como subredes, clases de direcciones, puentes, gateways y la configuración del enrutamiento. El objetivo es proporcionar una guía para tomar las decisiones de diseño e implementación necesarias al administrar una red TCP/IP.
Este documento presenta notas sobre álgebra lineal. Introduce conceptos fundamentales como estructuras algebraicas (grupos, anillos, cuerpos), espacios vectoriales, aplicaciones lineales, sistemas de ecuaciones lineales y determinantes. Explica propiedades de estas ideas y su relación, con ejemplos. El objetivo es proporcionar una introducción general a los temas básicos del álgebra lineal.
This document provides information about power electronics projects available from Vision Groups. It lists 100 project titles within various domains of power electronics, including buck converters, boost converters, AC-DC converters, rectifiers, inverters, motor drives, renewable energy, and more. It also provides contact information for Vision Groups, which offers guidance and support for completing these projects, including project reports, demonstrations, and embedded hardware kits. Students can implement their own project ideas or choose from the lists of titles.
Este documento trata sobre el aseguramiento de la calidad en las empresas. Explica que el aseguramiento de la calidad involucra factores como los recursos humanos, la tecnología, los procedimientos y los procesos. También describe el ciclo PDCA como una herramienta clave para el aseguramiento de la calidad y menciona que las normas de calidad pueden ayudar a las empresas a satisfacer consistentemente los requisitos de los clientes. Además, señala que los sistemas de calidad se pueden aplicar a empresas
Paginas de la enseñanza de la historia de mexicomoyotla
Este documento lista varias páginas web que ofrecen recursos para la enseñanza de la historia de México, incluyendo contenidos educativos, juegos interactivos y herramientas didácticas.
Tres de los cuatro organismos subsidiarios de Pemex reportaron pérdidas en 2013 debido a factores como menores
precios del petróleo, volúmenes de venta y efectos cambiarios. Pemex Exploración y Producción perdió $42,000 mdp,
Pemex Refinación $123,000 mdp y Pemex Petroquímica $14,769 mdp. Pemex anunció una inversión récord de $28,000
mdd en 2014, de los cuales el 85% se destinará a exploración y producción
El documento describe los blogs como herramientas web 2.0 que permiten publicar contenidos de forma cronológica y actualizarlos constantemente. Explica que los blogs pueden ser educativos, corporativos o personales y servir para compartir conocimientos, ideas o fines publicitarios. Finalmente, destaca que los blogs son útiles como herramientas educativas para la comunicación, el aprendizaje y el intercambio de ideas entre la comunidad educativa.
Este documento describe varios medios y métodos de educación no formal. Explica que las instituciones de educación no formal pueden ser específicas o no específicas, dependiendo de si su función principal es educativa o no. También describe varios medios itinerantes, medios de comunicación como radio, televisión y cine, y nuevas tecnologías como ordenadores y telecomunicaciones que pueden usarse para la educación no formal.
El documento habla sobre el aseguramiento de la calidad en una organización. Explica que el aseguramiento de la calidad implica evaluar procesos, identificar oportunidades de mejora, documentar cambios y verificar que los procesos se realizan según la documentación. También discute la importancia de la documentación del sistema de calidad y que la dirección es responsable de establecer la política de calidad y asegurar que el sistema cumpla con los requisitos.
El documento habla sobre la historia de la Fuerza Aérea Ecuatoriana. Comenzó oficialmente en 1920 y ha participado en conflictos internacionales contra Perú en 1981 y 1995. Cumple funciones militares y de desarrollo económico. También ofrece servicios educativos y de bienestar social.
Este documento proporciona una introducción al entorno de trabajo de Excel. Explica los elementos básicos de la ventana de Excel como las filas, columnas y celdas. También describe cómo cambiar el nombre de una hoja, ingresar datos, realizar operaciones básicas como borrar celdas, y cambiar entre hojas.
La compañía se dedica al transporte y diseño de mezclas de concreto premezclado en Bucaramanga, Colombia. Su misión es satisfacer los requisitos de calidad y servicio de sus clientes. Su visión es convertirse en la empresa líder en el transporte y diseño de concreto premezclado para 2018. Diseñan mezclas personalizadas según las especificaciones de cada cliente y transportan el concreto de manera adecuada para preservar sus propiedades.
Este documento presenta la guía para la primera unidad de la materia Introducción a la Arquitectura. Se introducirá a los estudiantes en el reconocimiento de obras arquitectónicas a través del análisis de sus elementos, espacialidad y relación con el entorno. Los estudiantes trabajarán en grupos analizando una maqueta y de forma individual realizando planos y cortes a escala de una obra seleccionada. El objetivo es que los alumnos inicien el estudio de la arquitectura y las herramientas gráfic
Este documento presenta el proyecto "Literary Travels" de Globalbook, que fusiona la literatura y el turismo para ofrecer viajes literarios. El proyecto implica activamente a las librerías de su red para que actúen como prescriptoras de estos viajes y obtengan un 50% de beneficios. También ofrece a los editores paquetes sobre sus libros para promociones experienciales dirigidas a lectores. El modelo híbrido propuesto combina las fortalezas tradicionales de las librerías con innovaciones como los viajes literarios para
Un sistema de gestión de contenidos (CMS) permite crear y administrar contenido para sitios web de manera independiente del diseño. Los CMS tienen interfaces que controlan bases de datos donde se almacena el contenido y permiten que varios editores publiquen contenido de forma fácil y controlada. WordPress es un popular CMS enfocado en blogs que fue creado en PHP y MySQL y tiene licencia GPL.
La herramienta de Recursos permite organizar recursos como archivos y enlaces mediante carpetas. La herramienta de Correo permite comunicarse con estudiantes y profesores del curso. La herramienta de Calendario muestra eventos y tareas, aunque su funcionalidad es limitada. La herramienta de Foros permite crear temas de discusión asíncrona. La integración de fuentes RSS permite incluir contenido externo relevante al curso en la sección de Noticias.
O documento fornece instruções sobre técnicas de automassagem para aliviar tensões musculares em diferentes partes do corpo, como cabeça, pescoço, ombros, costas e pernas. É recomendado começar com movimentos circulares nas têmporas e mandíbula, além de pressionar músculos do antebraço, panturrilha e pés. A automassagem é apresentada como alternativa rápida e eficaz para relaxar no dia-a-dia.
Dokumen tersebut menawarkan kesempatan bisnis waralaba jaringan Trimedia Network yang menjual emas sebagai produk utama. Terdapat berbagai paket keanggotaan dengan harga bervariasi dan bonus yang menarik seperti bonus sponsor, level, pasangan, titik, serta reward prestasi berupa emas, mobil, atau uang tunai jika memenuhi syarat tertentu. Investasi emas dianggap menarik karena nilai yang stabil, tidak terpengaruh inflasi, serta mudah dijual kemb
Este documento proporciona información sobre Buscapina 10 mg comprimidos recubiertos, un medicamento que contiene N-butilbromuro de hioscina. Se utiliza para tratar espasmos del tracto gastrointestinal, biliar y genitourinario. Incluye instrucciones sobre dosificación, advertencias sobre posibles efectos adversos como sequedad de boca, y consejos sobre el almacenamiento y conservación del medicamento.
Este documento provee una introducción a las redes de telecomunicaciones. Explica los conceptos básicos como elementos de red, clasificación de redes, direccionamiento, encaminamiento, capas OSI y TCP/IP, redes WAN, integración de redes, control de congestión y evolución a IPv6.
Este documento trata sobre la función de mantenimiento y su gestión. Explica los diferentes tipos de intervenciones de mantenimiento, como la programación de intervenciones y el control presupuestario. También describe la estructura de costos de mantenimiento, incluyendo el costo de intervención, fallas y almacenamiento. Por último, analiza técnicas para el análisis de fallas como el FMECA y los árboles de falla.
Este documento trata sobre la función de mantenimiento en una organización. Explica los diferentes tipos de actividades de mantenimiento como la programación de intervenciones, la gestión de repuestos y personal, y las estrategias de mantenimiento como la prefalla, preventiva y predictiva. También describe la estructura de costos asociada a la función de mantenimiento e incluye técnicas de análisis de fallas como FMECA y árboles de falla. Finalmente, discute la importancia de los sistemas de información de mantenimiento para satisfacer
As part of the process of adapting the current regulation of Mobile Termination Rates (MTR) to the EC recommendation of May 2009, SVP Advisors has developed a Bottom-up LRIC model (the “Model”) on behalf of the Spanish Telecommunications Regulator. The Model will undergo a public consultation process, providing the opportunity for stakeholders to provide their feedback and contributions. Among other, the Model covers pure LRIC calculation, the effect of MVNO services, spectrum refarming considerations, multiple technologies (e.g. GSM, UMTS, LTE) and several annualization methods (such as linear depreciation, tilted annuities and economic depreciation).
Este documento presenta una revisión teórica sobre control de procesos industriales continuos. Explica conceptos clave como modelos de procesos, realimentación, elementos de control, diseño de sistemas de control, clasificación de sistemas, respuesta temporal y de frecuencia, lugar de las raíces, funcionamiento y estabilidad de sistemas de control, y sistemas de tiempo discreto.
Este documento presenta una tesis de ingeniería sobre protocolos para redes inalámbricas de sensores. Describe las redes de sensores, los nodos sensores, los estándares de comunicación como ZigBee e IEEE 802.15.4, y varios protocolos de red como encaminamiento jerárquico, geográfico y centrado en los datos. También detalla el diseño de simulaciones en Omnet++, la implementación de módulos de red como SPIN y consciencia de energía, y la evaluación de métricas en simulaciones. El trabajo
Manual ingeniero mantenimiento diseñado para estudiantes universitarioscspeirl2016
El documento trata sobre la función de mantención en una organización. Explica los diferentes tipos de intervenciones de mantención, como la gestión de largo, mediano y corto plazo. También describe las estrategias de mantención como la pre-falla, preventiva y predictiva. Además, analiza la estructura de costos asociados a la mantención e introduce técnicas para el análisis de fallas como el FMECA y los árboles de falla. Por último, destaca la importancia de los sistemas de información para la
Este manual proporciona información sobre el hardware y software de los centros TIC de la Comunidad de Andalucía. Explica los componentes de los armarios de datos, aulas y periféricos comunes, así como el sistema operativo Guadalinex y herramientas de gestión como el CGA y Gesuser. Incluye manuales detallados sobre el uso de escáneres, cámaras, impresoras y herramientas educativas como JClic.
Este documento presenta una introducción al uso de programación visual basic (VBA) en Excel para propósitos de análisis numérico. Explica cómo evaluar funciones definidas por el usuario, incluyendo funciones predeterminadas de Excel. También describe elementos básicos de programación en VBA como flujos secuenciales, condicionales y repetitivos, y el manejo de rangos y matrices dinámicas. Finalmente, muestra ejemplos de cómo evaluar expresiones matemáticas escritas en lenguaje común y aplicar métodos numéricos como solución
Este documento presenta una introducción a la programación visual basic (VBA) para Excel y elementos de análisis numérico. Explica cómo evaluar funciones, crear gráficas, programar macros, y usar elementos de programación como flujos secuenciales, condicionales y repetitivos. También cubre temas como la solución de ecuaciones, integración, y problemas de valor inicial para ecuaciones diferenciales ordinarias usando métodos numéricos. El objetivo es mostrar el gran potencial de Excel para análisis científico y enseñanza de
Este documento presenta una introducción a la programación visual basic (VBA) para Excel y elementos de análisis numérico. Explica cómo evaluar funciones, crear gráficas, programar macros, y usar elementos de programación como flujos secuenciales, condicionales y repetitivos. También cubre temas como la solución de ecuaciones, integración, y problemas de valor inicial para ecuaciones diferenciales ordinarias usando métodos numéricos. El objetivo es mostrar el gran potencial de Excel para ciencias e ingeniería, y su utilidad para la en
Este documento trata sobre el benchmarking en sistemas Linux. Explica que el benchmarking implica medir la velocidad de ejecución de tareas para comparar diferentes configuraciones de hardware y software. Recomienda utilizar herramientas de benchmarking estándar como el Linux Benchmarking Toolkit (LBT) y proporciona detalles sobre cómo usar esta herramienta y cómo interpretar los resultados. Además, advierte sobre posibles fallos comunes en el proceso de benchmarking y factores irrelevantes a considerar.
Este documento proporciona instrucciones para la instalación y configuración de hardware y software CANopen para sistemas Modicon M340. Explica cómo instalar procesadores BMX P34 CANopen y dispositivos, y cómo configurar parámetros de comunicación, dispositivos y el maestro CANopen usando Unity Pro y Catalog Manager. También cubre programación, depuración, diagnóstico y objetos de lenguaje para comunicaciones CANopen.
Este documento presenta una propuesta y evaluación de un algoritmo de filtrado adaptable. Introduce los conceptos de filtros digitales fijos y adaptables, y sus aplicaciones como identificación de sistemas, cancelación de ruido y eco. Describe algunos algoritmos adaptables existentes como LMS, NLMS, VSS. Luego presenta un nuevo algoritmo desarrollado que mejora el rendimiento de VSS al modificar el paso adaptativo considerando la desviación estándar del error. Finalmente, evalúa el desempeño del algoritmo propuesto frente a VSS
Este documento presenta un trabajo de fin de máster sobre un sistema de mantenimiento predictivo para cargaderos de combustible utilizando técnicas de sistemas multiagentes. El sistema recibe datos de los activos de la empresa y los analiza mediante redes neuronales artificiales para predecir posibles averías en las válvulas principales de los cargaderos. El objetivo es evitar derrames y reducir los costes operativos. El documento describe el estado del arte, los requisitos, el diseño y las pruebas realizadas del sistema multiagente, y present
Este documento introduce el lenguaje de programación C. Explica las herramientas y software necesarios para programar en C en GNU/Linux, como el compilador gcc, depuradores gdb y ddd, make, man y cvs. También describe la sintaxis básica de C, incluyendo tipos de datos, operadores, estructuras de control y funciones.
Este documento proporciona información sobre el software Unity Pro de Schneider Electric, incluyendo: 1) las funciones principales como la interfaz de usuario, el simulador PLC, y los editores de programación; 2) la estructura de aplicaciones como tareas, secciones, y ejecución de modo monotarea y multitarea; y 3) detalles sobre la memoria, modos de funcionamiento, y objetos de sistema del PLC.
Este manual introduce los conceptos básicos de la programación en RAPID. Explica cómo crear y controlar movimientos de robots, usar señales de entrada/salida y comunicarse con el operador. Además, describe estructuras de datos como matrices y tipos de datos compuestos, y cómo diseñar programas de forma estructurada usando procedimientos y módulos. El manual proporciona una guía inicial para aprender RAPID antes de consultar documentación más avanzada.
Este documento presenta una introducción a la programación con Visual Basic. Explica conceptos básicos como datos, variables, constantes, algoritmos y diagramas de flujo. Luego introduce elementos del lenguaje Visual Basic como tipos de datos, declaración de variables, operadores aritméticos e instrucciones de entrada y salida. Finalmente, cubre estructuras de decisión, repetición, formularios y controles para la construcción de interfaces gráficas. El documento contiene ejemplos y ejercicios para cada tema.
El documento presenta información sobre sistemas operativos. Explica conceptos básicos como procesos, planificación de procesos, programación concurrente, interbloqueos y gestión de memoria. Incluye definiciones de sistemas operativos, su evolución histórica y las funciones y objetivos principales como interfaz usuario-computadora y administrador de recursos.
Similar a Zavolinsky tesisdegradoingenieriainformatica (20)
1. Tesis de Ingenier´ en Inform´tica
ıa a
Abstracci´n en el desarrollo
o
de software independiente de
la plataforma
An´lisis del proceso de desarrollo de Cross-Platform Support
a
Middlewares
Autor: Patricio Zavolinsky (81.611)
(pzavolinsky@yahoo.com.ar)
Tutora: Lic. Adriana Echeverr´
ıa
4. Tesis de Ingenier´ en Inform´tica
ıa a
Resumen
Un programa, en relaci´n a la plataforma que lo sustenta, debe enfrentar un desaf´
o ıo:
mantener su compatibilidad en el tiempo y el espacio. Es decir, permanecer compatible
con la plataforma que lo sustenta a pesar de la evoluci´n de ´sta (compatibilidad en el
o e
tiempo), y ser compatible con la mayor cantidad de plataformas posible (compatibilidad
en el espacio).
La soluci´n tradicional a este problema consiste en concentrar los detalles propios de la
o
plataforma en una capa de abstracci´n. El objetivo de esta capa es encapsular los detalles
o
de las interfaces de programaci´n provistas por distintas plataformas, en una unica interfaz
o ´
homog´nea. Una capa de abstracci´n con estas caracter´
e o ısticas se denomina Middleware.
Un Cross Platform Support Middleware (CPSM) es un Middleware que garantiza que
la interfaz que provee se encuentra implementada en su totalidad en todas las plataformas
con las que es compatible.
El objetivo de esta tesis consisti´ en analizar las actividades involucradas, y los proble-
o
mas que frecuentemente se deben enfrentar, en el desarrollo de un CPSM.
Dentro de las conclusiones derivadas del an´lisis presentado cabe destacar la relevan-
a
cia del proceso de desarrollo de un CPSM y la reconstrucci´n de dicho proceso a partir
o
de ejemplos completos de CPSMs que constituyen evidencia emp´ ırica de la viabilidad de
construcci´n de los mismos.
o
Para el problema de inicializaci´n y finalizaci´n de servicios se realiz´ un an´lisis de
o o o a
diferentes alternativas: inicializaci´n y finalizaci´n expl´
o o ıcitas e impl´ ıcitas. Para el caso par-
ticular de inicializaci´n impl´
o ıcita se propuso una soluci´n original que, bajo ciertas res-
o
tricciones, resuelve el problema a trav´s de la creaci´n una instancia est´tica de una clase
e o a
Initializer.
Para ilustrar el desarrollo de un CPSM, se implement´ un CPSM completo, como ca-
o
so de estudio, que provee servicios de concurrencia, comunicaciones y asociaci´n expl´o ıcita
de bibliotecas din´micas en Microsoft Windows y GNU/Linux. Adicionalmente se cons-
a
truy´ una aplicaci´n sustentada sobre dicho CPSM que permite abstraer la interacci´n
o o o
propia de una aplicaci´n cliente/servidor (i.e. el protocolo de comunicaciones) de el esta-
o
blecimiento de la conexi´n (sobre TCP/IP). En conjunto, dicha aplicaci´n y el CPSM del
o o
caso de estudio ejemplifican el proceso de desarrollo y la posterior utilizaci´n de un CPSM.
o
Patricio Zavolinsky (81.611) 3
5. Tesis de Ingenier´ en Inform´tica
ıa a
Introducci´n
o
El 14 de Octubre de 1987, Henry Spencer public´ sus “Diez Mandamientos para los Pro-
o
gramadores C” en el grupo de noticias comp.lang.c[Spe87]. El d´cimo mandamiento ordenaba:
e
Thou shalt foreswear, renounce, and abjure the vile heresy which claimeth that “All
the world’s a VAX”, and have no commerce with the benighted heathens who cling
to this barbarous belief, that the days of thy program may be long even though the
days of thy current machine be short.1
Poco m´s de tres a˜os m´s tarde, Spencer actualiz´ sus Mandamientos. En la versi´n
a n a o o
Anotada de 1990[Spe90], agreg´ la siguiente nota al d´cimo mandamiento:
o e
This particular heresy bids fair to be replaced by “All the world’s a Sun” or “All
the world’s a 386” (this latter being a particularly revolting invention of Satan),
but the words apply to all such without limitation. Beware, in particular, of the
subtle and terrible “All the world’s a 32-bit machine”, which is almost true today
but shall cease to be so before thy resume grows too much longer.2
Al margen del tono jocoso en el cual est´ formulado, el d´cimo mandamiento denuncia una
a e
preocupaci´n que hoy en d´ no ha perdido vigencia. Los programas se sustentan sobre sistemas
o ıa
operativos, los sistemas operativos sobre arquitecturas de hardware. Todo aquello sobre lo que
se construye un programa es considerado parte de la “plataforma”. Un programa, en relaci´n o
a la plataforma que lo sustenta, debe enfrentar un desaf´ mantener su compatibilidad en el
ıo:
tiempo y el espacio. Es decir, permanecer compatible con la plataforma que lo sustenta a pesar
de la evoluci´n de ´sta (compatibilidad en el tiempo), y ser compatible con la mayor cantidad
o e
de plataformas posible (compatibilidad en el espacio).
El primer aspecto del desaf´ consiste en sobrevivir a las modificaciones en la plataforma
ıo
subyacente, puntualmente, a modificaciones en las interfaces de programaci´n (APIs) de la
o
plataforma, como consecuencia de la evoluci´n. El segundo, consiste en poseer compatibilidad
o
con m´s de una plataforma. Una motivaci´n para buscar este tipo de compatibilidad es au-
a o
mentar los usuarios potenciales del programa, a todos los usuarios de las plataformas con las
que el programa es compatible. En sistemas distribuidos, una motivaci´n adicional es mejorar
o
la tolerancia a fallos (i.e. fault tolerance), utilizando redundancia heterog´nea, ya que utilizar
e
programas redundantes sobre diferentes plataformas, permite adquirir cierta tolerancia a fallos
en la plataforma3 [VR01].
1
“Rechazar´s, abandonar´s y repudiar´s la vil herej´ que asegura que ‘Todo el mundo es una VAX’ y evitar´s
a a a ıa a
toda relaci´n con los ignorantes incivilizados que se aferran a esta creencia barb´rica, para que los d´ de tu
o a ıas
programa sean largos incluso cuando los d´ de tu actual m´quina sean cortos.”
ıas a
2
“Esta herej´ en particular, podr´ reemplazarse por ‘Todo el mundo es una Sun’ o ‘Todo el mundo es una
ıa, ıa
386’ (siendo esta ultima una particularmente desagradable invenci´n de Sat´n), pero se aplica a todos los casos
´ o a
similares, sin excepci´n. Ten especial cuidado con la sutil y terrible ‘Todo el mundo es una m´quina de 32 bits’,
o a
que es pr´cticamente cierta hoy en d´ pero dejar´ de serlo antes de que tu curr´
a ıa, a ıculum crezca demasiado.”
3
Por ejemplo, un mismo programa que se ejecuta en varios hosts, algunos de ellos con la plataforma p1 y
otros con la plataforma p2 . Sup´ngase la existencia de un bug en determinada secuencia de ejecuci´n en p1 , que
o o
no se manifiesta en p2 . En este escenario, si el programa falla, como consecuencia del bug en p1 , los hosts que
utilizan p2 no se ver´n afectados y el programa distribuido se degradar´ pero no dejar´ de funcionar.
a a a
Patricio Zavolinsky (81.611) 4
6. Tesis de Ingenier´ en Inform´tica
ıa a
La soluci´n tradicional a este problema consiste en concentrar los detalles propios de la
o
plataforma en una capa de abstracci´n4 . El objetivo de esta capa es encapsular los detalles de
o
las APIs provistas por distintas plataformas, en una unica interfaz homog´nea. Una capa de
´ e
abstracci´n con estas caracter´
o ısticas se denomina Middleware 5 [Tan02].
Un Middleware que garantiza que la interfaz que provee6 se encuentra implementada en su
totalidad en todas las plataformas con las que es compatible ser´ denominado Cross Platform
a
Support Middleware (CPSM).
El objetivo de esta tesis es analizar las actividades involucradas, y los problemas que fre-
cuentemente se deben enfrentar, en el desarrollo de un CPSM.
Este an´lisis se organiza de la siguiente manera:
a
En el Cap´ıtulo 1 se presentan algunas herramientas de an´lisis que permiten describir y
a
clasificar CPSMs. A trav´s del Modelo formal (ver secci´n 1.1) es posible representar los
e o
componentes constitutivos de un CPSM (i.e. plataformas y servicios). Adicionalmente,
en este Cap´ıtulo se definen los Par´metros caracter´
a ısticos de un CPSM (ver secci´n 1.2).
o
Tambi´n es posible expresar, en t´rminos del Modelo formal, las limitaciones que dichos
e e
par´metros se imponen mutuamente.
a
En el Cap´ ıtulo 2 se describen las actividades involucradas en el desarrollo de un CPSM.
En la secci´n 2.1 se tratan las actividades que definen caracter´
o ısticas generales del CPSM
(e.g. lenguaje de programaci´n, paradigma, prop´sito). En la secciones 2.2 y 2.3 se pre-
o o
sentan las principales actividades que caracterizan a un CPSM: la definici´n de servicios
o
provistos y la definici´n de plataformas compatibles con el CPSM, respectivamente. En
o
la secci´n 2.4 se analizan diversos mecanismos de abstracci´n aplicados al desarrollo de
o o
un CPSM y algunos problemas de implementaci´n asociados a dichos mecanismos.
o
En el Cap´ıtulo 3 se presenta un caso de estudio que incluye el desarrollo de un CPSM, di-
se˜ado para sustentar un tipo de programa en particular. El Caso de Estudio se completa
n
presentando un ejemplo de un programa sustentado sobre dicho CPSM. El ejemplo se
introduce en tres intentos, cada uno de los cuales incorpora un nuevo servicio del CPSM.
En el Cap´ıtulo 4 se describen algunos CPSMs utilizados en otros cap´ıtulos para ejempli-
ficar diversos aspectos de un CPSM (e.g. par´metros caracter´
a ısticos, actividades involu-
cradas en el desarrollo de un CPSM, etc).
En el Ap´ndice A se definen algunos t´rminos cuyo significado puede interpretarse de
e e
diversas maneras seg´n el contexto en que se encuentren. El objetivo de este Anexo es
u
restar ambig¨edad a los t´rminos clave utilizados.
u e
4
En rigor, existen varias soluciones alternativas al problema planteado, entre ellas se cuentan: los lenguajes de
programaci´n interpretados (e.g. Perl, Python) y la ejecuci´n de programas utilizando un software de emulaci´n
o o o
de entorno de ejecuci´n (e.g. Wine, Cygwin). Este trabajo se centra en las soluciones que utilizan una capa de
o
abstracci´n y poseen un unico ´rbol de c´digo fuente, con porciones de c´digo comunes a todas las plataformas
o ´ a o o
compatibles y porciones dependientes de la plataforma.
5
El t´rmino Middleware frecuentemente connota una capa de abstracci´n sobre un sistema operativo de
e o
red[Tan02]. En esta tesis, el t´rmino se utiliza en un sentido amplio, denotando una capa de abstracci´n sobre
e o
un conjunto de plataformas, sin restringir su alcance a los sistemas operativos de red, ni su aplicaci´n a loso
sistemas distribuidos.
6
La interfaz provista por un Middleware puede dividirse en “servicios” (i.e. conjuntos de primitivas y re-
cursos que colaboran para proveer una funcionalidad coherente). La interfaz de cada servicio provisto por un
Middleware ser´ denominada “interfaz abstracta del servicio”. En contraposici´n, la interfaz de programaci´n
a o o
de una plataforma (API), para un servicio, ser´ la “interfaz nativa del servicio”.
a
Patricio Zavolinsky (81.611) 5
7. Tesis de Ingenier´ en Inform´tica
ıa a
1. Herramientas de an´lisis de un CPSM
a
A continuaci´n se introducen dos herramientas que se utilizan a lo largo de este trabajo
o
para analizar las caracter´ ısticas de un CPSM. La primer herramienta es un modelo formal de
la estructura de un CPSM donde se reconocen sus principales componentes constitutivos y
algunas restricciones impuestas sobre dichos componentes.
La segunda herramienta es un conjunto de par´metros que caracterizan a un CPSM. Ini-
a
cialmente se presenta una descripci´n de cada par´metro por separado y luego se consideran
o a
las interacciones entre los mismos y las limitaciones que se imponen mutuamente. Para algunos
de ellos, se presentan criterios de comparaci´n que permiten evaluar un conjunto de CPSMs
o
en relaci´n al par´metro considerado.
o a
En secciones posteriores se utiliza el modelo formal como marco de referencia para analizar
las actividades involucradas en el desarrollo de un CPSM y comparar diversas implementa-
ciones existentes de CPSMs utilizando los criterios derivados de los par´metros caracter´
a ısticos
presentados en la secci´n 1.2.
o
1.1. Modelo formal
En esta secci´n se presenta un modelo formal que permite analizar los problemas asociados
o
con el desarrollo de un CPSM. Este modelo permite analizar las decisiones que implica el
desarrollo de una capa de software que aisle los detalles de implementaci´n dependientes de
o
la plataforma. Adicionalmente, los elementos del modelo formal permiten derivar criterios de
clasificaci´n y an´lisis de CPSMs (ver secci´n 1.2).
o a o
El modelo formal definido a continuaci´n se expresa en t´rminos de ´lgebra de conjun-
o e a
tos, conectivas l´gicas y cuantificadores, existenciales y universales. Esta terminolog´ permite
o ıa
escribir de manera simb´lica las relaciones entre los elementos constitutivos de un CPSM y
o
comparar caracter´ ısticas de varios CPSMs. El objetivo del modelo es ilustrar la estructura de
un CPSM y por lo tanto debe interpretarse como una descripci´n general del sistema y no
o
como una construcci´n rigurosa en t´rminos matem´ticos.
o e a
El modelo puede definirse en los siguientes t´rminos:
e
Sea P un conjunto de plataformas pn , con n = 1..N ∈ N .7
Sea S un conjunto de servicios sm , con m = 0..M ∈ N .
Una notaci´n para definir un CPSM, A, es:
o
A = CP SM (P, S)
Es decir, A est´ definido como un CPSM que provee los servicios en S, y es compatible
a
con las plataformas en P.
A continuaci´n se presentan algunas definiciones adicionales que permiten caracterizar con
o
mayor detalle el conjunto de servicios, S:
Sea in la interfaz del servicio sm ∈ S existente en la plataforma pn ∈ P.
m
Sea Id (S, P) el conjunto de interfaces dependientes de la plataforma, in .
m
7
Donde N es el conjunto de los n´meros naturales.
u
Patricio Zavolinsky (81.611) 6
8. Tesis de Ingenier´ en Inform´tica
ıa a
Sea im la interfaz abstracta8 del servicio sm ∈ S, es decir, la interfaz que provee CPSM
para el servicio sm , independientemente de la plataforma subyacente.
Sea I(S) el conjunto de interfaces abstractas, im , independientes de la plataforma sub-
yacente.
Sea Σ un subconjunto de S, cuyos elementos (servicios) existen en todas las plataformas
pn y sus respectivas interfaces son equivalentes9 en todas ellas:
Σ = sl ∈ S ∀a, b ∈ [1, N ], ∃ia ∧ ∃ib ∧ ia ≡ ib
l l l l
Es decir, Σ es el conjunto los servicios que son trivialmente compatibles con todas las
plataformas consideradas en P 10 .
Figura 1.1: Diagrama gen´rico de CPSM
e
En la figura 1.1 se representa la estructura de un CPSM en t´rminos de sus caracter´
e ısticas
formales. En el eje horizontal se grafican los servicios provistos (S), en profundidad las plata-
formas soportadas (P), y en el eje vertical la relaci´n de abstracci´n entre capas, es decir, la
o o
relaci´n de “uso” que una capa de software mantiene con sus capas adyacentes (i.e. superior
o
e inferior). En esta dimensi´n se distinguen dos ´reas, una regi´n dependiente de la plata-
o a o
forma (indicada “PD”) y otra independiente de la plataforma (indicada “PI”). El objetivo
de un CPSM no trivial11 se ve representado en la transici´n entre el ´rea dependiente de la
o a
plataforma (PD) y el ´rea independiente de la plataforma (PI). Es decir, cualquier programa
a
construido sobre (sustentado en) el CPSM, resulta contenido en la regi´n PI y por lo tanto
o
es independiente de las plataformas incluidas en P. El trabajo necesario para aislar a dicho
8
En lo sucesivo se utilizar´ de forma indistinta los t´rminos “interfaz abstracta” e “interfaz independiente
a e
de la plataforma” para hacer referencia a la interfaz de un servicio que expone el CPSM a sus capas superiores.
9
Un posible criterio de equivalencia de interfaces puede formularse de esta manera: dado un programa que
utilice un servicio determinado, sm , se dir´ que las interfaces del servicio son equivalentes (respecto de dicho
a
programa) en todas las plataformas de P, si el programa compila en todas las plataformas y en todas ellas
exhibe el mismo comportamiento en tiempo de ejecuci´n (i.e., para cada conjunto de entradas, el programa
o
devuelve el mismo conjunto de salidas en todas las plataformas). En estos t´rminos, el criterio de equivalencia
e
se define en relaci´n a un programa. La rigurosidad de la equivalencia depender´ del grado de exhaustividad
o a
con que dicho programa utilice la interfaz del servicio.
10
Enti´ndase por “servicios trivialmente compatibles con un conjunto de plataformas”, a los servicios que se
e
encuentran disponibles en dichas plataformas y que, en todas ellas, exponen interfaces nativas equivalentes (ver
nota 9).
11
Mas adelante, en esta secci´n, se explicitan las caracter´
o ısticas de un CPSM trivial.
Patricio Zavolinsky (81.611) 7
9. Tesis de Ingenier´ en Inform´tica
ıa a
programa de los detalles de implementaci´n dependientes de la plataforma de los servicios que
o
requiere, constituye la esencia del CPSM y su principal funci´n.
o
N´tese el trazo gris que indica los servicios que inherentemente son independientes de la
o
plataforma (aquellos incluidos en Σ). Resulta innecesario y redundante que el CPSM provea
una interfaz para estos servicios, dada su naturaleza independiente de la plataforma12 .
El desarrollo de un CPSM requiere la existencia de, por lo menos, un servicio com´n a
u
todas las plataformas de P, con interfaces compatibles, es decir:
∃s0 ∈ Σ o #Σ ≥ 1
Dicho de otro modo, si no existiera ning´n punto de articulaci´n entre dos plataformas,
u o
ni siquiera un lenguaje de programaci´n en com´n
o u 13 , no ser´ posible construir un CPSM
ıa
compatible con ambas plataformas, ya que la selecci´n de un lenguaje de programaci´n cons-
o o
tituir´ una caracter´
ıa ıstica de dependencia de la plataforma. En lo sucesivo, este requerimiento
ser´ denominado condici´n de existencia del punto de articulaci´n.
a o o
En caso de no cumplirse con la condici´n de existencia del punto de articulaci´n, el tipo de
o o
desarrollo necesario para satisfacer las necesidades de independencia de la plataforma no es un
CPSM sino un lenguaje de programaci´n en com´n, y los artefactos a trav´s de los cuales se
o u e
llega a construir un software independiente de la plataforma no son otros que los compiladores
de dicho lenguaje en cada plataforma soportada.
Un ejemplo de este escenario puede ser: dadas dos arquitecturas (pA y pB ) con lenguajes de
m´quina distintos e incompatibles (iA e iB ), donde no existe ning´n lenguaje de programaci´n
a 0 0 u o
compilable (y ejecutable) en ambas arquitecturas. En este caso, no es posible desarrollar un
CPSM directamente. Sin embargo, para lograr abstracci´n de c´digo fuente es posible desa-
o o
rrollar un lenguaje en com´n, s0 (cuya definici´n est´ndar es i0 ), que pueda compilarse al
u o a
lenguaje de m´quina particular de cada arquitectura, e implementar compiladores de dicho
a
lenguaje en ambas arquitecturas (que en este caso deber´ traducir programas escritos uti-
ıan
lizando la definici´n est´ndar, i0 , del lenguaje com´n, s0 , al lenguaje de m´quina propio de
o a u a
cada arquitectura, in , que luego de ser ensamblado con el ensamblador espec´
0 ıfico de la misma,
dar´ lugar al ejecutable). Si bien el modelo formal es suficientemente amplio como para repre-
ıa
sentar este caso (las arquitecturas conforman el conjunto P, el lenguaje en com´n es el unico
u ´
elemento del conjunto S, con su interfaz abstracta i0 y los lenguajes de m´quina de cada ar-
a
quitectura constituyen las interfaces iA e iB ), no se trata de un CPSM ya que los compiladores
0 0
considerados son dos programas separados, distintos y escritos en diferentes lenguajes. En este
caso, el punto de articulaci´n es artificial ya que no est´ presente en el conjunto de programas
o a
realizados sino que es el compromiso existente en la estandarizaci´n del lenguaje en com´n.
o u
En contraposici´n, en un CPSM, el punto de articulaci´n se manifiesta expl´
o o ıcitamente a trav´s
e
de construcciones propias del lenguaje en el que est´ escrito (e.g. clases abstractas, declaraci´n
e o
de funciones, etc). Adicionalmente, este trabajo se restringir´ a considerar las plataformas, P,
a
12
Existen buenos argumentos a favor de generar interfaces para los servicios que son inherentemente indepen-
dientes de la plataforma, aunque estos argumentos no se enfocan en proveer independencia de la plataforma, sino
otro tipo de caracter´ısticas deseables en un Framework, y particularmente en un CPSM, como ser la coherencia
en las interfaces o la Seguridad (entendida como safety, ver secci´n 1.2)[Sch92].
o
13
i.e. donde todo programa escrito en dicho lenguaje sea compilable en ambas plataformas sin necesidad de ser
modificado y su ejecuci´n exhiba un comportamiento similar. N´tese que la ausencia de un lenguaje en com´n
o o u
implica tambi´n, que no existe un subconjunto util (a los fines pr´cticos) de un lenguaje que cumpla con la
e ´ a
condici´n antes mencionada.
o
Patricio Zavolinsky (81.611) 8
10. Tesis de Ingenier´ en Inform´tica
ıa a
en el sentido indicado en el Ap´ndice A, es decir, como Sistemas Operativos14 .
e
En el caso m´s general, el punto de articulaci´n, s0 , es un lenguaje de programaci´n estan-
a o o
darizado, con compiladores compatibles con el est´ndar del lenguaje, disponibles en todas las
a
plataformas consideradas.
Un CPSM que es compatible con una unica plataforma constituye un caso trivial, donde
´
no se aporta independencia de la plataforma ya que s´lo se considera una unica plataforma
o ´
compatible. En rigor, este tipo de pieza de software no deber´ denominarse CPSM ya que
ıa
no cumple con el requisito principal de proveer independencia de la plataforma. Este caso se
presenta para dar al lector una visi´n completa de la generalidad de un CPSM y c´mo una pieza
o o
de software dependiente de la plataforma puede generalizarse a un CPSM compatible con una
unica plataforma. Esta generalizaci´n es el punto de partida para aumentar la Compatibilidad
´ o
(ver secci´n 1.2) de la pieza de software dependiente de la plataforma, transform´ndola en un
o a
CPSM no trivial.
Un CPSM que s´lo provee el servicio s0 , es decir un CPSM para el cual S = {s0 } o, de
o
forma m´s general, S = Σ, es trivialmente compatible con todas las plataformas de P y no
a
aporta mayor independencia de la plataforma de la que originalmente exist´ ıa.
Un caso m´s interesante son los programas para los cuales Σ ⊂ S, es decir, cuando existe
a
al menos un servicio, sx perteneciente a S y que no se encuentra en Σ y, por lo tanto, para el
cual existen al menos dos plataformas donde las interfaces de dicho servicio son incompatibles:
sx ∈ S ∃a, b ∈ [1, N ], ∃ia ∧ ∃ib ∧ ia = ib
x x x x
En vista de los elementos del modelo formal puede refinarse la definici´n de CPSM para
o
eliminar los casos triviales y centrar la atenci´n en el problema mencionado anteriormente:
o
Se desea un CPSM que garantice, a todo programa sustentado sobre el mismo,
compatibilidad con las N plataformas de P (con N > 1). Se requiere tambi´n e
que dicho CPSM provea al menos un servicio sx disponible en las plataformas de
P pero no perteneciente a Σ, es decir, provea un servicio cuyas interfaces no son
equivalentes en todas las plataformas de P.
El objetivo ulterior es desarrollar un programa que encapsule las incompatibilidades de
interfaz de todos los servicios sx ∈ Σ.
/
De la formalizaci´n precedente puede extraerse la siguiente conclusi´n: un programa que
o o
cumpla con las caracter´ ısticas enunciadas podr´ clasificarse seg´n las plataformas consideradas
a u
en P, los servicios que provea en S y las interfaces abstractas, im , de cada servicio sm que
exponga.
Como consecuencia, cabe destacarse que si el programa A es, en efecto, un CPSM, luego
un programa B podr´ sustentarse directamente sobre las interfaces abstractas de A (es decir
ıa
ΣB = SB = SA ), y adquirir compatibilidad autom´tica con todas las plataformas con las que
a
A es compatible (PB = PA ).
De este an´lisis se desprenden tres desaf´ al definir un CPSM: seleccionar las plataformas
a ıos
con las que ser´ compatible, definir los servicios que ser´n provistos y especificar las interfaces
a a
correspondientes a cada servicio.
14
Ulrich Drepper, en su art´ıculo Dictatorship of the Minorities[Dre05] expone una postura radical respecto
del soporte que, en su opini´n, deber´ darse a diferentes arquitecturas en la biblioteca GNU del lenguaje C,
o ıa
glibc. El debate que propone puede analizarse en t´rminos del modelo formal presentado en este trabajo, aunque
e
ese an´lisis queda a cargo del lector.
a
Patricio Zavolinsky (81.611) 9
11. Tesis de Ingenier´ en Inform´tica
ıa a
N´tese que estos desaf´ distan de ser triviales. Una elecci´n demasiado estrecha en las
o ıos o
plataformas compatibles reduce, en efecto, el alcance del programa15 . Por otro lado, una elec-
ci´n demasiado ambiciosa podr´ reducir los servicios candidatos a ser incluidos en la capa de
o ıa
abstracci´n, debido a la existencia de, al menos, una plataforma en particular que no provea
o
(y donde no sea posible construir) una implementaci´n de alguna de las interfaces requeridas:
o
∃pn ∈ P, sm ∈ S in
m
Algo similar sucede con la selecci´n de servicios y la especificaci´n de sus interfaces. Si
o o
se provee gran cantidad de servicios, se reducir´ el n´mero de plataformas candidatas a ser
a u
incluidas en P, debido a que disminuir´ la cantidad de plataformas que proveen todos y cada
a
uno de los servicios de S. Si, por el contrario, se opta por reducir el n´mero de servicios provis-
u
tos, se compromete la funcionalidad del CPSM. Por ejemplo, un CPSM que provee un servicio
de comunicaciones basado en sockets y, para aumentar el n´mero de plataformas candidatas,
u
expone unicamente primitivas bloqueantes, pero no provee un servicio de concurrencia. Este
´
CPSM es de una utilidad muy reducida en casos donde se desea atender a m´s de un cliente
a
por vez.
Respecto de la especificaci´n de las interfaces de los servicios, si se opta por una interfaz
o
minimalista, se cuenta con una mayor cantidad de plataformas candidatas a ser incluidas en
el conjunto de plataformas compatibles, pero tambi´n se corre el riesgo de que se pierda la
e
esencia del servicio debido a la ausencia de primitivas fundamentales del mismo. Por otro lado,
si se busca una m´xima expresividad16 de las interfaces, al igual que con el caso de selecci´n
a o
de plataformas, se corre el riesgo de reducir el n´mero de plataformas candidatas.
u
En este sentido, el desarrollo de un CPSM requiere de un delicado equilibrio entre distintos
aspectos, como ser Compatibilidad, Flexibilidad y Performance (ver secci´n 1.2).
o
Por ultimo, es posible realizar una simplificaci´n que, sin p´rdida de generalidad, permi-
´ o e
tir´ escribir de manera m´s compacta (i.e. con menor cantidad de elementos del modelo) la
a a
relaci´n entre los servicios trivialmente compatibles (en Σ) y aquellos que requieren un meca-
o
nismo de abstracci´n debido a que sus interfaces dependen de la plataforma. Puntualmente,
o
dado que todos los servicios en Σ son trivialmente compatibles con todas y cada una de las
plataformas de P, se puede definir un unico servicio sΣ como la uni´n de todos los servicios
´ o
de Σ:
sΣ = {s0 ∪ s1 ∪ ... ∪ sL−1 }
Luego se puede redefinir Σ conteniendo como unico elemento sΣ :
´
Σ = {sΣ }
Para mantener una coherencia con los sub´
ındices se utilizar´ s0 en lugar de sΣ :
a
Σ = {s0 }
15
M´s a´n, la elecci´n de una unica plataforma compatible a la hora de desarrollar un software es la reducci´n
a u o ´ o
del problema a un caso trivial, donde, en efecto, se carece por completo de independencia de la plataforma.
16
Debe entenderse por “expresividad de una interfaz”, la diversidad de operaciones que es posible realizar a
trav´s de ella. Por ejemplo la expresividad de una interfaz cuya unica primitiva sea int sumar2mas3() es menor
e ´
que la de otra interfaz cuya unica primitiva sea int sumar(int a, int b), dado que la segunda permite sumar
´
cualquier par de n´meros a y b, mientras que la primera s´lo es capaz de calcular la suma entre 2 y 3. En lo
u o
sucesivo se utilizar´ el t´rmino “expresividad de una interfaz” en este sentido.
a e
Patricio Zavolinsky (81.611) 10
12. Tesis de Ingenier´ en Inform´tica
ıa a
En estos t´rminos, la cardinalidad de Σ, L, tendr´ un valor unitario y el conjunto de los
e a
servicios que no son trivialmente compatibles se define como todos los servicios de S que no se
encuentran en Σ:
S ∩ ΣC = {s1 , s2 , ..., sM }
y los servicios provistos, S, pueden redefinirse, en t´rminos de su compatibilidad, como aquellos
e
servicios que son trivialmente compatibles con las plataformas en P (i.e. s0 ∈ Σ) y los servicios
que dependen de la plataforma (i.e. sm ∈ Σ):
/
S = {s0 } ∪ {s1 , s2 , ..., sM }
De la formalizaci´n precedente debe notarse que, en lo sucesivo, se utilizar´ s0 para referirse
o a
a todo el conjunto de servicios trivialmente compatibles y no s´lo al primero de ellos. Este
o
ser´ el criterio adoptado a partir de aqu´ La introducci´n de dos notaciones diferentes para
a ı. o
los servicios que son trivialmente compatibles con las plataformas en P (i.e. s0 y sl ∈ Σ)
permite utilizar la notaci´n compacta (s0 ) cuando se desee centrar la atenci´n en los servicios
o o
dependientes de la plataforma (sm ∈ S y ∈ Σ), mientras que cuando se desee individualizar
/
las caracter´ısticas de cada uno de los servicios trivialmente compatibles se puede optar por la
notaci´n expl´
o ıcita (sl ∈ Σ).
1.2. Par´metros caracter´
a ısticos de un CPSM
En esta secci´n se presenta una selecci´n de par´metros que caracterizan, y a los que
o o a
est´ sujeto, un CPSM. Estos par´metros permitir´n evaluar cualitativamente el impacto de
a a a
cada una de las actividades involucradas en el desarrollo de un CPSM. En este sentido, del
an´lisis de un CPSM en relaci´n a cada par´metro, es posible derivar un criterio de evaluaci´n
a o a o
del CPSM relativo al par´metro en cuesti´n. Los par´metros considerados son: Flexibilidad,
a o a
Compatibilidad, Mantenimiento, Seguridad y Performance.
Algunos de ellos encuentran una analog´ directa con elementos definidos en el modelo for-
ıa
mal precedente, como Flexibilidad y Compatibilidad, otros se asocian a caracter´
ısticas generales
del CPSM, como ser Mantenimiento, Seguridad y Performance.
A continuaci´n se describen los par´metros de forma aislada, m´s adelante se realizar´ un
o a a a
an´lisis de las relaciones y dependencias que existen entre ellos.
a
1.2.1. Flexibilidad
La Flexibilidad refleja el l´
ımite que el CPSM impone a la capacidad de generar funciona-
lidad (rutinas, programas, etc) de las capas superiores. Es decir, caracteriza la diversidad de
implementaciones sustentables sobre el CPSM. El conjunto de servicios provistos, as´ como la
ı
expresividad de sus interfaces, son los principales factores en la determinaci´n de la Flexibili-
o
dad [Tan95].
Un ejemplo cualitativo de este par´metro podr´ ser: dados dos CPSMs, donde ambos
a ıa
proveen un servicio de comunicaciones basado en sockets, si uno de ellos expone una interfaz
a dicho servicio con soporte para comunicaciones con conexi´n, de tipo streaming (TCP), y
o
para comunicaciones sin conexi´n, de tipo datagram (UDP), mientras que el otro CPSM no
o
provee soporte para comunicaciones sin conexi´n, podr´ afirmarse que el primer CPSM es m´s
o a a
flexible que el segundo, dado que sobre el primero es posible sustentar un mayor n´mero de
u
tipos de programas, l´ase tanto aquellos que requieran comunicaciones con conexi´n cuanto
e o
aquellos que requieran comunicaciones sin conexi´n.o
Patricio Zavolinsky (81.611) 11
13. Tesis de Ingenier´ en Inform´tica
ıa a
A continuaci´n se presentan dos casos concretos que ilustran el ejemplo anterior, el c´digo
o o
pertenece a NSPR 17 (primer listado) y a NMSTL18 (segundo listado):
1 /* (...) */
2
3 /*
4 *************************************************************************
5 * FUNCTION : P R _ Ne w U D P S o ck e t
6 * DESCRIPTION :
7 * Create a new UDP socket .
8 * INPUTS :
9 * None
10 * OUTPUTS :
11 * None
12 * RETURN : PRFileDesc *
13 * Upon successful completion , P R _ Ne w U D P S o ck e t returns a pointer
14 * to the PRFileDesc created for the newly opened UDP socket .
15 * Returns a NULL pointer if the creation of a new UDP socket failed .
16 *
17 **************************************************************************
18 */
19
20 NSPR_API ( PRFileDesc *) P R _ N ew U D P S o c ke t ( void ) ;
21
22 /*
23 *************************************************************************
24 * FUNCTION : P R _ Ne w T C P S o ck e t
25 * DESCRIPTION :
26 * Create a new TCP socket .
27 * INPUTS :
28 * None
29 * OUTPUTS :
30 * None
31 * RETURN : PRFileDesc *
32 * Upon successful completion , P R _ Ne w T C P S o ck e t returns a pointer
33 * to the PRFileDesc created for the newly opened TCP socket .
34 * Returns a NULL pointer if the creation of a new TCP socket failed .
35 *
36 **************************************************************************
37 */
38
39 NSPR_API ( PRFileDesc *) P R _ N ew T C P S o c ke t ( void ) ;
40
41 /* (...) */
Listado 1.1: NSPR: prio.h
1 /* (...) */
2
3 // / A network Socket descriptor . This class will be expanded
4 // / to include Socket - specific I / O methods .
5 class Socket : public IOHandle {
6 public :
7 typedef enum {
8 none = 0 ,
9 nonblocking = 1 ,
10 acceptor = 2
11 } flags ;
12 /* (...) */
13
17
El Netsacpe Portable Runtime es el CPSM incluido dentro del c´digo de los productos de Mozilla (e.g.
o
Mozilla Firefox, Mozilla Thunderbird, etc).[Moz]
18
Networking, Messaging, Servers, and Threading Library, un proyecto del grupo de Redes y sistemas m´viles
o
del laboratorio de ciencias de la computaci´n del MIT.[Sal]
o
Patricio Zavolinsky (81.611) 12
14. Tesis de Ingenier´ en Inform´tica
ıa a
14 public :
15 // / Null constructor .
16 Socket () {}
17
18 // / Constructs a Socket from a given IOHandle .
19 Socket ( const IOHandle & ioh ) : IOHandle ( ioh ) {}
20
21 // / Updates the Socket error state if there ’s no current error
22 // / ( useful after a connect ) . Returns true if there is no error
23 // / on the Socket .
24 Status stat () { /* (...) */ }
25
26 // / Returns the peer name of the Socket , if any .
27 Address getpeername () { /* (...) */ }
28
29 // / Returns the local name of the Socket , if any .
30 Address getsockname () { /* (...) */ }
31
32 // / Attempts to bind the Socket .
33 Status bind ( const Address & a ) { /* (...) */ }
34
35 // / Attempts to connect the Socket .
36 Status connect ( const Address & a ) { /* (...) */ }
37
38 // / Listens on the Socket .
39 Status listen ( int backlog = 5) { /* (...) */ }
40
41 // / Attempts to accept a connection on the Socket .
42 Socket accept ( Address & a ) { /* (...) */ }
43 };
44
45 /* (...) */
46
47 // / A TCP Socket descriptor . This class will be expanded to include
48 // / TCP - Socket - specific I / O methods , e . g . , SO_LINGER support .
49 class TCPSocket : public Socket {
50 public :
51 // / Constructs a TCP Socket .
52 TCPSocket () : Socket () {}
53 TCPSocket ( Address addr , flags f = none ) : Socket ( AF_INET , SOCK_STREAM , addr , f )
{}
54 TCPSocket ( const IOHandle & ioh ) : Socket ( ioh ) {}
55 };
56
57 /* (...) */
Listado 1.2: NMSTL: net
Una aclaraci´n respecto de los listados precedentes es que el segundo pertenece a NMSTL
o
que no es un CPSM por no ofrecer ning´n tipo de soporte para la independencia de la pla-
u
taforma (i.e. NSMTL puede considerarse un CPSM trivial, ver secci´n 1.1). NMSTL es un
o
desarrollo orientado a facilitar el acceso a los servicios de red en un ambiente Linux/Unix y
por lo tanto, es posible comparar la interfaz que expone su servicio de redes con la interfaz
expuesta por NSPR. En rigor, NSPR puede compararse con NMSTL si se lo reduce al caso
trivial, es decir, si se lo circunscribe a las plataformas Linux/Unix.
N´tese que en el listado de NSPR se omitieron las primitivas de manipulaci´n de sockets
o o
para facilitar la lectura. Tomando en cuenta esta consideraci´n y analizando los tipos de servicio
o
de comunicaci´n (i.e. streaming con conexi´n, TCP, y datagram sin conexi´n, UDP) expuestos
o o o
en los listados, es posible apreciar que la Flexibilidad de NSPR en el servicio de comunicaciones
es mayor que la de NMSTL en tanto y en cuanto en NSPR es posible utilizar el tipo de servicio
datagram sin conexi´n y en NMSTL no.
o
Patricio Zavolinsky (81.611) 13
15. Tesis de Ingenier´ en Inform´tica
ıa a
La Flexibilidad relativa puede definirse formalmente como sigue:
Sean A y B dos CPSMs con sus respectivos conjuntos de servicios, S:
A = CP SM (P, Sa )
B = CP SM (P, Sb )
Sea F (x) la Flexibilidad del CPSM x
Se cumple que19 :
Si Sa ⊃ Sb , entonces F (A) > F (B)
Un ejemplo de Flexibilidad relativa aplicada en otro contexto puede visualizarse en las
primitivas write y send definidas en el est´ndar POSIX.1[IEE04]. A continuaci´n se presentan
a o
los prototipos de ambas funciones y un extracto de la p´gina de manual correspondiente a
a
send 20 :
1 ssize_t write ( int fd , const void * buf , size_t count ) ;
2
3 ssize_t send ( int s , const void * buf , size_t len , int flags ) ;
4
5 /* man 2 send :
6 "(...) The only difference between send () and write () is the presence of flags . With
zero flags parameter , send () is equivalent to write () (...) "
7 */
Listado 1.3: Interfaces POSIX de write y send
Como puede observarse, el manual indica que la unica diferencia entre ambas funciones es la
´
presencia del par´metro flags. Puesto que write(fd,buf,count) se reduce a send(fd,buf,count,0),
a
es decir, cualquier llamada a write se reduce a un caso especial de send, se sigue que la interfaz
que expone send es m´s expresiva que write. M´s a´n, un CPSM que provea un abstracci´n
a a u o
de send pero no de write tendr´ mayor expresividad, y por lo tanto mayor Flexibilidad, que el
a
caso opuesto21 . El ejemplo precedente ilustra de qu´ manera la expresividad de las interfaces
e
influye en la Flexibilidad del CPSM.
1.2.2. Compatibilidad
La Compatibilidad es la caracter´
ıstica que representa la capacidad de aislar efectivamente
a los programas sustentados sobre el CPSM de la plataforma subyacente. Una posible medida
de Compatibilidad est´ dada por la cardinalidad del conjunto de plataformas soportadas, P.
a
Esta medida podr´ refinarse ponderando las plataformas dentro del conjunto, seg´n alg´n
ıa u u
criterio22 .
19
Suponiendo que los sevicios en com´n (i.e. en ambos conjuntos), poseen la misma especificaci´n y por lo
u o
tanto la misma expresividad.
20
La p´gina de manual corresponde a la secci´n 2 del “Linux Programmer’s Manual” en GNU/Linux 2.6.7.
a o
21
Esta afirmaci´n es v´lida siempre y cuando para todas las plataformas consideradas en P se cumpla la
o a
condici´n de reducci´n enunciada, donde write constituye un caso especial de send. Una excepci´n es Microsoft
o o o
Windows donde la representaci´n de un socket (SOCKET) difiere de un file descriptor (int). En esta plataforma,
o
si se obtiene un file descriptor mediante open y luego se intenta invocar send utilizandolo en lugar del argumento
SOCKET, se obtiene un error 10038 cuya descripci´n es: “Socket operation on nonsocket. An operation was
o
attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket,
or for select, a member of an fd set was not valid.”[Mic08e]
22
Por ejemplo: cantidad de usuarios estimados de esa plataforma, perfil de los potenciales usuarios del CPSM,
modo de licenciamiento de la plataforma[Dre05], etc.
Patricio Zavolinsky (81.611) 14
16. Tesis de Ingenier´ en Inform´tica
ıa a
La Compatibilidad as´ definida hace referencia a las plataformas soportadas por un CPSM,
ı
es decir, aquellas respecto de las cuales se obtiene independencia al delegar en el CPSM el
acceso a servicios que no son trivialmente independientes de la plataforma. A lo largo de este
trabajo se utilizar´ el t´rmino en este sentido. Sin embargo, existen otros factores que pueden
a e
analizarse dentro de este par´metro como ser la compatibilidad de las interfaces binarias y
a
la compatibilidad con compiladores espec´ ıficos. Con el objeto de ilustrar estos dos casos de
compatibilidad (que no ser´n tratados en este trabajo), se presenta una breve descripci´n de
a o
cada uno:
El an´lisis de la compatibilidad de las interfaces binarias (denominadas Application Bi-
a
nary Interfaces o simplemente ABIs) consiste en evaluar la capacidad de invocar un
c´digo disponible en una biblioteca externa a un programa y c´mo dicha biblioteca pue-
o o
de ser asociada a un proceso de forma impl´ ıcita (en tiempo de loading) o expl´
ıcita (en
tiempo de ejecuci´n). Sobre este tema existen muchas ramificaciones, entre ellas la for-
o
ma en que distintos compiladores modelan los objetos, el esquema de name decoration
(C) y name mangling (C++), etc. Tambi´n es posible analizar hasta qu´ punto una bi-
e e
blioteca compilada con un compilador puede utilizarse en un programa compilado por
otro compilador, las limitaciones de integraci´n que impone el lenguaje de programaci´n,
o o
etc.[Fog07]
El an´lisis de la compatibilidad con compiladores espec´
a ıficos se enfoca en determinar
qu´ construcciones de c´digo son capaces de compilar determinados compiladores. Un
e o
CPSM que presenta construcciones que generan errores en alg´n compilador no ser´ com-
u a
patible con dicho compilador. En particular, compiladores con deficiencias en la imple-
mentaci´n del est´ndar del lenguaje resultan problem´ticos, ya que ciertas construc-
o a a
ciones que se presupon´ independientes de la plataforma, pueden generar errores de
ıan
compilaci´n (o lo que resulta m´s grave a´n, comportamiento impredecible en tiempo de
o a u
ejecuci´n).
o
A continuaci´n se presentan, como ejemplo de Compatibilidad las plataformas soportadas
o
por el Netscape Portable Runtime (NSPR):
NSPR es compatible con la gran mayor´ de plataformas basadas en Unix (inclu-
ıa
yendo GNU/Linux y Mac OS X), Microsoft Windows, OS/2 y BeOS. Se compila
y prueba en AIX, HP-UX, GNU/Linux, Mac OS X, Solaris, y Microsoft Windows
regularmente[Moz06a].
Una posible definici´n de Compatibilidad relativa es:
o
Sean A y B dos CPSMs con sus respectivos conjuntos de plataformas, P:
A = CP SM (Pa , S)
B = CP SM (Pb , S)
Sea C(x) la Compatibilidad del CPSM x
Se cumple que:
Si Pa ⊃ Pb , entonces C(A) > C(B)
Patricio Zavolinsky (81.611) 15
17. Tesis de Ingenier´ en Inform´tica
ıa a
1.2.3. Mantenimiento
El Mantenimiento es la caracter´ ıstica de poder evolucionar en los otros par´metros des-
a
criptos en esta secci´n. En un CPSM de f´cil Mantenimiento ser´ m´s sencillo mejorar la
o a a a
Compatibilidad, es decir, agregar nuevas plataformas compatibles. Paralelamente, ser´ m´s
a a
sencillo incrementar la Flexibilidad a˜adiendo nuevos servicios provistos.
n
En t´rminos del principio de Modular continuity[Mey97], un CPSM de f´cil Mantenimiento
e a
ser´ aquel en el cual la propagaci´n de las modificaciones resultantes del incremento de alg´n
a o u
otro par´metro (e.g. Flexibilidad o Compatibilidad ) se encuentre acotada
a 23 .
El siguiente ejemplo permite visualizar c´mo diferentes implementaciones de abstracci´n
o o
generan diferentes capacidades de Mantenimiento. El c´digo que se presenta a continuaci´n es
o o
una versi´n adaptada y simplificada de los ejemplos publicados en [Sch99b].
o
1 // Handle UNIX / Win32 portability differences .
2 # if defined ( _WINSOCKAPI_ )
3
4 # include < windows .h >
5 # pragma comment ( lib , " ws2_32 . lib " )
6
7 # else
8
9 # include < sys / socket .h >
10 # include < netinet / in .h >
11
12 # endif /* _WINSOCKAPI_ */
13
14 # include < string .h >
15
16 // Main driver function . Some error handling has
17 // been omitted to save space in the example .
18 int main ( int argc , char * argv [])
19 {
20 struct sockaddr_in sock_addr ;
21
22 // Handle UNIX / Win32 portability differences .
23 # if defined ( _WINSOCKAPI_ )
24 SOCKET acceptor ;
25 # else
26 int acceptor ;
27 # endif /* _WINSOCKAPI_ */
28
29 // Create a local endpoint of communication .
30 acceptor = socket ( PF_INET , SOCK_STREAM , 0) ;
31
32 // Set up the address to become a server .
33 memset ( r e i n t e r p r e t _ c a s t < void * > (& sock_addr ) ,
34 0 , sizeof sock_addr ) ;
35 sock_addr . sin_family = AF_INET ;
36 sock_addr . sin_port = htons (10000) ;
37 sock_addr . sin_addr . s_addr = htonl ( INADDR_ANY ) ;
38
39 // Associate address with endpoint .
40 bind ( acceptor ,
41 r e i n t e r p r e t _ c a s t < struct sockaddr * >
42 (& sock_addr ) ,
43 sizeof sock_addr ) ;
44
45 // Make endpoint listen for connections .
23
En este sentido, una peque˜a modificaci´n en alg´n par´metro afecta a un peque˜o conjunto de archivos. Se
n o u a n
utiliza el t´rmino de “continuidad modular” como una analog´ -poco rigurosa- con la continuidad de funciones
e ıa
matem´ticas.
a
Patricio Zavolinsky (81.611) 16
18. Tesis de Ingenier´ en Inform´tica
ıa a
46 listen ( acceptor , 5) ;
47
48 // Main server event loop .
49 for (;;) {
50 // Handle UNIX / Win32 portability differences .
51 # if defined ( _WINSOCKAPI_ )
52 SOCKET h ;
53 # else
54 int h ;
55 # endif /* _WINSOCKAPI_ */
56
57 // Block waiting for clients to connect .
58 h = accept ( acceptor , 0 , 0) ;
59
60 /* app logic */
61 }
62 /* NOTREACHED */
63 return 0;
64 }
Listado 1.4: Implementaci´n de un servidor con compilaci´n condicional
o o
N´tese que si se desea mejorar la Compatibilidad del c´digo (para que pueda ejecutarse en
o o
otras plataformas) es necesario agregar nuevas comparaciones en las dos l´ıneas que contienen
las instrucciones de preprocesamiento (#if defined ( WINSOCKAPI ), etc). Una primera apro-
ximaci´n para mejorar la capacidad de Mantenimiento del c´digo se presenta a continuaci´n:
o o o
1 // Handle UNIX / Win32 portability differences .
2 # if defined ( _WINSOCKAPI_ )
3
4 # include < windows .h >
5 # pragma comment ( lib , " ws2_32 . lib " )
6
7 # else
8
9 # include < sys / socket .h >
10 # include < netinet / in .h >
11 typedef int SOCKET ;
12
13 # endif /* _WINSOCKAPI_ */
14
15 // Main driver function . Some error handling has
16 // been omitted to save space in the example .
17 int main ( int argc , char * argv [])
18 {
19 struct sockaddr_in sock_addr ;
20
21 SOCKET acceptor ;
22
23 // Create a local endpoint of communication .
24 acceptor = socket ( PF_INET , SOCK_STREAM , 0) ;
25
26 // Set up the address to become a server .
27 memset ( r e i n t e r p r e t _ c a s t < void * > (& sock_addr ) ,
28 0 , sizeof sock_addr ) ;
29 sock_addr . sin_family = AF_INET ;
30 sock_addr . sin_port = htons (10000) ;
31 sock_addr . sin_addr . s_addr = htonl ( INADDR_ANY ) ;
32
33 // Associate address with endpoint .
34 bind ( acceptor ,
35 r e i n t e r p r e t _ c a s t < struct sockaddr * >
36 (& sock_addr ) ,
37 sizeof sock_addr ) ;
38
Patricio Zavolinsky (81.611) 17
19. Tesis de Ingenier´ en Inform´tica
ıa a
39 // Make endpoint listen for connections .
40 listen ( acceptor , 5) ;
41
42 // Main server event loop .
43 for (;;) {
44 SOCKET h ;
45
46 // Block waiting for clients to connect .
47 h = accept ( acceptor , 0 , 0) ;
48
49 /* app logic */
50 }
51 /* NOTREACHED */
52 return 0;
53 }
Listado 1.5: Reimplementaci´n de un servidor con compilaci´n condicional
o o
En esta nueva versi´n s´lo ser´ necesario modificar un lugar que concentra toda la abstrac-
o o a
ci´n de la plataforma.
o
Una aproximaci´n m´s elegante, resuelta con una versi´n adaptada[Sch99b] de los com-
o a o
ponentes del CPSM orientado a objetos ADAPTIVE Communication Environment (ACE)
[Sch93] es:
1 /* ... */
2
3 // Main driver function . Some error handling has
4 // been omitted to save space in the example .
5 int main ( int argc , char * argv [])
6 {
7 // Internet address of server .
8 INET_Addr addr ( port ) ;
9
10 // Passive - mode acceptor object .
11 SOCK_Acceptor server ( addr ) ;
12 SOCK_Stream new_stream ;
13
14 // Wait for a connection from a client .
15 for (;;) {
16 // Accept a connection from a client .
17 server . accept ( new_stream ) ;
18
19 // Get the underlying handle .
20 SOCKET h = new_stream . get_handle () ;
21
22 /* app logic */
23 }
24 /* NOTREACHED */
25 return 0;
26 }
Listado 1.6: Implementaci´n adaptada de un servidor en ACE
o
En este ultimo ejemplo, toda la abstracci´n se encuentra encapsulada dentro de ACE y el
´ o
programa propiamente dicho deriva en este CPSM el acceso a los servicios de comunicaciones.
Adicionalmente, el programa ha adquirido compatibilidad con un gran n´mero de plataformas
u
debido a que el CPSM subyacente se encarga de proveer esta compatibilidad.
Los ejemplos precedentes ilustran los problemas asociados al Mantenimiento de un pro-
grama con cierta independencia de la plataforma. Para analizar el Mantenimiento en el caso
de un CPSM, se debe considerar el esfuerzo necesario para extender la Compatibilidad y/o
Patricio Zavolinsky (81.611) 18
20. Tesis de Ingenier´ en Inform´tica
ıa a
la Flexibilidad del mismo, agregando nuevas plataformas compatibles y/o nuevos servicios24 ,
respectivamente.
1.2.4. Seguridad
En esta secci´n es necesario hacer una aclaraci´n respecto del t´rmino Seguridad y sus
o o e
acepciones en ingl´s, para evitar posibles confusiones. En ingl´s, los t´rminos safety y security
e e e
suelen traducirse al castellano indistintamente como “seguridad”, a pesar de que su significado
es claramente distinto aplicado al software. El t´rmino safety suele usarse en relaci´n a la
e o
correcci´n de un programa, en el sentido de no presentar comportamientos inesperados debido
o
a errores de programaci´n, como por ejemplo deadlocks, acceso a posiciones de memoria inv´li-
o a
das, etc[BA90]. En cambio el t´rmino security se emplea en relaci´n a las medidas necesarias
e o
para proteger un programa de posibles ataques (activos o pasivos) que puedan comprometer
caracter´ısticas del mismo (e.g. informaci´n, comportamiento, disponibilidad, etc.)[Sta06]. En
o
este trabajo se utilizar´ el t´rmino Seguridad para hacer referencia a la primer acepci´n (i.e.
a e o
la que se corresponde con safety).
La Seguridad puede entenderse en t´rminos del criterio de Modular protection[Mey97]. Este
e
criterio permite definir Seguridad como la capacidad de limitar la propagaci´n de condiciones
o
anormales en tiempo de ejecuci´n. o
En este sentido, la Seguridad es la capacidad de evitar errores comunes de programaci´n o
debido a la utilizaci´n de un CPSM. Generalmente, la Seguridad se alcanza limitando las
o
interfaces expuestas a los usuarios del CPSM, es decir, se especifican las interfaces abstractas de
cada servicio (ver secci´n 2.2.1) intentando aislar al programador de construcciones peligrosas o
o
potencialmente problem´ticas. El impacto directo sobre las interfaces var´ desde la aplicaci´n
a ıa o
de estrategias seguras de acceso a cierta funcionalidad hasta la supresi´n total de primitivas o
o
par´metros en las mismas[Kem06].
a
Un ejemplo de aplicaci´n de ambos criterios con el objeto de mejorar la Seguridad se ve
o
en la especificaci´n del servicio de concurrencia y sincronizaci´n provisto por las bibliotecas
o o
Boost. Este servicio en particular, denominado Boost.Thread, no presenta una abstracci´n de o
los Event Objects disponibles en Microsoft Windows25 . La justificaci´n para la eliminar este
o
tipo de primitiva de sincronizaci´n es su tendencia a producir errores de programaci´n[Kem06,
o o
p. 33].
Adicionalmente, en Boost.Thread, no se proveen primitivas para obtener y liberar el con-
trol sobre un Mutex de forma expl´ ıcita. En su lugar, se debe utilizar un patr´n de scoped-
o
locking[SSRB00] que asocia la secci´n cr´
o ıtica con el scope de un objeto. Si bien este patr´n o
facilita el uso de variables Mutex para proteger una secci´n cr´ o ıtica, la inicializaci´n de un
o
objeto y su correspondiente destrucci´n en cada acceso a una secci´n cr´
o o ıtica constituye un
overhead que degrada la Performance general del programa. Por otro lado, la inexistencia de
las primitivas lock y unlock de forma independiente impide del desarrollo de cierto tipo de
programas, efectivamente disminuyendo la Flexibilidad del CPSM.
24
Dentro de esta categor´ debe considerarse tambi´n, la extensi´n de la funcionalidad de un servicio mediante
ıa e o
un incremento en la expresividad de su interfaz abstracta, ya sea a trav´s de nuevas primitivas o de nuevos
e
par´metros/valores en las mismas.
a
25
Los Event Objects se manipulan mediante funciones como CreateEvent, OpenEvent, PulseEvent, ResetEvent
y SetEvent. Puntualmente, un thread puede bloquearse esperando un evento sobre un Event Object mediante
WaitForSingleObject. Un thread bloqueado en un Event Object se desbloquea cuando otro thread invoca SetEvent
o PulseEvent en dicho Event Object[Mic08d].
Patricio Zavolinsky (81.611) 19
21. Tesis de Ingenier´ en Inform´tica
ıa a
En el siguiente ejemplo (adaptado de [Sch92, p. 5]), se demuestran algunas fallas de Se-
guridad presentes en la interfaz de BSD Sockets en los sistemas POSIX. El c´digo original
o
presenta varios comentarios indicando los errores cometidos. En el ejemplo adaptado, se elimi-
naron dichos comentarios para dar la posibilidad al lector de intentar encontrar los errores por
su cuenta. Luego del c´digo se listan los errores para que pueda apreciarse cu´n permeable a
o a
errores de programaci´n resulta la interfaz utilizada.
o
1 # include < sys / types .h >
2 # include < sys / socket .h >
3 # include < netinet / in .h >
4
5 const int PORT_NUM = 10000;
6 int main ( void )
7 {
8 struct sockaddr_in s_addr ;
9 int length ;
10 char buf [1024];
11 int s_fd , n_fd ;
12
13 if ( s_fd = socket ( PF_UNIX , SOCK_DGRAM , 0) == -1)
14 return -1;
15
16 s_addr . sin_family = AF_INET ;
17 s_addr . sin_port = PORT_NUM ;
18 s_addr . sin_addr . s_addr = INADDR_ANY ;
19
20 if ( bind ( s_fd , ( struct sockaddr *) & s_addr ,
21 sizeof s_addr ) == -1)
22 perror ( " bind " ) , exit (1) ;
23
24 if ( n_fd = accept ( s_fd , ( struct sockaddr *) & s_addr , & length ) == -1) {
25 int n ;
26 while (( n = read ( s_fd , buf , sizeof buf ) ) > 0)
27 write ( n_fd , buf , n ) ;
28 // Remainder omitted ...
29 }
30 return 0;
31 }
Listado 1.7: Buggy Echo Server
Los errores cometidos en el c´digo precedente son:
o
L´
ınea 16: no se inicializ´ en cero la estructura s addr antes de utilizarla.
o
L´
ınea 16: la familia AF INET es incompatible con el dominio del socket PF UNIX.
L´
ınea 17: no se utiliz´ la funci´n htons() para convertir el puerto al byte-order de la red.
o o
L´ınea 18: no se utiliz´ la funci´n htonl() para convertir INADDR ANY al byte-order de
o o
la red26 .
L´
ınea 20: la estructura struct sockaddr in s´lo deber´ utilizarse con sockets del dominio
o ıa
PF INET.
L´ınea 24: no se invoc´ la primitiva listen() para utilizar el socket en modo pasivo y por
o
lo tanto no se verifican la precondiciones de la primitiva accept().
26
Normalmente la constante INADDR ANY se define como 0L, por lo que resultar´ innecesario convertir
ıa
el byte-order, sin embargo, pueden existir plataformas donde esta suposici´n no sea cierta y por lo tanto es
o
necesario asegurar la conversi´n mediante la funci´n htonl()[The06].
o o
Patricio Zavolinsky (81.611) 20
22. Tesis de Ingenier´ en Inform´tica
ıa a
L´
ınea 24: tanto listen(), cuanto accept() no deben utilizarse con sockets del tipo SO-
CK DGRAM.
L´ınea 24: no se inicializ´ el argumento length de la primitiva accept() para que contenga
o
el tama˜o de la estructura s addr.
n
L´ınea 24: la omisi´n de par´ntesis en la expresi´n n fd = accept(...) resulta en que n fd
o e o
tendr´ s´lo dos valores posibles dependiendo de si el valor de retorno de accept() es igual
a o
a -1 o no.
L´ınea 26: se intenta leer de un socket en modo pasivo que s´lo se deber´ utilizar para
o ıa
recibir conexiones.
L´
ınea 27: no se verifica que la cantidad escrita sea efectivamente n y no un valor menor
debido al uso de buffers (short-writes).
Si bien el programa precedente es un caso claramente patol´gico, salta a la vista que la
o
interfaz utilizada no promueve la Seguridad de los programas sustentados sobre ella. M´s a
a´n, el programa precedente compilado con gcc versi´n 3.4.6 no genera ning´n error ni emite
u o u
ning´n warning a no ser que se especifique la opci´n -Wall, en cuyo caso se detectan problemas
u o
sint´cticos como la asignaci´n sin par´ntesis en la l´
a o e ınea 24, pero no errores m´s sutiles como
a
la incompatibilidad entre los argumentos de las primitivas, etc.
Mejorar la Seguridad de un CPSM tiende a comprometer otros par´metros como la Fle-
a
xibilidad o la Performance. En el primer caso por ausencia de funcionalidad y en el segundo
debido el overhead asociado a las estrategias adicionales necesarias para asegurar el correcto
uso de funcionalidad que podr´ resultar peligroso en caso de no utilizarse correctamente.
ıa
1.2.5. Performance
La Performance de un CPSM es un aspecto que no debe dejarse de lado. Un programa
sustentado sobre un CPSM sufrir´ una degradaci´n en la Performance en comparaci´n con un
a o o
programa similar, sustentado directamente sobre la API de una plataforma. Esta degradaci´n o
se debe, principalmente, al nivel de indirecci´n introducido al utilizar una capa de abstracci´n
o o
adicional[MDM+ 02]. Al desarrollar un CPSM se debe intentar minimizar el impacto que ´ste e
tiene sobre la Performance. T´cnicas de metaprogramaci´n[Bar05], as´ como el uso de inlining,
e o ı
pueden reducir ampliamente el impacto de un CPSM sobre la Performance. Por otro lado, la
implementaci´n en userspace de funcionalidad inexistente en alguna plataforma puede ser un
o
importante factor de degradaci´n de la Performance 27 .
o
1.2.6. Relaci´n entre los par´metros caracter´
o a ısticos de un CPSM
Los par´metros descriptos en las secciones anteriores, y los criterios derivados a partir de
a
estos, guardan una estrecha relaci´n entre s´ y, en l´
o ı, ıneas generales, una modificaci´n en uno
o
27
N´tese que existen casos donde una implementaci´n en userspace puede ser m´s eficiente que la implemen-
o o a
taci´n provista por la plataforma. Algunos factores, como la reducci´n de context-switching, pueden mitigar el
o o
impacto sobre la Performance de implementaciones en userspace. Un ejemplo de este caso son los mecanismos
de sincronizaci´n en Microsoft Windows, donde la sincronizaci´n a trav´s de CRITICAL SECTIONs (objetos
o o e
en userspace) puede llegar a exhibir un aumento relativo de la Performance de hasta un orden de magnitud
respecto a los Windows Mutex Objects (objetos en el kernel )[Bin08].
Patricio Zavolinsky (81.611) 21
23. Tesis de Ingenier´ en Inform´tica
ıa a
de ellos podr´ impactar sobre los otros. Por ejemplo, si se desea aumentar la Compatibilidad
ıa
agregando una nueva plataforma, px , al conjunto P, se deber´ verificar que est´n disponibles
ıa e
en px todos los servicios soportados, S y que sea posible implementar las interfaces definidas
para cada servicio. Es decir:
∀sn ∈ S, ∃ix
n
Donde ix es la interfaz (dependiente de la plataforma) del servicio sn en la plataforma px .
n
En caso de no existir un servicio en px , se deber´ modificar el conjunto de servicios sopor-
a
tados (degradando la Flexibilidad ) o implementar toda la funcionalidad del mismo por encima
de la plataforma. Esta segunda opci´n podr´ afectar la Performance del CPSM en dicha
o ıa
plataforma.
Sim´tricamente, aumentar la Flexibilidad incorporando un nuevo servicio sx requiere ve-
e
rificar que, para todas las plataformas soportadas, P, exista al menos una implementaci´n o
(dependiente de la plataforma) de dicho servicio, es decir:
∀pm ∈ P, ∃im
x
Donde im es la interfaz (dependiente de la plataforma) del servicio sx en la plataforma pm .
x
Un ejemplo de este caso se observa en la interfaz abstracta del servicio de comunicaciones
de NSPR donde las primitivas bloqueantes reciben un par´metro de timeout para acotar la
a
operaci´n bloqueante. Sin embargo, la implementaci´n de esta opci´n en Windows NT 3.5.1
o o o
tiene un comportamiento singular debido a la utilizaci´n de NT I/O Completion Ports[Mic06].
o
En la plataforma indicada, una llamada bloqueante se traduce en una operaci´n de entra-
o
da/salida (I/O) asincr´nica seguida de una suspensi´n del thread que realiz´ la invocaci´n.
o o o o
Mientras tanto un thread de control consulta el Completion Port para obtener el resultado.
En caso de un timeout se cancela la operaci´n asincr´nica mediante la primitiva CancelIo().
o o
Sin embargo, en Windows NT 3.5.1 esta primitiva no est´ disponible y por lo tanto la unica
a ´
forma de cancelar la operaci´n asincr´nica pendiente es cerrando el file descriptor asociado a
o o
la operaci´n. En este caso, el comportamiento singular en Windows NT 3.5.1 compromete la
o
independencia de la plataforma del CPSM. Dada la madurez del CPSM, modificar la interfaz
abstracta del servicio no es una opci´n y por lo tanto quedan dos alternativas para solucio-
o
nar el problema: eliminar la Compatibilidad con Windows NT 3.5.1 o utilizar la versi´n de o
NSPR optimizada para Windows 32-bit (que no utiliza I/O Completion Ports) resignando la
Performance alcanzable en la versi´n optimizada para Windows NT[His04].
o
En la secci´n 1.2.4 se mencion´ el caso de Boost.Thread donde una decisi´n de dise˜o fue
o o o n
adoptar como caracter´ ıstica predominante la Seguridad por sobre la Flexibilidad. Puntualmen-
te, esto se refleja en la ausencia de primitivas de bloqueo expl´ ıcito de Mutex en favor de una
implementaci´n basada en el patr´n scoped-locking[SSRB00].
o o
Del an´lisis precedente es posible concluir que los par´metros que caracterizan a un CPSM
a a
deben ajustarse de forma tal que permitan un equilibrio entre la funcionalidad provista (Flexi-
bilidad ) y las plataformas soportadas (Compatibilidad ). Adicionalmente, es posible observar el
impacto que una decisi´n incorrecta (o muy ambiciosa) en los dem´s par´metros, puede tener
o a a
sobre la Performance del CPSM.
Respecto de la Seguridad, se debe hacer una ultima aclaraci´n. El an´lisis presentado en
´ o a
este trabajo se enfoca en las caracter´ ısticas propias de un CPSM en lo que respecta a proveer
independencia de la plataforma subyacente. Sin embargo, el desarrollo de un CPSM es un
buen punto de partida para generar un framework que mejore la Seguridad de los programas
sustentados sobre ´l. Esta caracter´
e ıstica no es exclusiva de CPSMs. El desarrollo NMSTL es un
Patricio Zavolinsky (81.611) 22