PDF de programación - Bloque I: Principios de sistemas operativos

Imágen de pdf Bloque I: Principios de sistemas operativos

Bloque I: Principios de sistemas operativosgráfica de visualizaciones

Publicado el 14 de Enero del 2017
588 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 addrNULL: la dirección es una función
- sin opción MAP_FIXED, y addrNULL: 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
  • Links de descarga
http://lwp-l.com/pdf945

Comentarios de: Bloque I: Principios de sistemas operativos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad