PDF de programación - Programación Concurrente - Bloque II: Programación concurrente en POSIX - Tema 1. Introducción al estándar POSIX

Imágen de pdf Programación Concurrente - Bloque II: Programación concurrente en POSIX - Tema 1. Introducción al estándar POSIX

Programación Concurrente - Bloque II: Programación concurrente en POSIX - Tema 1. Introducción al estándar POSIXgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.158 visualizaciones desde el 14 de Enero del 2017
73,7 KB
7 paginas
Creado hace 10a (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)) { \
  • Links de descarga
http://lwp-l.com/pdf1089

Comentarios de: Programación Concurrente - Bloque II: Programación concurrente en POSIX - Tema 1. Introducción al estándar POSIX (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad