Publicado el 14 de Enero del 2017
691 visualizaciones desde el 14 de Enero del 2017
99,1 KB
11 paginas
Creado hace 13a (05/05/2011)
UNIVERSIDAD
DE CANTABRIA
Bloque I: Principios de sistemas
operativos
Tema 1. Principios básicos de los sistemas operativos
Tema 2. Concurrencia
Tema 3. Ficheros
Tema 4. Sincronización y programación dirigida por eventos
Tema 5. Planificación y despacho
Tema 6. Sistemas de tiempo real y sistemas empotrados
Tema 7. Gestión de memoria
Tema 8. Gestión de dispositivos de entrada-salida
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
7
© Michael González, J. Javier Gutiérrez
5/ma/11
1
Notas:
UNIVERSIDAD
DE CANTABRIA
Tema 7. Gestión de memoria
• Mecanismos de gestión de la memoria
• Mecanismos de memoria virtual
• Esquemas de gestión de memoria en aplicaciones de tiempo real
• Mecanismos de memoria compartida
• Ejemplo de memoria compartida
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
2
1. Mecanismos de gestión de la
memoria
Objetivos de la gestión de memoria:
• Dar a cada proceso un espacio de direcciones propio
• Protección entre procesos
• Proporcionar mapas de memoria grandes, independientes de la
UNIVERSIDAD
DE CANTABRIA
memoria física
• Maximizar el rendimiento
• Permitir que los procesos compartan memoria
El principal mecanismo es la traducción o “mapeado” de
posiciones de memoria lógicas a posiciones de memoria físicas
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
3
Mapeado de memoria
UNIVERSIDAD
DE CANTABRIA
Espacio de Direcciones
del proceso A
Memoria
física
Espacio de direcciones
del proceso B
Montículo
Stack
Programa
y datos
globales
Montículo
Stack
Programa
y datos
globales
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
4
2. Memoria virtual
Permite mapear parte de las páginas de memoria en memoria
secundaria
• para cada acceso a memoria:
UNIVERSIDAD
DE CANTABRIA
- si el dato está en memoria física se accede directamente
- si no, se carga una página de memoria del disco, pasando en su
lugar otra página al disco, si es necesario
Esto permite ofrecer un espacio de direcciones grande
La memoria lógica es independiente de la física
Con una buena gestión se maximiza el rendimiento
• política de asignación: FIFO, LRU (last recently used),...
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
5
Algunos conceptos básicos
Página de memoria:
• granularidad de las zonas de memoria que se pueden mapear:
- el tamaño de una zona mapeada es un número entero de veces el
UNIVERSIDAD
DE CANTABRIA
-
tamaño de la página
la dirección de comienzo de un objeto de memoria suele necesitar
estar alineada con una página
Mapear en memoria:
• crear una asociación entre una zona del espacio de direcciones
de un proceso y una zona de memoria física o de un objeto de
memoria
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
6
Conceptos Básicos (cont.)
Objeto de memoria compartida
• un objeto que representa memoria y que se puede mapear
concurrentemente en el espacio de direcciones de varios
procesos
UNIVERSIDAD
DE CANTABRIA
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
7
3. Gestión de memoria en aplicaciones
de tiempo real
Alojar memoria dinámica
UNIVERSIDAD
DE CANTABRIA
#include <stdlib.h>
void * malloc(int size)
• obtiene una nueva zona de memoria de tamaño size
• retorna un puntero a esa nueva zona de memoria
Liberar memoria alojada dinámicamente
• libera la zona de memoria que comienza en addr
En la mayoría de los sistemas operativos estas operaciones tienen
un tiempo de respuesta impredecible
• en sist. de tiempo real: usarlas sólo durante la inicialización
void free (void *addr);
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
8
Bloquear la memoria virtual
Para evitar la impredecibilidad del tiempo de respuesta en
sistemas de memoria virtual, hacer residentes todas las páginas
del proceso:
UNIVERSIDAD
DE CANTABRIA
• flags indica las opciones:
#include <sys/mman.h>
int mlockall (int flags);
- MCL_CURRENT: afecta a las páginas actuales
- MCL_FUTURE: afecta a las páginas que se mapeen en el futuro
Liberar las páginas actuales del proceso:
int munlockall (void);
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
9
4. Mecanismos de memoria compartida
Los procesos tienen espacios de direcciones independientes
Un objeto de memoria compartida es una región de memoria que
se puede mapear en el espacio de direcc. de un proceso
UNIVERSIDAD
DE CANTABRIA
Espacio de Direcciones
del proceso A
Memoria
física
Espacio de direcciones
del proceso B
Mem Comp.
Mem. Comp.
Mem. Comp.
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
10
Objetos de Memoria Compartida
Abrir un objeto de memoria compartida:
UNIVERSIDAD
DE CANTABRIA
int shm_open (const char *name, int oflag,
mode_t mode);
• establece una conexión entre un objeto de memoria compartida
y un descriptor de fichero (que es el valor de retorno)
• para conseguir portabilidad, el nombre name debe tener la forma
"/nombre"; no requiere estar en el sistema de ficheros
• mode indica los permisos si el objeto se crea
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
11
UNIVERSIDAD
DE CANTABRIA
Objetos de Memoria Compartida
(cont.)
Abrir un objeto de memoria compartida (cont.):
• oflag indica las opciones:
- O_RDONLY: sólo lectura
- O_RDWR: lectura y escritura
- O_CREAT: si el objeto no existe, se crea
- O_EXCL: si el objeto ya existía, error
- O_TRUNC: si el objeto existe se trunca a tamaño 0
El tamaño del objeto de memoria se puede fijar con:
int ftruncate (int fildes, off_t length);
Borrar un objeto de memoria compartida:
int shm_unlink (const char *name);
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
12
Mapear un Objeto de Memoria
Función mmap():
UNIVERSIDAD
DE CANTABRIA
void *mmap (void *addr, size_t len, int prot,
int flags, int fildes, off_t off);
• mapea una parte del objeto de memoria representado por
fildes en el espacio de direcciones
• la parte del objeto empieza en off y tiene len bytes
• la dirección inicial en el espacio de direcciones es el valor de
retorno, y se obtiene de tres formas:
- opción MAP_FIXED: la dirección es addr ¡Peligro!
- sin opción MAP_FIXED, y addrNULL: la dirección es una función
- sin opción MAP_FIXED, y addrNULL: el sistema elige la dirección;
de addr, definida por la implementación
es la opción recomendada
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
13
UNIVERSIDAD
DE CANTABRIA
Mapear un Objeto de Memoria (cont.)
• flags especifica las opciones:
• prot especifica el tipo de acceso:
- MAP_FIXED: interpretar addr de forma exacta
- MAP_SHARED: los cambios son compartidos
- MAP_PRIVATE: los cambios son privados
- PROT_READ: se puede leer
- PROT_WRITE: se puede escribir
- PROT_EXEC: se puede ejecutar
- PROT_NONE: no se puede acceder a los datos
“Desmapear” direcciones:
int munmap (void *addr, size_t len);
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
14
5. Ejemplo de Memoria Compartida
Fichero “mapfunc.h”:
UNIVERSIDAD
DE CANTABRIA
void open_and_map (void **addr, int *fd);
void unmap_and_delete (void *addr, int fd);
Fichero “mapfunc.c”
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include "mapfunc.h"
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
15
Ejemplo de memoria compartida
(cont.)
UNIVERSIDAD
DE CANTABRIA
void open_and_map (void **addr, int *fd)
{
if ((*fd=shm_open ("/mem.int",O_RDWR|O_CREAT,
S_IRUSR|S_IWUSR)) == -1)
{
perror ("error in shm_open\n");
}
if (ftruncate(*fd,100) == -1) {
perror ("error in ftruncate\n");
}
if ((*addr=mmap(0,100,PROT_READ|PROT_WRITE,MAP_SHARED,*fd,0))
== MAP_FAILED)
{
perror ("error in mmap\n");
}
}
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
16
Ejemplo de memoria compartida
(cont.)
UNIVERSIDAD
DE CANTABRIA
void unmap_and_delete (void *addr, int fd)
{
if (munmap(addr,100)== -1) {
perror ("error in munmap\n");
}
if (close (fd) == -1) {
perror ("error in close\n");
}
if (shm_unlink("/mem.int") == -1) {
if (errno != ENOENT) {
perror("error in shm_unlink\n");
}
}
}
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
17
Ejemplo de memoria compartida
(cont.)
UNIVERSIDAD
DE CANTABRIA
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include "mapfunc.h"
int main()
{
pid_t childpid;
int *p_addr;
int p_fd;
if ((childpid=fork()) == -1) {
perror("can't fork");
exit(1);
} else if (childpid == 0) {
// child process
execlp("mem2","mem2",NULL);
printf ("mem2 not found\n");
exit (1);
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
18
Ejemplo de memoria compartida
(cont.)
UNIVERSIDAD
DE CANTABRIA
} else {
// parent process
open_and_map ((void *)&p_addr,&p_fd);
*p_addr=0;
do {
*p_addr = *p_addr+2;
} while (*p_addr % 2 == 0);
unmap_and_delete (p_addr,p_fd);
exit (0);
}
}
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Michael González, J. Javier Gutiérrez
5/ma/11
19
Ejemplo de memoria compartida
(cont.)
UNIVERSIDA
Comentarios de: Bloque I: Principios de sistemas operativos (0)
No hay comentarios