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.
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.
- 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.
- Crear el segmento de memoria
compartida con
la llamada al sistema shmget.
- Operar con la memoria compartida. Indicamos lo que queremos
compartir con la llamada al sistema shmat.
- 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:
- HOME: Contiene la dirección al home
del usuario actual.
- LANG: Especifica el lenguage que está
siendo utilizado en el sistema operativo.
- 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.
- PWD: Contiene la dirección del
directorio actual de trabajo.
- SHELL: Nombre de la consola que se
ocupa por defecto en el sistema.
- 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%

