Introducción
POSIX son un conjunto de normas IEEE/ISO que definen la interfaz entre las aplicaciones y el SSOO
POSIX: Portable Operating System Interface + UniX
Su objetivo es conseguir la portabilidad de las aplicaciones a nivel de código fuente
La aplicación puede desarrollarse en C, Ada, Fortran y otros lenguajes
Las normas definen los servicios que cada sistema operativo particular puede incluirlos o no
La denominación oficial es IEEE Std. 1003, e ISO/IEC-9945
POSIX: estándares base (C)
POSIX 1, 1a Unix básico sin tiempo real
POSIX 1b, 1d, 1i, 1j Extensiones de tiempo real
POSIX 1c Extensiones de threads
POSIX 1e Seguridad
POSIX 1f Network File System
POSIX 1g Servicios de red (sockets)
POSIX 1h Tolerancia a fallos
POSIX 21 Comunicaciones de TR
POSIX: interfaz otros lenguajes
POSIX 5, 5a, 5b Interfaces con Ada
POSIX 9 Interfaces con Fortran 77
POSIX: perfiles de entornos
POSIX 10 Supercomputadores
POSIX 13 Tiempo real
POSIX 14 Multiprocesadores
POSIX 18 Estación de trabajo POSIX
POSIX de tiempo real ¿para qué?
Existe gran diversidad de sistemas de TR:
Núcleos de TR (LynxOS, VxWorks, QNX, etc.)
Ejecutivos Ada
En sistemas grandes: VMS y otros
Era necesario definir un estándar que asegurase la portabilidad de aplicaciones a nivel de código fuente entre diferentes entornos de tiempo real
Perfiles de entornos de aplicación
PSE50: sistema de tiempo real mínimo
Sólo procesos ligeros, sin gestión de memoria ni archivos ni terminal
PSE51: controlador de tiempo real
Añade el terminal y sistema de archivos
PSE52: sistema de tiempo real dedicado
Soporta procesos pesados y gestión de memoria
PSE53: sistema de tiempo real generalizado
Sistema completo con todos los servicios
Características de los perfiles
Perfil
Sistema de archivos
Múltiples procesos
Threads
Sistema mínimo
Sistema multipropósito
Controlador
Sistema dedicado
NO
NO
SÍ
SÍ
SÍ
SÍ
NO
NO
SÍ
SÍ
SÍ
SÍ
POSIX: Unix básico
POSIX 1 define los servicios ofrecidos por Unix:
Gestión de procesos:
Creación y destrucción
Sincronización
Temporización
Gestión de archivos
Creación y borrado de archivos y directorios
Trabajo con archivos especiales
Protección de la información
Entrada-salida y control
POSIX: Extensiones de TR
Para obtener determinismo en el comportamiento
Planificación
Gestión de memoria
Señales
Relojes y temporizadores
Para facilitar la concurrencia
Sincronización
Memoria compartida
Colas de mensajes
Entrada-salida síncrona y asíncrona
POSIX: Extensiones de threads
POSIX 1c incorpora funciones para trabajar con hilos. Incluye:
Gestión de hilos
Sincronización de hilos
Planificación de hilos
Creación y destrucción de hilos
Añade reentrada a algunas funciones de POSIX1
POSIX 1c puede hacer uso de funciones incluidas en POSIX 1 y POSIX 1b
Definiciones
Programa
Archivo ejecutable residente en un dispositivo de almacenamiento permanente
Se ejecuta por medio de la llamada exec()
Proceso
Es un programa en ejecución
Los procesos se crean con la llamada fork()
Servicios del sistema operativo
Invocados por medio de funciones
POSIX no diferencia entre llamadas al sistema y procedimientos de biblioteca
Estructura de un proceso en C
Núcleo
Proceso de usuario
Funciones
main()
Rutina de inicio
exec()
Llamada al sistema
exit()
_exit()
Ejemplo
/**************************************
* Programa que imprime todos los *
* argumentos de línea de órdenes *
**************************************/
int main (int argc, char *argv[])
{
int i;
for (i=0; i
Características de un proceso
Cada proceso se caracteriza por una estructura de datos conocida como tabla de control de tarea que contiene:
Identificador de proceso o PID
Identificador de proceso padre o PPID
Identificador de usuario o UID
Identificador de grupo o GID
Puntero a la memoria asignada
Puntero a los recursos …
Cada proceso dispone de un espacio de direccionamiento virtual independiente
Creación de procesos: fork()
La llamada fork() crea una copia (hijo) del proceso que la invoca
El hijo hereda del padre:
Estado
Semáforos
Objetos de memoria
Política de planificación, etc.
El hijo no hereda:
El PID
Alarmas y temporizadores
Operaciones de E/S asíncronas
Interfaz de fork()
Definida en:
#include
pid_t fork(void);
Valores de retorno:
Al padre: el PID del hijo
Al hijo: cero
En caso de error: devuelve -1 y la variable errno contiene el valor asociado al error
Página siguiente |