84
Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Embed Size (px)

Citation preview

Page 1: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Unidad II Métodos para compartir recursos de Software

M.C. Juan Carlos Olivares Rojas

Page 2: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Temario

2.1 Justificación

2.2 Requisitos

2.3 Procedimientos entrantes

2.4 Recursos compartidos asignados estáticamente

2.5 Recursos compartidos asignados dinámicamente

Page 3: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

2.1 Justificación

• Compartir un recurso de software significa que dos o más procesos puedan utilizar una misma rutina o dato que está en memoria (habiendo una sola instancia de la rutina o dato).

• La rutina es el recurso que se comparte en los procesos.

Page 4: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Justificación

• La compartición de recursos de software hace que un sistema operativo sea más flexible y eficiente ya que aumenta la capacidad de atención de procesos.

• Es necesario la compartición de recursos en un sistema operativo multiusuario y multitarea por que generalmente sólo se tiene un recurso y varios ocupan acceder a él.

Page 5: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Justificación

• Muchos sistemas como las redes de computadoras, los sistemas distribuidos, la Web y el groupware basan su funcionamiento en la compartición de recursos (procesos, periféricos, etc.).

• También la compartición puede ayudar al balanceo de carga entre los procesos.

Page 6: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

2.2 Requisitos

• Para la compartición de recursos de software se requiere principalmente que el sistema operativo permita la repetición de apuntadores en las tablas de segmento o de página (dependiendo del método empleado).

• Cualquier tipo de recurso hace referencia a memoria.

Page 7: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Requisitos

• Además, si la compartición será dinámica, se requiere que el sistema operativo soporte carga/descarga y ligado dinámico, para lo cual se requiere implementar tablas auxiliares como:– ART (Tabla de Referencia Activa),– AST (Tabla de Segmento Activa),– SMT (Tabla de Mapeo de Segmentos).

Page 8: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Requisitos

• Los recursos pueden ser:

• Dedicados: se asignan por el tiempo que el proceso los requiera. El proceso debe liberar el recurso, generalmente utilizan memoria estática, pero también se pueden utilizar memoria dinámica o espacio de almacenamiento físico.

Page 9: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Requisitos

• Los recursos compartidos pueden ser asignados de dos formas básicas:

• Uno a la vez. El recurso es asignado a un solo proceso/usuario, el uso es intercalado. Por ejemplo: el recurso procesador es recuperado por el Sistema Operativo. Los archivos son liberados por los procesos.

Page 10: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Requisitos

• Muchos a la vez: Es una compartición real, muchos procesos son asignados a un recurso. Por ejemplo: una página en memoria es asignada a muchos programas, un archivo es asignado a muchos recursos.

• Para realizar compartición de recursos se necesitan considerar: usuarios (u), derechos (d) y recursos (r).

Page 11: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Requisitos

• Por este motivo se necesita de una base de datos de n*m*r

• Al compartir recursos se generan colas (lista de espera).

• El principal problema de la compartición es la concurrencia a un recurso

Page 12: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Requisitos

• Los mecanismos más básicos de compartición hacen referencia a base de datos (tablas), semáforos y listas ligadas.

• Cada recurso define su forma de compartir.

• Por ejemplo en una sesión de computadora un recurso puede estar asignado en un tiempo, el cual recibe el nombre de quantum.

Page 13: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Requisitos

• Los derechos de los usuarios prevalecen sobre una sesión.

• Otro requisito indispensable para compartir recursos es que los procesos sepan que el recurso está compartido.

• También es requisito indispensable que los procesos se puedan comunicar entre sí para compartir cualquier recurso (IPC).

Page 14: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

2.3 Procedimientos entrantes

• La base fundamental para que se pueda compartir recursos es que los procesos puedan soportarlo.

• Para que sean compartidos eficientemente en un sistema de multiprogramación, los procesos deben ser concurrentemente reutilizables (también llamados procesos puros).

Page 15: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Procedimientos reentrantes

