SlideShare una empresa de Scribd logo
1 de 6
MÓDULO II: PROGRAMACIÓN CONCURRENTE 
MEMORIA COMPARTIDA. 
1.- Conceptos generales de memoria compartida. 
La forma más eficaz que tienen los procesos para comunicarse consiste en 
compartir una zona de memoria, tal que para enviar datos de un proceso a otro, sólo se 
ha de escribir en dicha memoria y automáticamente estos datos estarán disponibles para 
cualquier otro proceso. La utilización de este espacio de memoria común evita la 
duplicación de datos y el lento trasvase de información entre los procesos. 
La memoria convencional que puede direccionar un proceso a través de su 
espacio de direcciones virtuales es local a ese proceso y cualquier intento de direccionar 
esa memoria desde otro proceso va a provocar una violación de segmento. Es decir, 
cuando se crea uno o más procesos mediante la llamada fork(), se realiza una 
duplicación de todas las variables usadas, de forma que cualquier modificación de sus 
valores pasa inadvertida a los demás procesos, puesto que aunque el nombre es el 
mismo, su ubicación en memoria no lo es. Esto es debido a que con cada nuevo proceso 
se reserva una zona de memoria inaccesible a los demás. Las direcciones de las 
variables de esta zona son virtuales, y es el módulo de gestión de la memoria el que se 
encarga de traducirlas a direcciones físicas. 
Para solucionar este problema, UNIX ofrece la posibilidad de crear zonas de 
memoria con la característica de poder ser direccionadas por varios procesos 
simultáneamente. A estas zonas de memoria se les denominada segmentos de memoria 
compartida, y corresponden a memoria virtual, es decir; sus direcciones físicas 
asociadas pueden verse modificadas a lo largo de la ejecución, pero esto es transparente 
al programa puesto que es el módulo de gestión de la memoria el que se encarga de 
traducir las direcciones físicas a las direcciones virtuales generadas por los procesos. 
El kernel no gestiona de forma automática los segmentos de memoria 
compartida, por lo tanto, es necesario asociar a cada segmento o grupo de segmentos un 
conjunto de mecanismos de sincronización, de forma que se evite los típicos choques 
entre los procesos, es decir, que un proceso este modificando la información contenida 
en el segmento mientras que otro lee sin que se hayan actualizado todos los datos. 
2.- Petición de un segmento de memoria compartida. 
La función shmget permite crear una zona de memoria compartida o habilitar el 
acceso a una ya creada. Su declaración es la siguiente: 
#include <sys/types.h> 
#include <sys/ipc.h> 
#include <sys/shm.h> 
int shmget (clave, tamaño, opción); 
key_t clave; /* clave del segmento de memoria compartida */ 
© E.G.R. 1
int tamaño; /* tamaño del segmento de memoria compartida */ 
int opción; /* opción para la creación */ 
Si la llamada se ejecuta correctamente, la función devolverá el identificador 
asociado a la zona de memoria con el fin de poder utilizarla posteriormente. Si por 
algún motivo falla, la función devolverá el valor –1. 
El parámetro clave es la llave de acceso, y tiene el mismo significado que el 
parámetro clave en la función semget que permite crear o habilitar grupos de semáforos. 
El segundo parámetro, tamaño, indica el espacio en bytes de la zona de memoria 
compartida que se desea crear. Este espacio es fijo durante su utilización. 
El último parámetro es una máscara de bits que definirá los permisos de acceso a 
la zona de memoria y el modo de adquirir el identificador de la misma. En definitiva, su 
significado es similar al que se vio para la máscara opción de la citada función semget. 
El identificador del segmento que devuelve esta función es heredado por todos 
los procesos descendientes del que llama a esta función. 
El siguiente trozo de código muestra cómo se crea una zona de memoria de 4096 
bytes, donde sólo el propietario va a tener permiso de lectura y escritura: 
#define LLAVE (key_t)234 /* clave de acceso */ 
int shmid; /* identificador del nuevo segmento de memoria compartida */ 
if((shmid=shmget(LLAVE, 4096, IPC_CREAT | 0600)) == -1) 
{ 
/* Error al crear o habilitar el segmento de memoria compartida. 
Tratamiento del error. */ 
} 
3.- Control de un segmento de memoria compartida. 
La función shmctl proporciona información administrativa y de control sobre el 
segmento de memoria compartida que se especifique. Su declaración es la sigueinte: 
#include <sys/types.h> 
#include <sys/ipc.h> 
#include <sys/shm.h> 
int shmctl (shmid, op, p_buf); 
int shmid; /* identificador del segmento */ 
int op; /* operación a efectuar */ 
struct shnud_ds *p_buf; /* argumento de la operación */ 
Esta función va a actuar sobre el segmento de memoria compartida que responde 
al identificador shmid (devuelto por una llamada previa a shmget). El parámetro op 
© E.G.R. 2
indica el tipo de operación de control que se desea realizar, y sus posibles valores 
válidos son los que se especifican a continuación: 
Operación Efecto y valor devuelto 
IPC_STAT Lee la información administrativa y la almacena en la zona de 
memoria apuntada por p_buf. 
IPC_SET Modifica la información administrativa, para lo cual dicha 
información debe estar en p_buf. 
IPC_RMID Indica al kernel que borre el segmento. Esto no se llevará a cabo 
mientras que exista algún proceso conectado al mismo. Sin 
embargo, su efecto inmediato es evitar que cualquier proceso se 
enganche a partir de ahora al segmento. 
SHM_LOCK Bloquea en memoria el segmento, es decir; permanece fijo en 
memoria y no se va a realizar sobre él swapping. Esta operación 
sólo la puede efectuar el superusuario. 
SHM_UNLOCK Desbloquea el segmento, pudiendo los mecanismos de swapping 
trasladarlo de la memoria principal a la secundaria, y viceversa. Esta 
operación sólo la puede llevar a cabo el superusuario. 
La llamada a esta función devuelve el valor 0 si se ejecuta satisfactoriamente, y 
–1 si se ha producido algún fallo. 
El siguiente trozo de código muestra como se borra un segmento de memoria 
compartida previamente creado: 
int shmid; /* identificador del segmento de memoria compartida */ 
.... 
if(shmctl (shmid, IPC_RMID,0) == -1) 
{ 
/* Error al eliminar el segmento de memoria compartida. 
Tratamiento del error. */ 
} 
4.- Operaciones con segmentos de memoria compartida. 
Un proceso, antes de usar un segmento de memoria compartida, tiene que 
atribuirle una dirección virtual en su espacio de direcciones (mapearlo), con el fin de 
que dicho proceso pueda acceder a él por medio de esta dirección. Esta operación se 
conoce como conexión, unión o enganche de un segmento con el proceso. Una vez que 
el proceso deja de usar el segmento, debe de realizar la operación inversa (desconexión, 
desunión o desenganche), dejando de estar accesible el segmento para el proceso. 
Las llamadas al sistema para realizar estas operaciones son las siguientes: 
shmat Esta función realiza la conexión del segmento al espacio de direccionamiento del 
proceso. Su declaración es: 
char *shmat (shmid, adr, opcion); 
© E.G.R. 3
int shmid; /* identificador del segmento */ 
char *adr; /* dirección de enlace */ 
int opcion; /* opción de conexión */ 
Shmid es el identificador del segmento, adr es la dirección virtual donde se 
desea que empiece el segmento (esta dirección puede ser suministrada por el 
programador o bien elegida por el kernel) y opcion es una máscara de bits que 
indica la forma de acceso al segmento de memoria. Si el bit SHM_RDONLY 
está activo, el segmento será accesisble para leer, pero no para escribir. 
Si la llamada a esta función funciona correctamente, devolverá un puntero a la 
dirección virtual a la que está conectado el segmento. Esta dirección puede 
coincidir o no con adr, dependiendo de la decisión que tome el kernel. El 
problema principal que se plantea es el de la elección de la dirección, puesto 
que, no puede entrar en conflicto con direcciones ya utilizadas, o que impida el 
aumento del tamaño de la zona de datos y el de la pila. Por ello, si se desea 
asegurar la portabilidad de la aplicación es recomendable dejar al kernel la 
elección de comienzo del segmento, para ello basta con pasarle un puntero 
NULL como segundo parámetro (valor entero 0). Si por algún motivo falla la 
llamada a esta función, devolverá –1. 
Una vez que el segmento esta únido al espacio de direcciones virtuales del 
proceso, el acceso a él se realiza a través de punteros, como con cualquier otra 
memoria dinámica de datos asignada al programa. 
shmdt Efectúa el desenlace del segmento previamente conectado. Su declaración es: 
int shmdt (adr); 
char *adr; /* dirección de conexión del segmento a desenlazar */ 
Su único parámetro adr, es la dirección virtual del segmento que se desea 
desconectar (devuelta por la llamada a la función shmat). Es lógico que después 
de ejecutarse esta función, dicha dirección se convierta en una dirección ilegal 
del proceso. Esto no quiere decir que su contenido se borre, simplemente que se 
deja de tener acceso a la memoria reservada. 
Si la llamada se efectua satisfactoriamente, la función devolverá el valor 0, y en 
caso de que se produzca algún fallo devolverá –1. 
El siguiente trozo de código muestra como se puede crear un segmento de 
memoria compartida y almacenar en él un vector de caracteres: 
#define LLAVE (key_t)234 
#define MAX 10 
int shmid, i; 
char *vector; 
.... 
© E.G.R. 4
/* Creación de un segmento de memoria compartida */ 
if((shmid=shmget(LLAVE, MAX*sizeof(char), IPC_CREAT | 0600)) == -1) 
{ 
printf(“No se ha podido crear el segmento.”); 
exit (-1); 
} 
else 
{ 
/* Conexión del segmento al espacio de direcciones virtuales */ 
if(((int)vector=shmat(shmid, 0, 0)) == -1) 
{ 
printf(“ Error en la conexión.“); 
exit(-1); 
} 
/* Manipulación del segmento de memoria compartida */ 
for (i=0; i<MAX; i++) 
vector[i]=’a’; 
for (i=0; i<MAX; i++) 
printf(“Valor almacenado %c”, vector[i]); 
/* Desconexión del segmento al espacio de direcciones virtuales */ 
if(shmdt(vector) == -1) 
{ 
printf(“ Error en la desconexión.“); 
exit(-1); 
} 
/* Borrado del segmento de memoria compartida */ 
if(shmctl(shmid, IPC_RMID, 0) == -1) 
{ 
printf(“ Error en el borrado del segmento.“); 
exit(-1); 
} 
} 
... 
© E.G.R. 5
/* Creación de un segmento de memoria compartida */ 
if((shmid=shmget(LLAVE, MAX*sizeof(char), IPC_CREAT | 0600)) == -1) 
{ 
printf(“No se ha podido crear el segmento.”); 
exit (-1); 
} 
else 
{ 
/* Conexión del segmento al espacio de direcciones virtuales */ 
if(((int)vector=shmat(shmid, 0, 0)) == -1) 
{ 
printf(“ Error en la conexión.“); 
exit(-1); 
} 
/* Manipulación del segmento de memoria compartida */ 
for (i=0; i<MAX; i++) 
vector[i]=’a’; 
for (i=0; i<MAX; i++) 
printf(“Valor almacenado %c”, vector[i]); 
/* Desconexión del segmento al espacio de direcciones virtuales */ 
if(shmdt(vector) == -1) 
{ 
printf(“ Error en la desconexión.“); 
exit(-1); 
} 
/* Borrado del segmento de memoria compartida */ 
if(shmctl(shmid, IPC_RMID, 0) == -1) 
{ 
printf(“ Error en el borrado del segmento.“); 
exit(-1); 
} 
} 
... 
© E.G.R. 5

Más contenido relacionado

La actualidad más candente

04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...Diego Andrés Alvarez Marín
 
Resumen del primer corte
Resumen del primer corteResumen del primer corte
Resumen del primer corteADOLFO BORJA
 
Capacidad de la Unidad de Procesamiento
Capacidad de la Unidad de ProcesamientoCapacidad de la Unidad de Procesamiento
Capacidad de la Unidad de ProcesamientoFernandoDuarte785515
 
Capacidad de la unidad de procesamiento (grecia gonzález 30203532)
Capacidad de la unidad  de procesamiento (grecia gonzález   30203532)Capacidad de la unidad  de procesamiento (grecia gonzález   30203532)
Capacidad de la unidad de procesamiento (grecia gonzález 30203532)GreciaGonzlez9
 
Sistema Operativo Oper Ajaja
Sistema Operativo Oper AjajaSistema Operativo Oper Ajaja
Sistema Operativo Oper Ajajaguest111d2
 
CAPACIDAD DE LA UNIDAD DE PROCESAMIENTO
CAPACIDAD DE LA UNIDAD DE PROCESAMIENTOCAPACIDAD DE LA UNIDAD DE PROCESAMIENTO
CAPACIDAD DE LA UNIDAD DE PROCESAMIENTORafael Espina
 
Andrea Avendaño 28.041.479
Andrea Avendaño 28.041.479Andrea Avendaño 28.041.479
Andrea Avendaño 28.041.479Andrea Carolina
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoJehisglayOliveros
 
Taller de saberes previos
Taller de saberes previosTaller de saberes previos
Taller de saberes previosyulypao
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoLucianoCabrera7
 
Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...
Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...
Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...Mari Cruz
 

La actualidad más candente (15)

04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
 
Resumen del primer corte
Resumen del primer corteResumen del primer corte
Resumen del primer corte
 
Capacidad de la Unidad de Procesamiento
Capacidad de la Unidad de ProcesamientoCapacidad de la Unidad de Procesamiento
Capacidad de la Unidad de Procesamiento
 
Matlab teoria
Matlab teoriaMatlab teoria
Matlab teoria
 
Procesamiento segmentado
Procesamiento segmentado   Procesamiento segmentado
Procesamiento segmentado
 
Practica1
Practica1Practica1
Practica1
 
05 - Funciones en lenguaje C
05 - Funciones en lenguaje C05 - Funciones en lenguaje C
05 - Funciones en lenguaje C
 
Capacidad de la unidad de procesamiento (grecia gonzález 30203532)
Capacidad de la unidad  de procesamiento (grecia gonzález   30203532)Capacidad de la unidad  de procesamiento (grecia gonzález   30203532)
Capacidad de la unidad de procesamiento (grecia gonzález 30203532)
 
Sistema Operativo Oper Ajaja
Sistema Operativo Oper AjajaSistema Operativo Oper Ajaja
Sistema Operativo Oper Ajaja
 
CAPACIDAD DE LA UNIDAD DE PROCESAMIENTO
CAPACIDAD DE LA UNIDAD DE PROCESAMIENTOCAPACIDAD DE LA UNIDAD DE PROCESAMIENTO
CAPACIDAD DE LA UNIDAD DE PROCESAMIENTO
 
Andrea Avendaño 28.041.479
Andrea Avendaño 28.041.479Andrea Avendaño 28.041.479
Andrea Avendaño 28.041.479
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamiento
 
Taller de saberes previos
Taller de saberes previosTaller de saberes previos
Taller de saberes previos
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamiento
 
Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...
Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...
Arquitectura de computadoras II-Codigo de Operaciones y Campo de Direccionami...
 

Destacado

Estandares de la pagina web(w3c)
Estandares de la pagina web(w3c)Estandares de la pagina web(w3c)
Estandares de la pagina web(w3c)yaritza28
 
0428 Mixbeat345
0428 Mixbeat3450428 Mixbeat345
0428 Mixbeat345ugawa taro
 
As Melhores PosiçõEs Na Cama
As Melhores PosiçõEs Na CamaAs Melhores PosiçõEs Na Cama
As Melhores PosiçõEs Na Camaalex
 
10691532 10202048433250846 1279343409_n
10691532 10202048433250846 1279343409_n10691532 10202048433250846 1279343409_n
10691532 10202048433250846 1279343409_nDora44
 
Harley davidson for female
Harley davidson for femaleHarley davidson for female
Harley davidson for femaleRitesh Bhatt
 

Destacado (8)

Chiqui,
Chiqui,Chiqui,
Chiqui,
 
Estandares de la pagina web(w3c)
Estandares de la pagina web(w3c)Estandares de la pagina web(w3c)
Estandares de la pagina web(w3c)
 
0428 Mixbeat345
0428 Mixbeat3450428 Mixbeat345
0428 Mixbeat345
 
As Melhores PosiçõEs Na Cama
As Melhores PosiçõEs Na CamaAs Melhores PosiçõEs Na Cama
As Melhores PosiçõEs Na Cama
 
10691532 10202048433250846 1279343409_n
10691532 10202048433250846 1279343409_n10691532 10202048433250846 1279343409_n
10691532 10202048433250846 1279343409_n
 
Harley davidson for female
Harley davidson for femaleHarley davidson for female
Harley davidson for female
 
My pets
My pets My pets
My pets
 
Felinos
FelinosFelinos
Felinos
 

Similar a Memoria

Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas OperativosJammil Ramos
 
S Incronizacion De Procesos
S Incronizacion De ProcesosS Incronizacion De Procesos
S Incronizacion De ProcesosAcristyM
 
Gestion De Memoria
Gestion De MemoriaGestion De Memoria
Gestion De Memoriaguestaff6d2
 
Administracion y manejo de memoria
Administracion y manejo de memoriaAdministracion y manejo de memoria
Administracion y manejo de memoriagiovatovar
 
Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2giovatovar
 
Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2giovatovar
 
Gestion de-memoria-copia
Gestion de-memoria-copiaGestion de-memoria-copia
Gestion de-memoria-copiaBlanca Bailon
 
Mecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosMecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosAbimael hernandez
 
Tp arquitectura
Tp arquitecturaTp arquitectura
Tp arquitecturanic0las
 
Tp arquitectura
Tp arquitecturaTp arquitectura
Tp arquitecturanic0las
 

Similar a Memoria (20)

Memoria compartida
Memoria compartidaMemoria compartida
Memoria compartida
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Capitulo3
Capitulo3Capitulo3
Capitulo3
 
Memoria en los SO
Memoria en los SOMemoria en los SO
Memoria en los SO
 
Gestion-de-memoria
 Gestion-de-memoria Gestion-de-memoria
Gestion-de-memoria
 
Trabajo tema 6 memoria
Trabajo tema 6 memoriaTrabajo tema 6 memoria
Trabajo tema 6 memoria
 
S Incronizacion De Procesos
S Incronizacion De ProcesosS Incronizacion De Procesos
S Incronizacion De Procesos
 
Sistema Jerarquico
Sistema JerarquicoSistema Jerarquico
Sistema Jerarquico
 
Gestion De Memoria
Gestion De MemoriaGestion De Memoria
Gestion De Memoria
 
Administracion y manejo de memoria
Administracion y manejo de memoriaAdministracion y manejo de memoria
Administracion y manejo de memoria
 
Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2
 
Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2Administracion y manejo de memoria parte2
Administracion y manejo de memoria parte2
 
Gestion de-memoria-copia
Gestion de-memoria-copiaGestion de-memoria-copia
Gestion de-memoria-copia
 
Estructura del s.o
Estructura del s.oEstructura del s.o
Estructura del s.o
 
Gestion De Memoria
Gestion De MemoriaGestion De Memoria
Gestion De Memoria
 
Gestion De Memoria
Gestion De MemoriaGestion De Memoria
Gestion De Memoria
 
Mecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosMecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmos
 
Tp arquitectura
Tp arquitecturaTp arquitectura
Tp arquitectura
 
Tp arquitectura
Tp arquitecturaTp arquitectura
Tp arquitectura
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 

Último

exportacion y comercializacion de palta hass
exportacion y comercializacion de palta hassexportacion y comercializacion de palta hass
exportacion y comercializacion de palta hassJhonnyvalenssYupanqu
 
informacion-finanTFHHETHAETHciera-2022.pdf
informacion-finanTFHHETHAETHciera-2022.pdfinformacion-finanTFHHETHAETHciera-2022.pdf
informacion-finanTFHHETHAETHciera-2022.pdfPriscilaBermello
 
MARKETING SENSORIAL -GABRIELA ARDON .pptx
MARKETING SENSORIAL -GABRIELA ARDON .pptxMARKETING SENSORIAL -GABRIELA ARDON .pptx
MARKETING SENSORIAL -GABRIELA ARDON .pptxgabyardon485
 
TIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptx
TIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptxTIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptx
TIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptxKevinHeredia14
 
gua de docente para el curso de finanzas
gua de docente para el curso de finanzasgua de docente para el curso de finanzas
gua de docente para el curso de finanzassuperamigo2014
 
AUDITORIAS en enfermeria hospitalaria .pptx
AUDITORIAS en enfermeria hospitalaria .pptxAUDITORIAS en enfermeria hospitalaria .pptx
AUDITORIAS en enfermeria hospitalaria .pptxMatiasGodoy33
 
DELITOS CONTRA LA GESTION PUBLICA PPT.pdf
DELITOS CONTRA LA GESTION PUBLICA PPT.pdfDELITOS CONTRA LA GESTION PUBLICA PPT.pdf
DELITOS CONTRA LA GESTION PUBLICA PPT.pdfJaquelinRamos6
 
Clima-laboral-estrategias-de-medicion-e-book-1.pdf
Clima-laboral-estrategias-de-medicion-e-book-1.pdfClima-laboral-estrategias-de-medicion-e-book-1.pdf
Clima-laboral-estrategias-de-medicion-e-book-1.pdfConstructiva
 
Presentación de la empresa polar, estados financieros
Presentación de la empresa polar, estados financierosPresentación de la empresa polar, estados financieros
Presentación de la empresa polar, estados financierosmadaloga01
 
Efectos del cambio climatico en huanuco.pptx
Efectos del cambio climatico en huanuco.pptxEfectos del cambio climatico en huanuco.pptx
Efectos del cambio climatico en huanuco.pptxCONSTRUCTORAEINVERSI3
 
clase de Mercados financieros - lectura importante
clase de Mercados financieros - lectura importanteclase de Mercados financieros - lectura importante
clase de Mercados financieros - lectura importanteJanettCervantes1
 
PLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docx
PLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docxPLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docx
PLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docxwilliamzaveltab
 
IDENTIDAD Y MANUAL DE MARCA PARA BRANDING
IDENTIDAD Y MANUAL DE MARCA PARA BRANDINGIDENTIDAD Y MANUAL DE MARCA PARA BRANDING
IDENTIDAD Y MANUAL DE MARCA PARA BRANDINGAndresGEscobar
 
INFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsx
INFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsxINFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsx
INFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsxCORPORACIONJURIDICA
 
Trabajo de Sifilisn…………………………………………………..
Trabajo de Sifilisn…………………………………………………..Trabajo de Sifilisn…………………………………………………..
Trabajo de Sifilisn…………………………………………………..JoseRamirez247144
 
Plan General de Contabilidad Y PYMES pdf
Plan General de Contabilidad Y PYMES pdfPlan General de Contabilidad Y PYMES pdf
Plan General de Contabilidad Y PYMES pdfdanilojaviersantiago
 
modelo de flujo maximo unidad 4 en modelos de optimización de recursos
modelo de flujo maximo unidad 4 en modelos de optimización de recursosmodelo de flujo maximo unidad 4 en modelos de optimización de recursos
modelo de flujo maximo unidad 4 en modelos de optimización de recursosk7v476sp7t
 
MARKETING SENSORIAL CONTENIDO, KARLA JANETH
MARKETING SENSORIAL CONTENIDO, KARLA JANETHMARKETING SENSORIAL CONTENIDO, KARLA JANETH
MARKETING SENSORIAL CONTENIDO, KARLA JANETHkarlinda198328
 
TEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptx
TEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptxTEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptx
TEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptxFrancoSGonzales
 
COPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESA
COPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESACOPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESA
COPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESADanielAndresBrand
 

Último (20)

exportacion y comercializacion de palta hass
exportacion y comercializacion de palta hassexportacion y comercializacion de palta hass
exportacion y comercializacion de palta hass
 
informacion-finanTFHHETHAETHciera-2022.pdf
informacion-finanTFHHETHAETHciera-2022.pdfinformacion-finanTFHHETHAETHciera-2022.pdf
informacion-finanTFHHETHAETHciera-2022.pdf
 
MARKETING SENSORIAL -GABRIELA ARDON .pptx
MARKETING SENSORIAL -GABRIELA ARDON .pptxMARKETING SENSORIAL -GABRIELA ARDON .pptx
MARKETING SENSORIAL -GABRIELA ARDON .pptx
 
TIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptx
TIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptxTIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptx
TIPOS DE PLANES administracion una perspectiva global - KOONTZ.pptx
 
gua de docente para el curso de finanzas
gua de docente para el curso de finanzasgua de docente para el curso de finanzas
gua de docente para el curso de finanzas
 
AUDITORIAS en enfermeria hospitalaria .pptx
AUDITORIAS en enfermeria hospitalaria .pptxAUDITORIAS en enfermeria hospitalaria .pptx
AUDITORIAS en enfermeria hospitalaria .pptx
 
DELITOS CONTRA LA GESTION PUBLICA PPT.pdf
DELITOS CONTRA LA GESTION PUBLICA PPT.pdfDELITOS CONTRA LA GESTION PUBLICA PPT.pdf
DELITOS CONTRA LA GESTION PUBLICA PPT.pdf
 
Clima-laboral-estrategias-de-medicion-e-book-1.pdf
Clima-laboral-estrategias-de-medicion-e-book-1.pdfClima-laboral-estrategias-de-medicion-e-book-1.pdf
Clima-laboral-estrategias-de-medicion-e-book-1.pdf
 
Presentación de la empresa polar, estados financieros
Presentación de la empresa polar, estados financierosPresentación de la empresa polar, estados financieros
Presentación de la empresa polar, estados financieros
 
Efectos del cambio climatico en huanuco.pptx
Efectos del cambio climatico en huanuco.pptxEfectos del cambio climatico en huanuco.pptx
Efectos del cambio climatico en huanuco.pptx
 
clase de Mercados financieros - lectura importante
clase de Mercados financieros - lectura importanteclase de Mercados financieros - lectura importante
clase de Mercados financieros - lectura importante
 
PLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docx
PLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docxPLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docx
PLAN LECTOR JOSÉ MARÍA ARGUEDAS (1).docx
 
IDENTIDAD Y MANUAL DE MARCA PARA BRANDING
IDENTIDAD Y MANUAL DE MARCA PARA BRANDINGIDENTIDAD Y MANUAL DE MARCA PARA BRANDING
IDENTIDAD Y MANUAL DE MARCA PARA BRANDING
 
INFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsx
INFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsxINFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsx
INFORMATIVO CIRCULAR FISCAL - RENTA 2023.ppsx
 
Trabajo de Sifilisn…………………………………………………..
Trabajo de Sifilisn…………………………………………………..Trabajo de Sifilisn…………………………………………………..
Trabajo de Sifilisn…………………………………………………..
 
Plan General de Contabilidad Y PYMES pdf
Plan General de Contabilidad Y PYMES pdfPlan General de Contabilidad Y PYMES pdf
Plan General de Contabilidad Y PYMES pdf
 
modelo de flujo maximo unidad 4 en modelos de optimización de recursos
modelo de flujo maximo unidad 4 en modelos de optimización de recursosmodelo de flujo maximo unidad 4 en modelos de optimización de recursos
modelo de flujo maximo unidad 4 en modelos de optimización de recursos
 
MARKETING SENSORIAL CONTENIDO, KARLA JANETH
MARKETING SENSORIAL CONTENIDO, KARLA JANETHMARKETING SENSORIAL CONTENIDO, KARLA JANETH
MARKETING SENSORIAL CONTENIDO, KARLA JANETH
 
TEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptx
TEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptxTEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptx
TEMA 6.- MAXIMIZACION DE LA CONDUCTA DEL PRODUCTOR.pptx
 
COPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESA
COPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESACOPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESA
COPASST Y COMITE DE CONVIVENCIA.pptx DE LA EMPRESA
 

