19 Ene

Segmentación y Páginas Compartidas

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.

Páginas Compartidas

Consiste en cargar una sola instancia de las páginas 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.

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

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.

Tuberías

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.

Tuberías en DOS o Linux

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.

Compartición de Memoria a Través de Puertos Físicos

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.

  • 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.
  • 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
  • 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%

Sockets

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.

Portapapeles y Registro en Windows

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.

El término módulo describe una colección relacionada de código, datos y otros recursos.

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

El término módulo describe una colección relacionada de código, datos y otros recursos.

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#.

Compartición de Recursos de Software Mediante Objetos de Núcleo

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.

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.

Dicho bloque de memoria dispone de algunos campos comunes a todos los tipos de objeto,

Compartición de Recursos Mediante DLL

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.

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

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.

Deja un comentario