miércoles, 25 de noviembre de 2015

Administración de aplicaciones en entornos multiusuarios bajo LINUX.

1)     Realizar una investigación y crear un blog con información adquirida del tema: Administración de aplicaciones en entornos multiusuarios bajo LINUX.
· Código reentrante.
· Zona de datos en memoria.
· Variables de entorno en aplicaciones de usuario.

Enviar el link al docente y compartir el link con tres compañeros para que comenten tu blog. Los comentarios deben ser objetivos en los cuales se confirme que leyeron la información de su compañero. Y tú debes de comentar mínimo 3 blog de otros compañeros.

· Código reentrante.

Decimos que una determinada rutina es reentrante cuando soporta la reentrada en el código en cuestión mientras este esta ejecutando, es decir, es capaz de funcionar correctamente cuando, en mitad de su ejecución por algún motivo (como por ejemplo una interrupción) esta se detiene en mitad de proceso y desde algún otro punto se invoca de nuevo la rutina, reentrando en esta, ejecutandola y restaurando la ejecución en el punto en que se interrumpió en un principio.

Una función es reentrante si:

No se modifica a si misma (no modifíca su propio código). Esto es lo más normal en la gran mayoría de los programas.
No hace uso de memoria estática (situada en el heap o en el segmento de datos)
No realiza llamadas a funciones no reentrantes
Si una función cumple esos parametros entonces es reentrante (lo cual no significa que una función no pueda ser reentrante cumpliendo otros requisitos. Cualquier función que garantice la reentrada de código (por ejemplo realizando el acceso a variables globales de forma atómica) es reentrante.


El código reentrante puede a veces confundirse con el concepto de código treadsafe (seguro para tareas), principalmente por que suele ser normal que el código reentrante sea tambien threadsafe, sin embargo son conceptos distintos.

Una función reentrante es aquella a la que se le pasa como parámetro todos los valores que usa, no utiliza ningún objeto global (variable global, singleton), no tiene efectos secundarios y no llama a ninguna función no reentrante.

Una función reentrante será siempre thread-safe, si no hace ningún cambio en el estado global de un programa no hay posibilidad que interceda con el código de otra hebra.
¿Y al contrario? Una función thread-safe no tiene porqué ser reentrante, ya que puede modificar el estado global del programa siempre que lo haga ordenadamente mediante exclusión mutua.

Una función reentrante cumplirá además con la transparencia referencial. Transparencia referencial es una propiedad que se cumple cuando, al cambiar una función con sus parámetros por el valor que devuelve, el programa se comporta de la misma forma.

Este tipo de funciones (reentrantes) tienen la ventaja de que se puede seguir su funcionamiento matemáticamente y que admiten memoization como optimización.

· Zona de datos en memoria.

Una necesidad que surgió con la aparición de los primeros sistemas multitarea fue que los procesos pudieran comunicarse entre si para:
- Sincronizarse 
-Compartir información 
Unix, y todas sus variantes, implementan un mecanismo para llevar a cabo esta comunicación denominado IPC

La memoria compartida es uno de los mecanismos de Comunicación Entre Procesos (IPC) que hay en Linux.

Para usar memoria compartida en Linux es necesario seguir una serie de pasos que luego se traducen a llamadas al sistema.

  1. Necesitamos obtener un identificador de IPC. Para ello convertimos una ruta (path) del sistema en un identificador IPC. Este identificador es necesario para crear la crear la zona de memoria virtual. Esto es muy sencillo de hacer con la llamada al sistema ftok.
  2. Crear el segmento de memoria compartida con la llamada al sistema shmget.
  3. Operar con la memoria compartida. Indicamos lo que queremos compartir con la llamada al sistema shmat.
  4. Destruimos el segmento de memoria compartida con la llamada al sistema shmdt y shmctl.


· Variables de entorno en aplicaciones de usuario

Las variables de entorno en Linux son variables que contienen valores que pueden ser utilizadas por diferentes programas. 
Existen varias variables de entorno que ya están definidas con la instalación del sistema operativo, pero también es posible agregar otras según sean las necesidades.
Entre las variables de entorno predefinidas están:
  1. HOME: Contiene la dirección al home del usuario actual.
  2. LANG: Especifica el lenguage que está siendo utilizado en el sistema operativo.
  3. PATH: Una de las más importantes variables de entorno. Contienen direcciones a carpetas donde están los binarios. Esto nos permite poder escribir el comando en la consola sin necesitar escribir toda la dirección hasta donde se encuentra el binario.
  4. PWD: Contiene la dirección del directorio actual de trabajo.
  5. SHELL: Nombre de la consola que se ocupa por defecto en el sistema.
  6. USER: Nombre del usuario actual.
Para poder consultar todas las variables que están seteados como variables globales podemos usar el comando export:

    emco@debian:~$ export





En Windows, las variables del entorno se ubican entre los caracteres "%". De esta forma, para mostrar el valor de una variable del entorno sólo se debe escribir el siguiente tipo de comando:
echo %NAME_OF_THE_VARIABLE%