Memoria

  • 1. MÓDULO II: PROGRAMACIÓN CONCURRENTE MEMORIA COMPARTIDA. 1.- Conceptos generales de memoria compartida. La forma más eficaz que tienen los procesos para comunicarse consiste en compartir una zona de memoria, tal que para enviar datos de un proceso a otro, sólo se ha de escribir en dicha memoria y automáticamente estos datos estarán disponibles para cualquier otro proceso. La utilización de este espacio de memoria común evita la duplicación de datos y el lento trasvase de información entre los procesos. La memoria convencional que puede direccionar un proceso a través de su espacio de direcciones virtuales es local a ese proceso y cualquier intento de direccionar esa memoria desde otro proceso va a provocar una violación de segmento. Es decir, cuando se crea uno o más procesos mediante la llamada fork(), se realiza una duplicación de todas las variables usadas, de forma que cualquier modificación de sus valores pasa inadvertida a los demás procesos, puesto que aunque el nombre es el mismo, su ubicación en memoria no lo es. Esto es debido a que con cada nuevo proceso se reserva una zona de memoria inaccesible a los demás. Las direcciones de las variables de esta zona son virtuales, y es el módulo de gestión de la memoria el que se encarga de traducirlas a direcciones físicas. Para solucionar este problema, UNIX ofrece la posibilidad de crear zonas de memoria con la característica de poder ser direccionadas por varios procesos simultáneamente. A estas zonas de memoria se les denominada segmentos de memoria compartida, y corresponden a memoria virtual, es decir; sus direcciones físicas asociadas pueden verse modificadas a lo largo de la ejecución, pero esto es transparente al programa puesto que es el módulo de gestión de la memoria el que se encarga de traducir las direcciones físicas a las direcciones virtuales generadas por los procesos. El kernel no gestiona de forma automática los segmentos de memoria compartida, por lo tanto, es necesario asociar a cada segmento o grupo de segmentos un conjunto de mecanismos de sincronización, de forma que se evite los típicos choques entre los procesos, es decir, que un proceso este modificando la información contenida en el segmento mientras que otro lee sin que se hayan actualizado todos los datos. 2.- Petición de un segmento de memoria compartida. La función shmget permite crear una zona de memoria compartida o habilitar el acceso a una ya creada. Su declaración es la siguiente: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int shmget (clave, tamaño, opción); key_t clave; /* clave del segmento de memoria compartida */ © E.G.R. 1
  • 2. int tamaño; /* tamaño del segmento de memoria compartida */ int opción; /* opción para la creación */ Si la llamada se ejecuta correctamente, la función devolverá el identificador asociado a la zona de memoria con el fin de poder utilizarla posteriormente. Si por algún motivo falla, la función devolverá el valor –1. El parámetro clave es la llave de acceso, y tiene el mismo significado que el parámetro clave en la función semget que permite crear o habilitar grupos de semáforos. El segundo parámetro, tamaño, indica el espacio en bytes de la zona de memoria compartida que se desea crear. Este espacio es fijo durante su utilización. El último parámetro es una máscara de bits que definirá los permisos de acceso a la zona de memoria y el modo de adquirir el identificador de la misma. En definitiva, su significado es similar al que se vio para la máscara opción de la citada función semget. El identificador del segmento que devuelve esta función es heredado por todos los procesos descendientes del que llama a esta función. El siguiente trozo de código muestra cómo se crea una zona de memoria de 4096 bytes, donde sólo el propietario va a tener permiso de lectura y escritura: #define LLAVE (key_t)234 /* clave de acceso */ int shmid; /* identificador del nuevo segmento de memoria compartida */ if((shmid=shmget(LLAVE, 4096, IPC_CREAT | 0600)) == -1) { /* Error al crear o habilitar el segmento de memoria compartida. Tratamiento del error. */ } 3.- Control de un segmento de memoria compartida. La función shmctl proporciona información administrativa y de control sobre el segmento de memoria compartida que se especifique. Su declaración es la sigueinte: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int shmctl (shmid, op, p_buf); int shmid; /* identificador del segmento */ int op; /* operación a efectuar */ struct shnud_ds *p_buf; /* argumento de la operación */ Esta función va a actuar sobre el segmento de memoria compartida que responde al identificador shmid (devuelto por una llamada previa a shmget). El parámetro op © E.G.R. 2
  • 3. indica el tipo de operación de control que se desea realizar, y sus posibles valores válidos son los que se especifican a continuación: Operación Efecto y valor devuelto IPC_STAT Lee la información administrativa y la almacena en la zona de memoria apuntada por p_buf. IPC_SET Modifica la información administrativa, para lo cual dicha información debe estar en p_buf. IPC_RMID Indica al kernel que borre el segmento. Esto no se llevará a cabo mientras que exista algún proceso conectado al mismo. Sin embargo, su efecto inmediato es evitar que cualquier proceso se enganche a partir de ahora al segmento. SHM_LOCK Bloquea en memoria el segmento, es decir; permanece fijo en memoria y no se va a realizar sobre él swapping. Esta operación sólo la puede efectuar el superusuario. SHM_UNLOCK Desbloquea el segmento, pudiendo los mecanismos de swapping trasladarlo de la memoria principal a la secundaria, y viceversa. Esta operación sólo la puede llevar a cabo el superusuario. La llamada a esta función devuelve el valor 0 si se ejecuta satisfactoriamente, y –1 si se ha producido algún fallo. El siguiente trozo de código muestra como se borra un segmento de memoria compartida previamente creado: int shmid; /* identificador del segmento de memoria compartida */ .... if(shmctl (shmid, IPC_RMID,0) == -1) { /* Error al eliminar el segmento de memoria compartida. Tratamiento del error. */ } 4.- Operaciones con segmentos de memoria compartida. Un proceso, antes de usar un segmento de memoria compartida, tiene que atribuirle una dirección virtual en su espacio de direcciones (mapearlo), con el fin de que dicho proceso pueda acceder a él por medio de esta dirección. Esta operación se conoce como conexión, unión o enganche de un segmento con el proceso. Una vez que el proceso deja de usar el segmento, debe de realizar la operación inversa (desconexión, desunión o desenganche), dejando de estar accesible el segmento para el proceso. Las llamadas al sistema para realizar estas operaciones son las siguientes: shmat Esta función realiza la conexión del segmento al espacio de direccionamiento del proceso. Su declaración es: char *shmat (shmid, adr, opcion); © E.G.R. 3
  • 4. int shmid; /* identificador del segmento */ char *adr; /* dirección de enlace */ int opcion; /* opción de conexión */ Shmid es el identificador del segmento, adr es la dirección virtual donde se desea que empiece el segmento (esta dirección puede ser suministrada por el programador o bien elegida por el kernel) y opcion es una máscara de bits que indica la forma de acceso al segmento de memoria. Si el bit SHM_RDONLY está activo, el segmento será accesisble para leer, pero no para escribir. Si la llamada a esta función funciona correctamente, devolverá un puntero a la dirección virtual a la que está conectado el segmento. Esta dirección puede coincidir o no con adr, dependiendo de la decisión que tome el kernel. El problema principal que se plantea es el de la elección de la dirección, puesto que, no puede entrar en conflicto con direcciones ya utilizadas, o que impida el aumento del tamaño de la zona de datos y el de la pila. Por ello, si se desea asegurar la portabilidad de la aplicación es recomendable dejar al kernel la elección de comienzo del segmento, para ello basta con pasarle un puntero NULL como segundo parámetro (valor entero 0). Si por algún motivo falla la llamada a esta función, devolverá –1. Una vez que el segmento esta únido al espacio de direcciones virtuales del proceso, el acceso a él se realiza a través de punteros, como con cualquier otra memoria dinámica de datos asignada al programa. shmdt Efectúa el desenlace del segmento previamente conectado. Su declaración es: int shmdt (adr); char *adr; /* dirección de conexión del segmento a desenlazar */ Su único parámetro adr, es la dirección virtual del segmento que se desea desconectar (devuelta por la llamada a la función shmat). Es lógico que después de ejecutarse esta función, dicha dirección se convierta en una dirección ilegal del proceso. Esto no quiere decir que su contenido se borre, simplemente que se deja de tener acceso a la memoria reservada. Si la llamada se efectua satisfactoriamente, la función devolverá el valor 0, y en caso de que se produzca algún fallo devolverá –1. El siguiente trozo de código muestra como se puede crear un segmento de memoria compartida y almacenar en él un vector de caracteres: #define LLAVE (key_t)234 #define MAX 10 int shmid, i; char *vector; .... © E.G.R. 4
  • 5. /* Creación de un segmento de memoria compartida */ if((shmid=shmget(LLAVE, MAX*sizeof(char), IPC_CREAT | 0600)) == -1) { printf(“No se ha podido crear el segmento.”); exit (-1); } else { /* Conexión del segmento al espacio de direcciones virtuales */ if(((int)vector=shmat(shmid, 0, 0)) == -1) { printf(“ Error en la conexión.“); exit(-1); } /* Manipulación del segmento de memoria compartida */ for (i=0; i<MAX; i++) vector[i]=’a’; for (i=0; i<MAX; i++) printf(“Valor almacenado %c”, vector[i]); /* Desconexión del segmento al espacio de direcciones virtuales */ if(shmdt(vector) == -1) { printf(“ Error en la desconexión.“); exit(-1); } /* Borrado del segmento de memoria compartida */ if(shmctl(shmid, IPC_RMID, 0) == -1) { printf(“ Error en el borrado del segmento.“); exit(-1); } } ... © E.G.R. 5
  • 6. /* Creación de un segmento de memoria compartida */ if((shmid=shmget(LLAVE, MAX*sizeof(char), IPC_CREAT | 0600)) == -1) { printf(“No se ha podido crear el segmento.”); exit (-1); } else { /* Conexión del segmento al espacio de direcciones virtuales */ if(((int)vector=shmat(shmid, 0, 0)) == -1) { printf(“ Error en la conexión.“); exit(-1); } /* Manipulación del segmento de memoria compartida */ for (i=0; i<MAX; i++) vector[i]=’a’; for (i=0; i<MAX; i++) printf(“Valor almacenado %c”, vector[i]); /* Desconexión del segmento al espacio de direcciones virtuales */ if(shmdt(vector) == -1) { printf(“ Error en la desconexión.“); exit(-1); } /* Borrado del segmento de memoria compartida */ if(shmctl(shmid, IPC_RMID, 0) == -1) { printf(“ Error en el borrado del segmento.“); exit(-1); } } ... © E.G.R. 5