12.10.2014 Views

TEMA 3. GESTIÓN DE MEMORIA - Universidad de Almería

TEMA 3. GESTIÓN DE MEMORIA - Universidad de Almería

TEMA 3. GESTIÓN DE MEMORIA - Universidad de Almería

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Diseño <strong>de</strong> Sistemas Operativos<br />

Tema <strong>3.</strong> Gestión <strong>de</strong> Memoria<br />

dispositivo <strong>de</strong> swap. Un dispositivo <strong>de</strong> swap pue<strong>de</strong> ser un dispositivo en modo bloque, por ejemplo una<br />

partición en disco, o un disco normal. Previamente <strong>de</strong>be inicializarse mediante la or<strong>de</strong>n mkswap.<br />

Linux es capaz <strong>de</strong> utilizar varios dispositivos <strong>de</strong> swap. Cuando una página <strong>de</strong>be guardarse, los dispositivos <strong>de</strong><br />

swap activos se exploran para encontrar un lugar don<strong>de</strong> escribir la página. La activación <strong>de</strong> un dispositivo <strong>de</strong><br />

swap se efectúa llamando a la función <strong>de</strong> sistema swapon.<br />

Contrariamente a la mayor parte <strong>de</strong> sistemas operativos, Linux no se limita a la activación <strong>de</strong> dispositivos <strong>de</strong><br />

swap. Un dispositivo activo pue<strong>de</strong> <strong>de</strong>sactivarse, sin tener que reiniciar el sistema. Al <strong>de</strong>sactivarlo; todas las<br />

páginas guardadas en el dispositivo se vuelven a cargar en memoria. La llamada al sistema swapoff efectúa<br />

esta <strong>de</strong>sactivación.<br />

<strong>3.</strong>4.4.<strong>3.</strong> Gestión <strong>de</strong> los Dispositivos <strong>de</strong> swap<br />

La llamada al sistema swapon permite activar un dispositivo <strong>de</strong> swap. Su prototipo es el siguiente:<br />

#inclu<strong>de</strong> <br />

#inclu<strong>de</strong> <br />

int swapon(const char *pathname, int swapflags);<br />

La primitiva swapon activa el dispositivo cuyo nombre se especifica en el parámetro pathname. Éste pue<strong>de</strong><br />

ser un dispositivo en modo bloque, o un archivo regular. En los dos casos, <strong>de</strong>be haber sido inicializado por la<br />

or<strong>de</strong>n mkswap. El parámetro swapflags permite indicar la prioridad <strong>de</strong>l dispositivo. Cuando <strong>de</strong>be guardarse<br />

una página, Linux explora la lista <strong>de</strong> dispositivos <strong>de</strong> swap y utiliza el que tiene mayor prioridad y que posee<br />

páginas sin asignar. El valor <strong>de</strong> swapflags se expresa añadiendo la prioridad <strong>de</strong>seada (un entero entre 1 y<br />

32767) a la constante SWAP_FLAG_PREFER. En caso <strong>de</strong> éxito se <strong>de</strong>vuelve el valor 0. En caso <strong>de</strong> error,<br />

swapon <strong>de</strong>vuelve el valor-1 y la variable errno pue<strong>de</strong> tomar los valores <strong>de</strong> error siguientes: (1) EFAULT<br />

(pathname contiene una dirección no válida); (2) EINVAL (pathname no se refiere a un dispositivo en modo<br />

bloque ni a un archivo regular); (3) ELOOP (se ha encontrado un ciclo <strong>de</strong> enlaces simbólicos); (4)<br />

ENAMETOOLOOO (pathnarne especifica un nombre <strong>de</strong> archivo <strong>de</strong>masiado largo); (5) ENOENT<br />

(pathnarne se refiere a un nombre <strong>de</strong> archivo inexistente); (6) ENOMEM (el kernel no ha podido asignar<br />

memoria para sus <strong>de</strong>scriptores internos); (7) ENOTDIR (uno <strong>de</strong> los componentes <strong>de</strong> pathnarne, utilizado<br />

como nombre <strong>de</strong> directorio, no lo es); (8) EPERM (el proceso que llama no posee los privilegios necesarios, o<br />

el número máximo <strong>de</strong> dispositivos activos se ha alcanzado ya)<br />

La <strong>de</strong>sactivación <strong>de</strong> un dispositivo <strong>de</strong> swap se efectúa llamando a la primitiva swapoff. Su prototipo es el<br />

siguiente:<br />

#inclu<strong>de</strong> <br />

int swapoff(const char *pathname);<br />

El parámetro pathname especifica el nombre <strong>de</strong>l dispositivo <strong>de</strong> swap a <strong>de</strong>sactivar. En caso <strong>de</strong> éxito, swapoff<br />

<strong>de</strong>vuelve el valor 0; si no <strong>de</strong>vuelve el valor -1 y la variable errno pue<strong>de</strong> tomar los valores <strong>de</strong> error siguientes:<br />

(1) EFAULT (pathnarne contiene una dirección no válida); (2) EINVAL (pathnarne no se refiere a un<br />

dispositivo <strong>de</strong> swap activo); (3) ELOOP (se ha encontrado un ciclo <strong>de</strong> enlaces simbólicos); (4)<br />

ENAMETOOLOOO (pathnarne especifica un nombre <strong>de</strong> archivo <strong>de</strong>masiado largo); (5) ENOENT<br />

(pathnarne se refiere a un nombre <strong>de</strong> archivo inexistente); (6) ENOMEM (la memoria disponible es<br />

<strong>de</strong>masiado restringida para recargar todas las páginas contenidas en el dispositivo <strong>de</strong> swap); (7) ENOTDIR<br />

(uno <strong>de</strong> los componentes <strong>de</strong> pathname, utilizado como nombre <strong>de</strong> directorio, no lo es); (8) EPERM (el<br />

proceso que llama no posee los privilegios necesarios).<br />

<strong>3.</strong>4.4.4. Gestión <strong>de</strong>l swap, Perspectiva General <strong>de</strong> la Implementación<br />

<strong>3.</strong>4.4.4.1. Formato <strong>de</strong> los Dispositivos <strong>de</strong> swap<br />

Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>3.</strong>46

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!