• Un proceso puro opera solamente sobre variables que están en registros del CPU o sobre datos que están en otros segmentos asociados con la tarea; nunca se modifican a sí mismos. Ejemplo: Los Archivos Ejecutables (EXE). Ejemplo de Archivos No Reentrantes: Archivos de Comando (COM).

Page 16: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Procedimientos reentrantes• Otros ejemplos de procesos no reentrantes son el

uso de CGI, mientras que los Servlets son procesos reentrantes.

• Algunos autores definen los procesos reentrantes aquellos que pueden obtener datos y memoria fuera de su segmento.

• Un programa para ser concurrente necesita ser reentrante, pero esto al revés la implicación no es necesariamente cierta.

Page 17: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Procedimientos reentrantes

• Los procesos necesitan de mecanismos de protección y sincronización para el uso correcto de los recursos.

• Los procesos deben ser bloqueantes (es decir que puedan detenerse en espera de un evento) de preferencia para obtener una buena compartición de los recursos.

Page 18: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Procedimientos reentrantes

• Los procesos deben responsabilizarse de la compartición de los recursos con la supervisión del sistema operativo, de lo contrario un proceso se puede adueñar de un recurso y jamás dejarlo.

• Cuando dos o más procesos compiten por un recurso y este no es liberado por los dos se produce un interbloqueo.

Page 19: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Procedimientos reentrantes

• Las funciones recursivas son un ejemplo claro de un programa reentrante por que piden memoria dinámica ubicada en distintas localidades de memoria.

• Se debe cuidar la consistencia y la integridad de los recursos como meta principal.

Page 20: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

2.4 Recursos compartidos asignados estáticamente

• Cuando los procesos compartidos se cargan completamente en memoria desde el inicio de su ejecución, se dice que la compartición es estática. Ejemplo: Rutinas del servicio de Interrupción del BIOS o MS-DOS

Page 21: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

2.5 Recursos compartidos asignados dinámicamente

• La compartición dinámica consiste en cargar en memoria solo la parte requerida de los procesos compartidos. Al necesitarse código que no está en memoria, éste será cargado durante la ejecución de las tareas. Ejemplo: Componentes gráficos del sistema operativo como los cuadros de dialogo de Windows.

Page 22: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Métodos para la Compartición de Recursos de Software

• Básicamente existen dos Métodos, los cuales están representado por la forma de direccionamiento del sistema operativo:

– Segmentos Compartidos– Paginación Compartida  

Page 23: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Segmentación compartida

• Consiste en que cada proceso tiene una tabla de segmentos asociado con su PCB (Bloque de Control de Procesos) el cual es utilizado por el despachador para definir la tabla de segmentos de hardware cuando a ese proceso se le asigne el CPU.

Page 24: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Segmentación compartida

• Los segmentos son compartidos cuando las entradas en las tablas de segmentos de dos o más procesos diferentes apuntan a las mismas localidades de memoria física.

Page 25: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Segmentación compartida

• Ejemplo: Considérese el uso de un editor de textos de un sistema de tiempo compartido. En lugar de cargar 'n' copias del código del editor, este será cargado una sola vez. Si hay varios procesos que necesitan usar este código, sus tablas de segmento contendrán apuntadores a la misma dirección de memoria donde está cargado el código.

Page 26: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Páginas compartidas

• Este método utiliza paginación como sistema base de la administración de la memoria. Consiste en cargar una sola instancia de las paginas de código a compartir y colocar apuntadores a estas páginas en las tablas de páginas de todos los procesos que utilizan el recurso.

Page 27: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Páginas compartidas

• Ejemplo: Utilizando el mismo editor de textos sólo las funciones utilizadas se cargan en memoria y están residentes en memoria por si otros procesos las utilizan.

• La memoria no es la única forma de compartir recursos de software, existen otros mecanismos menos eficientes que discutiremos a continuación.

Page 28: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Una forma sencilla de compartir recursos de software es a través de utilizar almacenamiento secundario: archivos.

• Un proceso escribe en un archivo y otro lo lee. Este es el funcionamiento de ciertos procesos como las tuberías.

Page 29: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Un tubo es un archivo temporal que enlaza la salida de un programa con la entrada de otra.

• El problema radica en cuando dos o más procesos quieren escribir en el archivo que simula la memoria compartida.

Page 30: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Las tuberías en DOS o Linux pueden manejarse a nivel de sistema con los operadores de redirección <, >, >> y | que redirecciona la salida de un programa hacia la entrada de otro.

• Los tubos a nivel IPC se ejecutan en el núcleo del sistema operativo.

Page 31: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos para compartir recursos de software

• Las tuberías en POSIX (Portable Operating System InterconeXion) se crean a través de la siguiente llamada:

• int tuberia[2]; /*Descriptor de archivos*/• int pipe(tuberia);

• tuberia[0]; /*Escritura*/ • tuberia[1]; /*Lectura*/

Page 32: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos para compartir recursos de software

• Al dejar de utilizar una tubería, esta se debe de cerrar en sus dos extremos: close(tubería).

• Se escriben datos en la tubería como cualquier escritura de archivos con read(tuberia[1], mensaje, strlen(mensaje)) y write(tuberia[0], mensaje, strlen(mensaje)).

Page 33: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos para compartir recursos de software

• Las tuberías no son bidireccionales, sólo van en un sentido, pero se pueden utilizar dos tuberías para pasar mensajes en ambas direcciones.

• Las tuberías utilizadas sólo están disponibles para los descendientes de un proceso que lo crean. Por este motivo, no están disponible para otros procesos.

Page 34: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Otra forma de compartir memoria es a través de los puertos físicos del sistema, como el puerto paralelo o serial. Un proceso puede escribir en un puerto (el cual es una dirección de memoria conocida) y el otro lee en esa misma dirección, el proceso puede ser remoto hacia un periférico.

Page 35: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos para compartir recursos de software

• Los puertos tienen asociados direcciones físicas, por ejemplo el puerto serial o de comunicaciones COM1 en una IBM PC tiene asociado la dirección física 0x3F8-0x3FF

• Escribiendo en esa memoria todos esos datos pueden ser leídos por otro proceso o dispositivo. Otros puertos son AUX, LPT1, CON en DOS. En Linux se manejan otros.

Page 36: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Otra forma de compartir recursos es a través de las variables de entorno del sistema operativo. Un proceso escribe un valor en una variable y otro proceso lo lee.

• Las variables de entorno %PATH%, $USER en los sistemas operativos tienen algún valor especial

Page 37: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos para la compartición de recursos de software

• Las variables de entorno pueden ser a nivel usuario o sistema. A nivel usuario sólo están disponibles para ese usuario o terminal (no son accesibles por otros y por lo tanto no tan compartibles), a nivel sistema es global.

• SET var=hola;• ECHO %var%

Page 38: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos para compartir recursos de software

• En sistemas Linux se cuenta con algunas primitivas para el acceso a variables de entorno:

• char *valor = getenv(“TERM”);

• char *var1 = “VARIABLE=valor”

• putenv(var1);

Page 39: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• También se puede hacer la compartición en algunos entornos comunes a las aplicaciones como lo son variables de entorno de una máquina virtual como Java o .NET.

• Otra compartición puede ser a través de procesos remotos usando sockets en máquinas dispersas geográficamente.

Page 40: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Los sockets permiten comunicar procesos de manera remota. Sin embargo, existen sockets que se manejan local o bien, la dirección de red de un proceso remoto puede ser la misma máquina por lo que los remotos se manejan localmente.

• Existen muchas implementaciones de Sockets las más conocidas la API de Berkeley (Unix y variantes) y los WinSocks en Windows.

Page 41: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Otra forma de compartir recursos es la replicación, la cual hace que un pedazo de memoria se copie en otro. De alguna forma se comparten datos y recursos pero sólo es útil para lectura, ya que para escritura deberá reintegrarse el contenido siendo en muchos casos más complicado que compartirlo.

Page 42: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• En sistemas Unix una manera muy fácil de compartir recurso vía duplicación es a través de la creación de un subproceso a través de la llamada del sistema fork().

• Cuando se realiza un fork, el subproceso hace una réplica del segmento total de proceso (datos, código, pila, segmento).

Page 43: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

#include <sys/types.h>pid_t pid; pid = fork()

• Los procesos pueden reemplazar esos segmentos con la familia de instrucciones exec.

• Los datos compartidos duran una sóla vez.

Page 44: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

if (pid == -1)

perror(“Error al crear proceso”);

else

{

if (pid == 0)

/*Proceso hijo*/

else

/*Proceso padre*/

}

Page 45: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Otra forma de compartir recursos de software es a través de mecanismos de señalamiento como paso de mensajes (colas), interrupciones, señales, los cuales son considerados mecanismos de sincronización y que se verán en la siguiente unidad.

Page 46: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Aunque no es una señal un código de estado de un proceso puede servir para compartir información entre procesos.

• Al utilizar lenguajes como C, el programador puede retornar un valor a otro programa vía el sistema operativo. Útil cuando un programa depende de otro.

Page 47: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• En Unix, la variable de entorno $? Devuelve el estado del último proceso, en D.O.S. es la variable %errorlevel%

• Una forma más eficiente de terminar un proceso y enviar datos es a través de la función exit() y atexit() que cierran de forma segura el sistema

Page 48: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanimos de compartición de recursos de software

• La forma más eficiente de compartir recursos es a través de la memoria compartida.

• En sistemas Unix se puede compartir memoria a través de las primitivas IPC. Las cuales son:

#include <sys/shm.h>

int shmget(key, size, shmflg);

Page 49: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

int shmid;

if((shmid = shmget(llave, 4096, IPC_CREATE | 0600)) == -1)/*Error al crear memoria compartida*/

int shmctl(shmid, cmd, buf)

• cmd indica la operación la cual puede ser: IPC_STAT, IPC_SET, IPC_RMID, SHM_LOCK, SHM_UNLOCK.

Page 50: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

struct shmid_s *buf

smctl(shmid, IPC_RMID, 0);

char *shmat(shmid, shmaddr, shmflg); /*Liga*/

int shmdt(shmaddr); /*Desliga la memoria*/

• Las llaves son genéricas para todos los IPC e identifican de manera única dicho objeto en el núcleo.

Page 51: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

key_t llave;

