Publicado el 14 de Enero del 2017
1.268 visualizaciones desde el 14 de Enero del 2017
73,7 KB
7 paginas
Creado hace 11a (14/10/2013)
Master en Computación
Programación Concurrente
Bloque II: Programación concurrente en POSIX
Tema 1. Introducción al estándar POSIX
Tema 2. Sistema Operativo MaRTE OS
Tema 3. Gestión de Threads
Tema 4. Gestión del Tiempo
Tema 5. Planificación de Threads
Tema 6. Sincronización
Tema 7. Señales
Tema 8. Temporizadores y Relojes de Tiempo de Ejecución
Programación Concurrente
Tema 1. Introducción al estándar POSIX
© M. Aldea, M. González
oct.-13
Tema 1. Introducción al estándar POSIX
1.1. Estándar POSIX
1.2. POSIX de tiempo real
1.3. Perfiles de entornos de aplicación
1.4. Generalidades sobre la interfaz POSIX
1
Programación Concurrente
Tema 1. Introducción al estándar POSIX
1.1 Estándar POSIX
Portable Operating System Interface
• Basado en el sistema operativo UNIX
© M. Aldea, M. González
oct.-13
2
1.1 Estándar POSIX
Estándar desarrollado conjuntamente por la Computer Society del
IEEE y The Open Group
• también denominado The Single UNIX Specification
• la denominación oficial es IEEE Std. 1003, e ISO/IEC-9945
Accesible en Internet (sólo hace falta registrarse):
http://www.unix.org/online.html
También puede obtenerse información sobre las distintas
funciones POSIX en las páginas de manual (“man pages”) de Linux
Programación Concurrente
© M. Aldea, M. González
oct.-13
3
Tema 1. Introducción al estándar POSIX
1.1 Estándar POSIX
Objetivos del POSIX
“This standard defines a standard operating system interface and
environment, including a command interpreter (or "shell"), and
common utility programs to support applications portability at the
source code level”
(Introducción del standard POSIX)
El estándar define:
• la interfaz del sistema operativo: conjunto de funciones, tipos y
constantes (en lenguaje C) agrupadas en ficheros de cabeceras
• intérprete de comandos: redirección, pipes, etc.
• programas de utilidad: vi, c99, ls, more, etc.
Pretende la portabilidad:
• de las aplicaciones a nivel de código fuente
• de los programadores
Programación Concurrente
Tema 1. Introducción al estándar POSIX
Categorías de estándares POSIX
• Estándares Base: interfaz, shell y utilidades
- POSIX.1
© M. Aldea, M. González
oct.-13
4
1.1 Estándar POSIX
• Perfiles o subconjuntos para diferentes entornos de aplicación
- POSIX.13: Tiempo real
• Interfaces en diferentes lenguajes de programación (“bindings”)
- POSIX.5: Bindings en Ada
- POSIX.9: Bindings en Fortran 77
Programación Concurrente
Tema 1. Introducción al estándar POSIX
© M. Aldea, M. González
oct.-13
Evolución de los estándares POSIX
1.1 Estándar POSIX
POSIX.1b
Realtime
1993
POSIX.1d
Additional RT
1999
POSIX.1g
Networking
1999
POSIX.1
Basic UNIX
1990
POSIX.2
Shell&Utilities
1993
POSIX.1c
Threads
1995
POSIX.1j
Additional RT
1999
POSIX.1q
Tracing
2000
POSIX.5
Basic UNIX
1992
POSIX.5b
Realtime
1996
POSIX.5c
Networking
1998
POSIX.13
RT profiles
1998
X/Open
System
Interfaces
POSIX.1
Revision
2001
POSIX.1
Tech. Corr.
2003
POSIX.26
Device Ctrl.
2003
POSIX.13
Revision
2003
Programación Concurrente
© M. Aldea, M. González
oct.-13
5
6
Tema 1. Introducción al estándar POSIX
1.2 POSIX de tiempo real
Motivación:
• Gran diversidad de sistemas de tiempo real:
1.2 POSIX de tiempo real
- Kernels de tiempo real (VRTX, VxWorks, etc.)
- Ejecutivos Ada
- Para sistemas grandes: VMS, OS9, sistemas privados
- UNIX de tiempo real
• Era necesario un estándar para conseguir la portabilidad
• Son necesarios subconjuntos de los servicios del OS:
- sistemas empotrados pequeños
- controladores industriales de tiempo real
- sistemas empotrados grandes
- sistemas convencionales grandes de tiempo real
Programación Concurrente
Tema 1. Introducción al estándar POSIX
© M. Aldea, M. González
oct.-13
Grupo de trabajo de tiempo real
1.2 POSIX de tiempo real
Objetivo: “Desarrollar estándares que sean la mínima extensión
sintáctica y semántica a los estándares POSIX para soportar la
portabilidad de aplicaciones con requerimientos de tiempo real.”
7
8
Programación Concurrente
Tema 1. Introducción al estándar POSIX
© M. Aldea, M. González
oct.-13
1.3 Perfiles de entornos de aplicación
1.3 Perfiles de entornos de aplicación
Los perfiles definen un subconjunto de los servicios POSIX que es
obligatorio para un determinado ámbito de aplicación. Se definen
4 perfiles:
Sistema de Tiempo Real Mínimo
• sistema empotrado pequeño, sin MMU, sin disco, sin
terminal
• modelo: el “tostador”
Controlador de Tiempo Real
• controlador de propósito especial, sin MMU, pero con un disco
con un sistema de ficheros simplificado
• modelo: robot industrial
Programación Concurrente
© M. Aldea, M. González
oct.-13
9
Tema 1. Introducción al estándar POSIX
1.3 Perfiles de entornos de aplicación
Perfiles de entornos de aplicación (cont.)
Sistema de Tiempo Real Dedicado
• sistema empotrado grande sin disco, pero con MMU, quizás
con un sistema de memoria secundaria en memoria flash
• el software es complejo y requiere protección de memoria y
comunicaciones
• modelo: avión, célula de un sistema de telefonía móvil
Sistema de Tiempo Real Multi-Propósito
• sistema de tiempo real grande, con todas las facilidades
• modelo: sistema de control de tráfico aéreo, sistema de
telemetría para un fórmula 1
Programación Concurrente
Tema 1. Introducción al estándar POSIX
© M. Aldea, M. González
oct.-13
10
1.3 Perfiles de entornos de aplicación
Principales servicios del perfil mínimo
Perfil para sistemas empotrados pequeños
Señales
Gestión de
memoria
Semáforos
I/O dispositivos
Threads
Relojes y
Temporizadores
Mutexes con
herencia prio.
Prioridades
Fijas + SS
Variables
condicionales
Relojes de
tiempo de CPU
Programación Concurrente
Tema 1. Introducción al estándar POSIX
Resumen de los perfiles
© M. Aldea, M. González
oct.-13
11
1.3 Perfiles de entornos de aplicación
Redes
I/O
Asíncrona
Múltiples
Procesos
Sistema de
ficheros simple
Colas de
Mensajes
Dedicado
Trazas
Mínimo
Servicios Básicos
Controlador
Multi-Propósito
Shell &
Utilidades
Múltiples
Usuarios
Sistema de fi-
cheros completo
Otros
Programación Concurrente
© M. Aldea, M. González
oct.-13
12
Tema 1. Introducción al estándar POSIX
1.4 Generalidades sobre la interfaz POSIX
1.4 Generalidades sobre la interfaz POSIX
Conjunto de funciones, tipos y constantes (en lenguaje C)
• constituyen la interfaz que el SO presenta a las aplicaciones
Agrupadas en ficheros de cabeceras:
• <string.h>: operaciones con strings (estándar C)
• <time.h>: tiempo, relojes, temporizadores
• <pthread.h>: todo lo relacionado con los threads
• <signal.h>: gestión de señales
• <sched.h>: planificación
• ...
Incluye parte de la librería estándar C
• en ese caso el estándar POSIX se remite al estándar ISO C 1999
Programación Concurrente
Tema 1. Introducción al estándar POSIX
© M. Aldea, M. González
oct.-13
13
1.4 Generalidades sobre la interfaz POSIX
Identificadores POSIX
Siguen dos convenios diferentes:
• identificadores heredados directamente de los sistemas UNIX
originales o del lenguaje C
• nombres cortos (a menudo una palabra) más o menos crípticos
- ej.: kill(), malloc(), time(), wctomb(), strcmp(), ...
• identificadores introducidos durante el desarrollo del estándar
• funciones: servicio_acción()
- ej.: timer_settime(), pthread_create()
• o también: servicio_objeto_acción()
- ej.: pthread_condattr_init(), pthread_key_delete()
• tipos de datos: finalizan en “_t”. Ej.: pthread_t
• constantes: en mayúsculas y comenzando por el nombre del
servicio. Ej.: TIMER_ABSTIME, PTHREAD_PRIO_INHERIT
© M. Aldea, M. González
oct.-13
14
Programación Concurrente
Tema 1. Introducción al estándar POSIX
1.4 Generalidades sobre la interfaz POSIX
Códigos de error
Las funciones POSIX informan de la ocurrencia de un error
mediante un código numérico
El estándar define un conjunto de constantes que identifican los
diferentes errores que pueden producirse (<errno.h>)
• EACCES: permiso denegado
• EAGAIN: recurso no disponible, reintentar la operación
• EFAULT: dirección incorrecta
• EINVAL: argumento inválido
• ...
Programación Concurrente
© M. Aldea, M. González
oct.-13
15
Tema 1. Introducción al estándar POSIX
1.4 Generalidades sobre la interfaz POSIX
Detección de errores
Existen dos formas de que una función comunique que se ha
producido un error
• Las funciones “antiguas” (anteriores al estándar de threads)
retornan el valor -1 cuando se produce un error
- el código de error se puede obtener consultando la variable
global errno
• Las funciones “modernas” retornan 0 cuando no ha habido
error
- y retornan el código numérico correspondiente al error en el
caso de que lo haya habido
© M. Aldea, M. González
oct.-13
16
Programación Concurrente
Tema 1. Introducción al estándar POSIX
1.4 Generalidades sobre la interfaz POSIX
Código de detección de errores
Es fundamental comprobar que no se ha producido un error en
cada llamada a una función POSIX
• de otra manera el error pasaría inicialmente inadvertido
• pudiendo producir un error posterior de muy difícil diagnosis
El problema es que el chequeo de errores dificulta la comprensión
del código:
if (pthread_create(&th1, NULL, body, NULL) != 0) {
printf("error de creación del thread\n");
exit(1);
}
if (timer_create(CLOCK_REALTIME, &event, &timer_id) == -1) {
perror("error de creación del timer\n");
exit(1);
}
Programación Concurrente
Tema 1. Introducción al estándar POSIX
© M. Aldea, M. González
oct.-13
17
1.4 Generalidades sobre la interfaz POSIX
Código de detección de errores (cont.)
Para mejorar la legibilidad del código utilizaremos las macros
definidas en misc/error_checks.h (MaRTE OS)
• CHK: para funciones que retornan 0 o el código de error
#define CHK(p) { int ret; \
if ((ret = p)) { \
Comentarios de: Programación Concurrente - Bloque II: Programación concurrente en POSIX - Tema 1. Introducción al estándar POSIX (0)
No hay comentarios