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
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