8.1. MANUAL DE INSTALACIÓN.

  1. Como obtener el paquete.
  2. Plataformas instalables.
  3. Estructura del paquete.
    1. Estructura de Directorios del Paquete fuente.
    2. Estructura de Directorios y Archivos del Paquete compilado.
  4. Proceso de instalación.
  5. Problemas de instalación.

Como obtener el paquete.

La versión del paquete de hilos de nivel usuario Pthreads de Chris Provenzano (abreviadamente MIT Pthreads, Proven's Pthreads, o simplemente Pthreads) que se documenta en este manual es la versión 1.60 beta5 (local) que está disponible desde el 13 de Marzo de 1996 en la dirección sipb.mit.edu:/pub/pthreads, aunque también se puede encontrar en varios "mirrors" de Internet. Actualmente está disponible la versión 1.60 beta6 (local) desde el 16 de Noviembre de 1996, que corrige algunos bugs de la versión anterior, aunque no aporta ninguna funcionalidad nueva. También se pueden obtener en la misma dirección versiones anteriores del paquete, así como las sucesivas versiones que vayan apareciendo, dado que es un paquete que sigue en desarrollo. El código fuente de la versión 1.60 Beta 5, se puede obtener mediante los siguientes comandos del shell de UNIX :

        ftp sibp.mit.edu
        cd /pub/pthreads
        bin
        get pthreads-1_60_beta5.tar.gz



De esta forma obtendremos el paquete fuente en formato comprimido mediante la utilidad gzip y archivado mediante la utilidad tar. Para descomprimirlo podemos emplear los siguientes comandos del shell de UNIX :

        gunzip pthreads-1_60_beta5.tar.gz
        tar xvf pthreads-1_60_beta5.tar
        rm -f pthreads-1_60_beta5.tar



También se puede encontrar en otros formatos según el servidor del que obtengamos el paquete, para lo cual se deben realizar pasos similares a los anteriores pero empleando el descompresor adecuado con su sintaxis correspondiente.

Plataformas instalables.

El paquete de hilos Proven's Pthreads que implementa el estándar POSIX 1003.1c sobre hilos se puede ejecutar en diversas plataformas, entre las que se encuentran las siguientes :

También se puede intentar instalar en otras plataformas para lo cual se puede consultar el Manual del Responsable del Sistema.

Pthreads 1.60 beta5 is Copyright (c) 1993, 1994, 1995, 1996 by Chris Provenzano and contributors, proven@mit.edu All rights reserved

.

Estructura del paquete.

El paquete de hilos de usuario Pthreads-1_60_beta5 consta de la siguiente estructura de directorios y archivos :

Estructura de Directorios del Paquete fuente.

La estructura de directorios que presenta el paquete Pthreads 1.60 beta 5 tras descomprimir dicho paquete es la siguiente :

config Ficheros de configuración e instalación del paquete.

scripts Scripts para la creación del Makefile del paquete.

include Cabeceras de funciones del sistema para compilación.

|-> arpa Cabeceras de funciones de red para compilación.

|-> pthread Cabeceras de funciones pthreads para compilación

machdep Funciones dependientes de la plataforma.

pthreads Funciones implementadas del estándar POSIX.1c pthreads.

gen Funciones genéricas del sistema que serán reemplazadas.

net Funciones de red del sistema que serán reemplazadas.

stdio Librería STDIO hilo-segura.

stdlib Modificaciones a la librería STDLIB para hacerla hilo-segura.

string Modificaciones a la librería STRING para hacerla hilo-segura.

lib Algunas funciones de utilidad agregadas a la librería libpthread.a

tests Ejemplos de prueba y de rendimiento de la librería libpthread.a

bin Ejemplo: aplicación "finger" en versión multihilo.

Estructura de Directorios y Archivos del Paquete compilado.

La estructura de directorios y archivos que se generan una vez compilado el paquete en una máquina Intel 486 bajo el sistema operativo Linux 1.2.3 (en otras máquinas es idéntico, quizá con ligeras variaciones) es la que se presenta a continuación :

include Ficheros cabecera del sistema

|-> arpa Cabeceras de funciones de red.

|-> pthread Cabeceras de funciones pthreads.

|-> sys Cabeceras de funciones básicas del sistema.

Ficheros del directorio include :

dirent.h Cabeceras de funciones de gestión de directorios, modificadas

para la utilización de programación con hilos.

endian.h Definición del orden de almacenamiento de los bits según

sistema.

errno.h Declaración de funciones de error.

math.h Declaración de funciones matemáticas.

netdb.h Declaración de funciones de gestión de información de red.

Base de datos sobre la red.

pwd.h Declaración de funciones de gestión de password.

resolv.h Declaración de funciones de gestión del servidor de nombres

de dominio.

sched.h Declaración de funciones de gestión del planificador.

Cabecera PTHREAD básica.

signal.h Declaración de funciones de gestión de señales.

stdio.h Declaración de funciones de gestión de E/S de la librería STDIO.

stdlib.h Declaración de funciones de gestión estándar de la librería STDLIB.

string.h Declaración de funciones de gestión de cadenas (strings).

syslog.h Declaración de funciones de gestión de 'log' del sistema.

time.h Declaración de funciones de gestión del tiempo.

timers.h Declaración de funciones de gestión de relojes.

Cabecera PTHREAD básica.

tzfile.h Declaración de funciones de gestión de zonas de tiempo.

unistd.h Declaración de funciones estándar del sistema UNIX.

pthread.h Declaración de funciones de gestión de hilos.

Cabecera PTHREAD básica.

Ficheros del directorio include/arpa :

inet.h Declaración de funciones de gestión de internet.

nameser.h Declaración de funciones de gestión del servidor de nombres internet.

Ficheros del directorio include/sys :

__math.h Declaración de valor HUGE para math.h

__path.h Declaración de rutas (paths) del sistema.

__signal.h Declaración de valores para gestión de señales.

__stdio.h Declaración de valores para stdio.h

__stdlib.h Declaración de valores para stdlib.h

__string.h Declaración de valores para string.h

__time.h Declaración del tiempo del sistema.

__unistd.h Declaración de valores para unistd.h

cdefs.h Declaración de valores para definiciones C.

compat.h Declaración de valores para compatibilidad.

dirent.h Declaración de valores para gestión de directorios.

errno.h Declaración de errno.

socket.h Corrección del fichero socket.h de LINUX

timers.h Declaración de valores para gestión de relojes.

uio.h Corrección del fichero uio.h de LINUX

wait.h Declaración de funciones de espera "wait".

Ficheros del directorio include/pthread :

ac-types.h Definición de tipos especiales.

debug_out.h Macros para depuración de mensajes printf()

fd.h Declaración de estructuras de gestión de descriptores de fichero.

fd_pipe.h Definición del nuevo y veloz ITC pipe.

kernel.h Definición de características del kernel.

kthread.h Definición de características del kernel sobre hilos.

machdep.h Definición de características dependientes de la plataforma.

paths.h Definición de las rutas (paths) del sistema.

posix.h Definición de características POSIX.

sleep.h Declaración de funciones de gestión de sleep.

state.def Definición de los estados en los que se puede encontrar un hilo.

types.h Definición de tipos.

unistd.h Declaración de funciones estándar del sistema UNIX.

util.h Declaración de funciones de utilidad genéricas.

version.h Definición de valores indicativos de la versión del paquete PTHREADS.

xtypes.h Definición de tipos extendidos (actualmente vacío).

pthread_attr.h Definición de atributos de hilo.

cleanup.h Declaración de funciones de gestión de los gestores de limpieza.

cond.h Declaración de funciones de gestión de variables de condición.

mutex.h Declaración de funciones de gestión de mutex.

pthread_once.h Declaración de la función pthread_once (ejecución una sola vez).

specific.h Declaración de funciones de gestión de datos específicos de hilo.

prio_queue.h Declaración de funciones de gestión de las colas de prioridad.

queue.h Declaración de funciones de gestión de la cola de hilos.

También se instalarán los ficheros libpthread.a (librería del paquete), pgcc y pg++ (compiladores) en los respectivos directorios que se indiquen durante el proceso de instalación, aunque por defecto será en el directorio /usr/local/pthreads.

Proceso de instalación.

Para construir Proven's Pthreads se necesita gcc (compilador GNU C de Free Software Foundation, Inc.) y gmake (utilidad GNU make de Free Software Foundation, Inc.) para todas las plataformas, excepto NetBSD, FreeBSD y BSDOS para las que se puede emplear gmake o pmake (la versión nativa de make).

Los pasos que se deben realizar para instalar Proven's Pthreads, empleando comandos del shell de UNIX, son los siguientes:

configure

make

make install

La compilación del paquete proporciona como salida la librería libpthread.a y los ejecutables pgcc y pg++, que corresponden a las versiones multihilo de los compiladores gcc y g++ de GNU. En realidad son scripts que facilitan la compilación, introduciendo los parámetros necesarios para compilar con la librería al compilador, sin que sea necesario que lo especifique el usuario.

El paquete se instala, por defecto, en el directorio /usr/local/pthreads. Si se desea otra localización se debe añadir la opción --prefix=<dir> en configure, aunque a continuación se presentan todas las opciones disponibles en la utilidad de configuración.

Opciones de configure :

El programa de configuración configure ha sido creado mediante la herramienta autoconf 2.7 de Free Software Foundation, Inc. Este programa permite establecer una serie de parámetros que condicionarán la instalación. La sintaxis y los parámetros que se pueden configurar son los siguientes

Sintaxis : configure [options] [host]

Opciones : [opciones por defecto entre corchetes tras las descripciones]

--cache-file=FILE Fichero cache de comprobación en FILE [./config.cache]

--help Presenta la ayuda de configure

--no-create No crea fichero de salida

--quiet, --silent No imprime los mensajes `checking...'

--version Imprime la versión de autoconf que creó configure

--prefix=PREFIX Instala los ficheros independientes de la arquitectura en el directorio PREFIX. [$ac_default_prefix] [/usr/local/pthreads]

--exec-prefix=EPREFIX Instala los ficheros dependientes de la arquitectura en el directorio EPREFIX [igual que prefix]

--bindir=DIR Ejecutables de usuario en DIR [EPREFIX/bin]

--sbindir=DIR Ejecutables del sistema en DIR [EPREFIX/sbin]

--libexecdir=DIR Librerías ejecutables en DIR [EPREFIX/libexec]

--datadir=DIR Datos sólo-lectura independientes de la arquitectura en DIR [PREFIX/share]

--sysconfdir=DIR Datos sólo-lectura de la máquina en DIR [PREFIX/etc]

--sharedstatedir=DIR Datos modificables independientes de la arquitectura en DIR [PREFIX/com]

--localstatedir=DIR Datos modificables de la máquina en DIR [PREFIX/var]

--libdir=DIR Librería de código objeto en DIR [EPREFIX/lib]

--includedir=DIR Ficheros de cabeceras C en DIR [PREFIX/include]

--oldincludedir=DIR Ficheros de cabeceras C para no-gcc en DIR [/usr/include]

--infodir=DIR Información de documentación en DIR [PREFIX/info]

--mandir=DIR Manual de documentación en DIR [PREFIX/man]

--srcdir=DIR Lugar de los fuentes en DIR [configure dir or ..]

--program-prefix=PREFIX Antepone PREFIX a los nombres de programas instalados

--program-suffix=SUFFIX Añade SUFFIX a los nombres de programas instalados

--program-transform-name=PROGRAM Ejecuta el filtro PROGRAM en los nombres de programas instalados.

--build=BUILD configure para construir en BUILD [BUILD=HOST]

--host=HOST configure para HOST [guessed]

--target=TARGET configure para destino TARGET [TARGET=HOST]

--disable-FEATURE No incluir la característica FEATURE (igual que --enable-FEATURE=no)

--enable-FEATURE[=ARG] incluir característica FEATURE [ARG=yes]

--with-PACKAGE[=ARG] utilizar el paquete PACKAGE [ARG=yes]

--without-PACKAGE no utilizar el paquete PACKAGE (igual que --with-PACKAGE=no)

--x-includes=DIR Ficheros X a incluir en DIR

--x-libraries=DIR Ficheros X de librería en DIR

Junto con el paquete original, se ha desarrollado una serie de páginas de manual en línea según el formato de la utilidad man de los sistemas UNIX. Las páginas del manual corresponden a las funciones más importantes que implementa el paquete y que suele emplear el programador (todas las funciones del paquete que no son internas). Para poder disponer de la ayuda en línea se deben instalar las páginas de manual en el directorio adecuado para la sección 3 del manual (lugar habitual para el estándar POSIX.1c en la mayoría de los sistemas). Con el fin de facilitar la instalación se entregan las páginas del manual en un fichero comprimido con tar y gzip llamado man.tgz. El proceso de instalación es el siguiente:

        gunzip man.tgz
        tar xvf man.tar
        rm -f man.tar
        make install



Por defecto se instalarán en el directorio /usr/man/man3. Si se desea especificar otro directorio concreto, basta modificar el Makefile que acompaña a las páginas del manual.

Problemas de instalación.

Durante el proceso de instalación podemos encontrarnos con diversos problemas. Algunos de los más frecuentes se presentan a continuación, aunque si el problema de instalación concreto no aparece en la lista de los indicados se puede consultar en los FAQs sobre el paquete, en el grupo de noticias comp.programming.threads, o bien, consultando o remitiendo el problema a la lista de correo sobre errores relacionados con el paquete pthreads-bugs@mit.edu o bien pthreads@mit.edu.

1) El paquete no se puede compilar.

Causa : El sistema no posee la utilidad gmake o falta el compilador gcc.

Solución : Localice la versión de gmake y gcc adecuada a su sistema en cualquier servidor de ftp anónimo e instálelos.

2) El paquete inicia la compilación pero se detiene inmediatamente con errores.

Causa : El sistema en el que compilamos existe gcc pero faltan la librerías de C++ o bien la versión de gcc instalada no es la adecuada.

Solución : Instalar primeramente el paquete gcc completo y de forma adecuada y volver a compilar Pthreads.

Recomendación : Emplear una versión de gcc lo suficientemente reciente : 2.6.5 o posterior.

3) El paquete parece compilar pero a mitad de camino se detiene con errores.

Causa : Puede ser que exista alguna librería no encontrada (no especificada en el path) o puede que alguno de los archivos del paquete redefina alguna estructura de su sistema.

Solución : Indique adecuadamente las rutas de las librerías en el programa configure o en su path. Si el problema persiste puede ser necesario revisar el fichero Makefile generado por la utilidad configure, o bien indicarla específicamente el sistema para el que desea generar un Makefile. En otro caso el problema es más difícil de resolver.

4) No se pueden compilar los programas de ejemplo.

Causa : El paquete ha compilado sin problemas, pero el directorio destino de la librería libpthread.a no corresponde al esperado por los ejemplos del paquete, o bien los permisos de usuario de acceso a la librería o a los ficheros de cabecera del paquete no son los adecuados.

Solución : Compruebe el directorio donde se encuentra la librería y los ficheros de cabecera, así como los permisos de acceso, y modifique los Makefile's de los ejemplos si es necesario.

5) Los programas de ejemplo no funcionan y el proceso se "cuelga".

Causa : El paquete parece estar bien instalado, pero al ejecutar un mútex o variable de condición alguno de los módulos produce un deadlock.

Solución : Revise la forma en la que realizó la instalación del paquete. Si el problema persiste puede ser que su sistema no esté soportado o que exista un bug en el paquete en relación a su sistema.