INFOPedia : LSObitmap

HomePage :: Categorie :: Indice :: Ultime modifiche :: Ultimi commenti :: Login/Registrazione
La versione più recente è stata modificata il 2008-04-12 16:56:48 da IgnazioC

Aggiunzioni:




La versione più vecchia di questa pagina è stata modificata il 2008-04-12 16:55:16 da IgnazioC []
Vista della pagina:
Un "piccolo" esempio sulla gestione della memoria tramite mappa di bit.
#include <stdio.h>
#include <malloc.h>
#include <math.h>

void Inserisci(unsigned char *mapp,unsigned long mem);
void InserisciBit(unsigned char *mapp,unsigned long BIni,unsigned long BFine);
void Elimina(unsigned char *mapp,unsigned long mem);
void visualizza(unsigned char *mapp,unsigned long mem);
int controllo(unsigned char *mapp,unsigned long BIni,unsigned long BFine);

int main(int argc, char* argv[])
{
unsigned long mem;
unsigned char *mapp;
printf("dai la quantità di memoria disponibile :");
scanf("%d",&mem);
unsigned long dim=(mem/8)+1;
mapp=(unsigned char *)malloc(dim);
for(int i=0;i<=dim;i) mapp[i]=0;
char scelta[2];
do{
do{
printf("Per inserire un processo nella lista : I\nPer eliminare il processo dalla lista : E\nPer Uscire : s\nScelta:");
scanf("%s",scelta);
if( (scelta[0]!='I') && (scelta[0]!='E') && (scelta[0]!='s'))
printf("Scelta non consentita\n\n");
}while( (scelta[0]!='I') && (scelta[0]!='E') && (scelta[0]!='s'));
if(scelta[0]
'I') Inserisci(mapp,mem); if(scelta[0]
'E') Elimina(mapp,mem);
}while(scelta[0]!='s');
return 0;

}

void Inserisci(unsigned char *mapp,unsigned long mem)
{
unsigned long BIni,BFine;
unsigned long dim=(mem/8)+1;
printf("Dai il Blocco Iniziale della memoria occupata dal Processo:");scanf("%d",&BIni;);
printf("Dai il Blocco Finale della memoria occupata dal Processo:");scanf("%d",&BFine;);
if( (BFine<BIni) ||(BFine-BIni>mem) )
printf("Blocco di memoria non consentito!!!! processo non allocabile\n");
else
{ if(controllo(mapp,BIni,BFine )
0) {
InserisciBit(mapp,BIni,BFine);
visualizza(mapp,mem);
}
else
{
printf("Blocco di memoria occupato da altro processo !!!! processo non allocabile\n");
}
}

}


int controllo(unsigned char *mapp,unsigned long BIni,unsigned long BFine)
{
int inimap=BIni/8;
int bitini=7-(BIni%8);
unsigned char mask =(unsigned char)pow(2,bitini);
unsigned char ris=0;
for (int i=BIni;i<=BFine && ris 0;i) {
if( (i!=BIni)&&((i%8)
0)) {
inimap;mask=128;
}
ris=(mapp[inimap]&mask);
mask= mask
1;
if(ris!=0) return 1;

}
return 0;
}

void InserisciBit(unsigned char *mapp,unsigned long BIni,unsigned long BFine)
{int inimap=BIni/8;
int bitini=(BIni%8);
int finemap=BFine/8;
unsigned char mask=255;
mask= mask
bitini;
mapp[inimap]=mask;
for(int i=inimap+1; i<=finemap-1;i) mapp[i]=255;
int bitfine=(BFine%8);
mask=255;
mask= mask
(7-bitfine);
mapp[finemap]=mask;

}

void Elimina(unsigned char *mapp,unsigned long mem)
{

}

void visualizza(unsigned char *mapp,unsigned long mem)
{int i;
unsigned char mask;
for(i=0;i<=mem/8;i)
{for(int j=0;j<=7;j
)
{mask=(unsigned char)pow(2,(7-j));
mask = mask & mapp[i];
int ris=0;
if(mask!=0) ris=1;
printf("%d -> %d\n",(i*8)+j,ris);
}
}
}
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.1
La pagina è stata generata in 0.0477 secondi