Cuando un Sistema Operativo tiene que administrar un area swap tiene que tener un algotimo como el que comentas.
Basicamente para facilitarse la vida el sistema lo que hace es dividir el espacio total de la swap en bloques de X cantidad de kilobytes o megabytes.
Digamos que solo tienes 1 GB de memoria swap lo divides en segmentos de 1 MB quiere decir que solo tienes 1024 segmentos, por lo cual tendrias que tener un mapa de bits de 1024 elemtos.
Si el sistema quiere almacenar un programa que necesitas 5.7 MB entonces el sistema tendra que buscar un segmento de 6 bits libres en el mapa de bis y asignárselos entonces tu funcion le indica al sistema que si tiene espacio. Para posteriomente bajar el programa a la swap.
El mapa de bits seria como:
#include<stdio.h>
#include<string.h>
#define MAX_SEGMENT 1024
typedef unsigned char byte;
int main() {
byte swap_map[MAX_SEGMENT];
int i;
memset(swap_map
,0,MAX_SEGMENT
); while(i < MAX_SEGMENT){
i++;
}
}
Aunque ahi es mapa de bytes xD pero para el ejemplo sirve igual.
Por cierto si puede cambiar el titulo a
BitMap con Swap o algo mas descriptivo estaria Genial.
La funcion para saber si existe espacio seria:
int existe_espacio(int requerido) {
int r = 0;
if(requerido <= segmentos_libres ){
r = 1;
}
return r;
}
o
int existe_espacio(int requerido) {
return (requerido <= segmentos_libres );
}
Claro que tendrias que agregar una variable global llamada segmentos_libres
int segmentos_libres;
Saludos!