BitMap

Iniciado por ccsponcer3, 11 Junio 2016, 05:33 AM

0 Miembros y 1 Visitante están viendo este tema.

ccsponcer3

Hola gente, que tal. Bueno, tengo que implementar un BitMap en C para una particion Swap(archivo que cree yo que en principio esta vacio) y lo que tengo que hacer esen principio cuando llega un "programa" responder mediante el bitMap si mi particion tiene o no espacio para alojar a dicho programa
La cuestion es que no se como programar el bitmap en si y como recorrera la particion creada para que luego yo pueda decir si puedo aceptar o no el programa que llega a swap


Espero que me puedan tirar una mano, gracias!

AlbertoBSD

#1
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);
printf("Mapa actual\n");
while(i < MAX_SEGMENT){
printf("%i",swap_map[i]);
i++;
}
printf("\n");
}


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


oint existe_espacio(int requerido) {
return (requerido <= segmentos_libres );
}



Claro que tendrias que agregar una variable global llamada segmentos_libres

int segmentos_libres;

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

ccsponcer3

Muchas gracias! fue de mucha ayuda, para la proxima tendre mas en cuenta lo del asunto.
saludos!