Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ccsponcer3 en 11 Junio 2016, 05:33 am



Título: BitMap
Publicado por: ccsponcer3 en 11 Junio 2016, 05:33 am
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!


Título: Re: BitMap con Swap
Publicado por: AlbertoBSD en 11 Junio 2016, 06:00 am
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:

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. #define MAX_SEGMENT 1024
  5.  
  6. typedef unsigned char byte;
  7.  
  8.  
  9.  
  10. int main() {
  11. byte swap_map[MAX_SEGMENT];
  12. int i;
  13. memset(swap_map,0,MAX_SEGMENT);
  14. printf("Mapa actual\n");
  15. while(i < MAX_SEGMENT){
  16. printf("%i",swap_map[i]);
  17. i++;
  18. }
  19. printf("\n");
  20. }

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:

Código
  1. int existe_espacio(int requerido) {
  2. int r = 0;
  3. if(requerido <= segmentos_libres ){
  4. r = 1;
  5. }
  6. return r;
  7. }

o
Código
  1. int existe_espacio(int requerido) {
  2. return (requerido <= segmentos_libres );
  3. }


Claro que tendrias que agregar una variable global llamada segmentos_libres

Código
  1. int segmentos_libres;

Saludos!


Título: Re: BitMap
Publicado por: ccsponcer3 en 16 Junio 2016, 21:20 pm
Muchas gracias! fue de mucha ayuda, para la proxima tendre mas en cuenta lo del asunto.
saludos!