13. b. Memory Allocation - Best Fit Allocation
13. MEMORY ALLOCATION
Aim: To develop application to illustrate memory allocation strategies.
Program:
// 2. Best Fit Allocation
#include <stdio.h>
#include<conio.h>
int Pr[10];
struct memblock
{
int size;
int alloc;
int PrIndex;
struct memblock *next;
};
struct memblock * CreateHdr()
{
struct memblock * temp = (struct memblock*)malloc(sizeof(struct memblock));
temp->size = 0;
temp->alloc = 0;
temp->PrIndex = -1;
return temp;
}
struct memblock * newNode(int s)
{
struct memblock *temp = (struct memblock*)malloc(sizeof(struct memblock));
temp->size = s;
temp->alloc = 0;
temp->PrIndex = -1;
return temp;
}
void InsertNode(struct memblock* H, struct memblock* N)
{
struct memblock* tmp = H;
while (tmp->next != NULL)
tmp = tmp->next;
tmp->next = N;
}
int Allocate(struct memblock* H, int s, int index)
{
struct memblock* tmp = H;
int newSize;
struct memblock* ptr = NULL;
while (tmp->next != NULL)
{
tmp=tmp->next;
if((tmp->alloc==0) && (s<=tmp->size))
{
ptr = tmp;
break;
}
}
while (tmp->next != NULL)
{
tmp=tmp->next;
if((tmp->alloc==0) && (s<=tmp->size) && (ptr->size>tmp->size))
{
ptr = tmp;
}
}
if(ptr!=NULL)
{
newSize = ptr->size-s;
ptr->size = s;
ptr->alloc = 1;
ptr->PrIndex = index;
if(newSize!=0)
{
struct memblock* t = newNode(newSize);
t->next = ptr->next;
ptr->next=t;
}
return 1;
}
return 0;
}
void printList(struct memblock *m)
{
printf("\nBlock size \t Process");
while (m->next != NULL)
{
m = m->next;
if(m->alloc==0)
printf("\n %d\t\tNot Allocated\n", m->size);
else
printf("\n %d\t\tAllocated to Process P%d\n", m->size,m->PrIndex);
}
}
int main()
{
int Nb, Np;
int i, j;
int blksize;
int ErrCode;
struct memblock *Hdr = CreateHdr();
printf("\nEnter Number of Memory Blocks : ");
scanf("%d",&Nb);
for(i=0;i<Nb;i++)
{
scanf("%d",&blksize);
struct memblock *Node = newNode(blksize);
InsertNode(Hdr, Node);
}
printf("\nEnter number of Process : ");
scanf("%d",&Np);
for(i=0;i<Np;i++)
{
printf("\nEnter size of Process P%d: ",i);
scanf("%d",&Pr[i]);
}
printf("\n\n*** Before Process Memory Allocation ***\n");
printList(Hdr);
printf("\n\n*** After Process Memory Allocation ***\n");
for(i = 0;i<Np;i++)
{
ErrCode = Allocate(Hdr, Pr[i], i);
if(ErrCode==0)
printf("Insufficient memory. Process P%d (%d KB) has to wait.\n", i, Pr[i]);
}
printList(Hdr);
return 0;
}
13. c. Memory Allocation - Worst Fit Allocation
13. MEMORY ALLOCATION
Aim: To develop application to illustrate memory allocation strategies.
Program:
// 3. Worst Fit Allocation
#include <stdio.h>
#include<conio.h>
int Pr[10];
struct memblock
{
int size;
int alloc;
int PrIndex;
struct memblock *next;
};
struct memblock * CreateHdr()
{
struct memblock * temp = (struct memblock*)malloc(sizeof(struct memblock));
temp->size = 0;
temp->alloc = 0;
temp->PrIndex = -1;
return temp;
}
struct memblock * newNode(int s)
{
struct memblock *temp = (struct memblock*)malloc(sizeof(struct memblock));
temp->size = s;
temp->alloc = 0;
temp->PrIndex = -1;
return temp;
}
void InsertNode(struct memblock* H, struct memblock* N)
{
struct memblock* tmp = H;
while (tmp->next != NULL)
tmp = tmp->next;
tmp->next = N;
}
int Allocate(struct memblock* H, int s, int index)
{
struct memblock* tmp = H;
int newSize;
struct memblock* ptr = NULL;
while (tmp->next != NULL)
{
tmp=tmp->next;
if((tmp->alloc==0) && (s<=tmp->size))
{
ptr = tmp;
break;
}
}
while (tmp->next != NULL)
{
tmp=tmp->next;
if((tmp->alloc==0) && (s<=tmp->size) && (ptr->size<tmp->size))
{
ptr = tmp;
}
}
if(ptr!=NULL)
{
newSize = ptr->size-s;
ptr->size = s;
ptr->alloc = 1;
ptr->PrIndex = index;
if(newSize!=0)
{
struct memblock* t = newNode(newSize);
t->next = ptr->next;
ptr->next=t;
}
return 1;
}
return 0;
}
void printList(struct memblock *m)
{
printf("\nBlock size \t Process");
while (m->next != NULL)
{
m = m->next;
if(m->alloc==0)
printf("\n %d\t\tNot Allocated\n", m->size);
else
printf("\n %d\t\tAllocated to Process P%d\n", m->size,m->PrIndex);
}
}
int main()
{
int Nb, Np;
int i, j;
int blksize;
int ErrCode;
struct memblock *Hdr = CreateHdr();
printf("\nEnter Number of Memory Blocks : ");
scanf("%d",&Nb);
for(i=0;i<Nb;i++)
{
scanf("%d",&blksize);
struct memblock *Node = newNode(blksize);
InsertNode(Hdr, Node);
}
printf("\nEnter number of Process : ");
scanf("%d",&Np);
for(i=0;i<Np;i++)
{
printf("\nEnter size of Process P%d: ",i);
scanf("%d",&Pr[i]);
}
printf("\n\n*** Before Process Memory Allocation ***\n");
printList(Hdr);
printf("\n\n*** After Process Memory Allocation ***\n");
for(i = 0;i<Np;i++)
{
ErrCode = Allocate(Hdr, Pr[i], i);
if(ErrCode==0)
printf("Insufficient memory. Process P%d (%d KB) has to wait.\n", i, Pr[i]);
}
printList(Hdr);
return 0;
}
Algorithm - Bouncing ball - pygame
Algorithm - Bouncing ball
- Start the program
- Set screen size and background color.
- Set speed of moving ball.
- Create a graphical window using set_mode()
- Set caption
- Load the ball image and create a rectangle area covering the image
- Use blit() method to copy the pixel color of the ball to the screen
- Set background color of screen and use flip() method to make all images visible.
- Move the ball in specified speed.
- If ball hits the edges of the screen reverse the direction.
- Create an infinite loop and Repeat steps 9 and 10 until user quits the program
- Stop the program
Subscribe to:
Posts (Atom)