if((llave= ftok(“/etc/ntp.conf”, ‘A’) == (key_t)-1)/*Error al crear la llave*/

• ipcs se utiliza para ver los mecanismos ipc asignados (-q, -m, -s, -b)

• ipcrm se utiliza para liberar recursos (-q msqid, -m shmid, -s semid)

Page 52: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

float *memoria;

shmid = shmget(llave, MAX * sizeof(float), IPC_CREAT | 0600);

memoria = shmat(shmid, 0, 0);

/*Operar memoria*/

shmdt(memoria);

shmctl(shmid, IPC_RMID, 0);

Page 53: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de software

• Otra forma de compartir recursos de software en Windows consiste en utilizar mecanismos centralizados por el sistema operativo como lo son el portapapeles (Clipboard) y el registro.

• El portapapeles es un área de memoria compartida que sólo puede contener un valor a la vez.

Page 54: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Mecanismos de compartición de recursos de softtware

• El portapapeles es de tamaño variable. Se puede administrar esta zona de memoria para guardar más datos como lo hace el portapapeles de office.

• El registro es una base de datos de configuraciones del sistema. Cualquier proceso puede leer y actualizar el registro.

Page 55: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de Software en Windows

• Dentro del MFC, no existen APIs directas para la manipulación del portapapeles, en .NET se encuentra con la clase Clipboard.

• Afortunadamente existen diversas clases en Internet que permiten enmascarar la complejidad del portapapeles de la API Win32, sólo se debe tener en cuenta que existen métodos para manipular texto y otros para imágenes.

Page 56: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de software en Windows

• Manipular el registro se hace de forma fácil utilizando .NET ya que cuenta con el nombre de espacio microsoft.win32 en la cual se cuentan con clases de envoltura para el manejo del registro.

• En visual C++ se tiene que utilizar funciones como RegCreateKeyEx(), RegSetValue(), RegOpenKey() y RegCloseKey().

Page 57: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de software Windows

• El término módulo describe una colección relacionada de código, datos y otros recursos (por ejemplo, mapas de bits) presentes en memoria. Normalmente, tal colección conformará o bien un único programa ejecutable o una biblioteca de ligado dinámico (DLL).

Page 58: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de Recursos de Software en Windows

• Se debe tener un registro de los módulos cargados en cada instante, ya que dicho registro permite detectar que segmentos de código y recursos (como íconos), ya están en uso. En lugar de cargar una segunda copia y ocupar más memoria, Windows crea referencias adicionales para los recursos que ya están en uso.

Page 59: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de Recursos de Software

• Durante la vida del sistema, Windows mantiene una cuenta de uso para cada recurso.

• Cuando las aplicaciones hacen uso de un recurso, el sistema incrementa la cuenta de referencia.

Page 60: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de Recursos de Software en Windows

• Cuando finaliza la aplicación, el sistema decrementa la cuenta de referencia.

• Una cuenta de referencia con valor 0 indica que el recurso ya no está en uso y el sistema puede ocupar la memoria liberada.

• Este esquema es utilizado por los recolectores de basura en lenguajes POO como Java y C#.

Page 61: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de Software

• Se implementa mediante el uso de unas estructuras de datos llamadas objetos de núcleo. Una aplicación Win32 crea, abre y maneja objetos de núcleo (objetos proceso, objetos suceso, objetos semáforo, objetos hilo, etc.) con regularidad.

Page 62: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de Recursos de Software

• Cada objeto del núcleo es un bloque de memoria asignado por el Kernel y al que sólo puede acceder el Kernel (parecidos a los IPC de UNIX).

• Este bloque de memoria es una estructura de datos cuyos elementos contienen información sobre un objeto.

Page 63: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de Recursos de Software

• Dicho bloque de memoria dispone de algunos campos comunes a todos los tipos de objeto, por ejemplo, nombre del objeto, descriptor de seguridad, contador de utilización, etc., mientras que otros serán propios de cada tipo de objeto.

Page 64: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de software

• Por ejemplo, un objeto-proceso contendrá una identificación del proceso, una prioridad de base y un código de salida, mientras que un objeto-archivo contendrá un desplazamiento de bytes, un modo de compartición y un modo de apertura.

Page 65: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de software

• Las DLL se pueden crear de manera similar a lo que es una función estática para ello se debe de utilizar directivas especiales. Si se utiliza Visual C++ que hace uso de la API Win32 a través de la MFC (Microsoft Foundation Clasess) se seguirá el proceso.

• Crear un proyecto en C++ (se puede escoger proyecto de DLL pero no es del todo necesario).

Page 66: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de Recursos de Software

• En el archivo *.cpp se agrega el modificador __declspec(dll) para cada método o función que se desea este presente en la DLL, también se pueden exportar datos.

__declspec(dll) int suma(int a, int b) { return a+b;}

Page 67: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de software

int compartida = 10;

• Si se utiliza este segmento de código (la DLL generada deberá ser visible al programa que la va a ocupar, así como tener un archivo de encabezado .h) se verá que los datos no son compartidos.

• Se le tiene que indicar explícitamente que comparta los datos.

Page 68: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Compartición de recursos de software

• La compartición se indica a través de las siguientes directivas del compilador:

#pragma data_seg(“DataCom”); int valor = 0; char cad[30] = NULL;#pragma

#pragma comment (linker, “SECTION: DataCom, rws”);

Page 69: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Las librerías estáticas se crean como cualquier programa en C, poniendo en un archivo de encabezado (.h) los prototipos de función y en el código fuente (.c) la definición de las funciones sin utilizar una función main

• Después el código se debe compilar a formato de objeto con: gcc –c libreria.c libreria.o

Page 70: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Después se deben crear los módulos con el comando ar, de la siguiente forma:

ar –r –c –s libreria.a librería.o

• Con el comando nm se pueden visualizar las dependencias de las diferentes funciones:

nm librería.a

Page 71: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Para utilizar la librería se utiliza realiza un programa en el cual se incluye el archivo de cabecera de la librería.

• Se debe indicar con las opciones –l para indicar la librería (.h) y –L en donde buscar la librería compilada:

• gcc –g programa.c –o programa –L. -lerr

Page 72: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Las librerías dinámicas tienen la extensión .so y son diferentes a las estáticas .a en que se cargan en memoria una sola vez y pueden ser reutilizables por otros procesos.

• El comando ldd permite verificar que librerías ocupa un programa para ejecutarse. Si se utiliza los parámetros –d y –r para ver funciones y objetos faltantes.

Page 73: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• El prefijo .so viene del nombre shareable object (objeto compartido)

• Las librerías dinámicas son administradas por el kernel del sistema.

• Por ejemplo las librerías de C están por ejemplo en libc.so.5.4.46, una pequeña variación podría ser totalmente diferente a la otra.

Page 74: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• La parte fija de las librerías dinámicas recibe el nombre de soname, en este caso libc.

• Los programas se relacionan en base a su libc. Esto se asocia a través de la utilidad ldconfig.

• ¿Por qué las bibliotecas dinámicas son incompatibles?

Page 75: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Se vuelven incompatibles sobre diferentes vistas: – han sido modificadas las interfaces de función

exportadas– han sido añadidas nuevas interfaces de

funciones, – el comportamiento de ciertas funciones varía

respecto de su especificación original

Page 76: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux• Para evitar la problemática de las librerías

dinámicas se debe tener cuidado en:

• Añadir funciones con nuevos nombres en lugar de modificar o cambiar funcionalidad

• Añadir estructuras de datos sólo cuando sea necesario

• Las librerías dinámicas a nivel de implementación son iguales a las estáticas, difiere la forma de compilarlas.

Page 77: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Para crear la librería de forma dinámica se siguen los siguientes pasos:

• Compilar la librería en formato objeto con la opción –fPIC para generar Código Independiente de la Posición:

gcc –fPIC –g –c librería.c –o librería.o

Page 78: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• No utilizar la opción –fomit-frame-pointer de gcc para poder realizar depuración.

• Utilizar las opciones –shared –soname y -Wl de gcc:

• gcc –g –shared –Wl, -soname, libreria.so –o librería.so.1.0.0.0 librería.o -lc

Page 79: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Se debe enlazar la librería de C para que tenga su funcionalidad y no tenga problemas de versiones:

• ln –s librería.so.1.0.0 librería.so.1• ln –s librería.so.1.0.0 librería.so

• Los directorios por default en donde se encuentras las librerías son /lib y /usr/lib

Page 80: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Librerías en Linux

• Para utilizar una librería dinámica se utiliza de la misma manera que su variante estática en el programa:

• gcc –g programa.c –o programa –L. –lerr

• Se debe agregar la ruta donde se encuentra la librería: LD_LIBRARY_PATH =$(pwd) ./libreria

Page 81: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Referencias

• Tutorial de Sistemas Operativos 2. Instituto Tecnológico de la Paz. http://sistemas.itlp.edu.mx/tutoriales/sistemasoperativos2/ [agosto 2007]

• Tanebaum, A., Woodhull, A. (1997) Sistemas Operativos. Diseño e Implementación. México, Prentice Hall. ISBN: 970-17-0165-8.

Page 82: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Referencias

• Villegas, Cristobal. Material Curso de Sistemas Operativos 2 (2002). Instituto Tecnológico de Morelia, México.

• Silberschatz, Abraham, Galvin, Peter, Sistemas Operativos, Quinta edición (1999). México, Pearson.

Page 83: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

Referencias

• Wall, Kurt (2000) “Programación en Linux con Ejemplos”, Pearson: Buenos Aires, Argentina, ISBN: 987-9460-09-X, pp- 299-318.

Page 84: Unidad II Métodos para compartir recursos de Software M.C. Juan Carlos Olivares Rojas

¿Preguntas?