Question: Please help me Encode, compile, debug the following code related to memory management. The output should be present when running the code. Thank you! NEED

Please help me Encode, compile, debug the following code related to memory management. The output should be present when running the code. Thank you! NEED ASAP

CODE:

//#include "stdafx.h" #include #include #include #include #include

using namespace std;

struct allocList { char *startAlloc; char *endAlloc; int fk_pid; allocList *nxt; };

struct procList { int pid; int jobStatus; char *startProc; char *endProc; procList *nxt; };

bool initProc(procList *&, int*, int); bool initAlloc(allocList *&, int*, int); int cmptFragmentation(procList*, allocList*); int search(procList*, int); bool reset(procList*,allocList*);

int main(int argc, _TCHAR* argv[]) { int arrMemory[] = {100, 500, 200, 300, 600}; int arrJobs[] = {212, 17, 112, 426, 500}; allocList *ptrAllocStart = NULL; procList *ptrArrProc = NULL, *ptrProcStart = NULL; initProc(ptrProcStart, arrJobs, (sizeof(arrJobs)/sizeof(int))); initAlloc(ptrAllocStart, arrMemory, (sizeof(arrMemory)/sizeof(int))); cout << "Memory Block: " << endl << "Block\tSpace" << endl; int i; for (i=0; i < sizeof(arrMemory)/sizeof(int); i++) cout << i + 1 << "\t" << arrMemory[i] << endl; cout << " Jobs: " << endl << "Job\tSize" << endl; for (i=0; i < sizeof(arrJobs)/sizeof(int); i++) cout << i + 1 << "\t" << arrJobs[i] << endl; int fragmentation = 0; fragmentation = cmptFragmentation(ptrProcStart, ptrAllocStart); allocList *memtrav = ptrAllocStart; getch(); return 0; }

bool initProc (procList *&ptrProcStart, int* ptrArrProc, int length) { int i; procList *ptrProc = ptrProcStart; procList *newprocList; for (i=0; i < length; i++) { if(ptrProc != NULL) { ptrProc -> nxt = newprocList; ptrProc = ptrProc -> nxt; ptrProc -> startProc = (char*)malloc(*(ptrArrProc + i)); ptrProc -> endProc =ptrProc -> startProc + *(ptrArrProc + i); memset(ptrProc -> startProc, 'a' + i, *(ptrArrProc + i)); ptrProc -> jobStatus = 0; ptrProc -> pid = i; ptrProc -> nxt = NULL; } else { ptrProc = newprocList; ptrProc -> startProc = (char*)malloc(*(ptrArrProc + i)); ptrProc ->endProc = ptrProc -> startProc + *(ptrArrProc + i); memset(ptrProc -> startProc, 'a' + i, *(ptrArrProc + i)); ptrProc -> jobStatus = 0; ptrProc -> pid = i; ptrProc -> nxt = NULL; ptrProcStart = ptrProc; } } return true; }

bool initAlloc (allocList *&ptrAllocStart, int *ptrArrAlloc, int length) { int i; allocList *ptrAlloc = ptrAllocStart;

for (i=0; i < length; i++) { if(ptrAlloc != NULL) cout << " First Fit: Memory Block\tSize\tJob\tInternal "<<" Fragmentation "; int j = 0; allocList *memory = ptrAlloc; while (memory != NULL) { j++; cout << "\t" << j << "\t" << memory -> endAlloc-memory -> startAlloc << "\t" << memory -> fk_pid << "\t" << memory -> endAlloc-memory -> startAlloc + *(ptrArrAlloc + i); cout<< endl; memory = memory -> nxt; } } return 0; }

int search(procList* job, int id) { int size = 0; while (job != NULL) { if (job -> pid ==id) { size = (int)(job -> endProc-job -> startProc); break; } job =job -> nxt; } return size; }

int cmptFragmentation(procList* jobs, allocList* mem) { allocList *memtrav, *temp; procList *jobtrav; jobtrav = jobs; memtrav = mem; int freespace = 0, memsize, jobsize; int i = 0; while (memtrav -> nxt != NULL) { if(memtrav -> nxt -> fk_pid==0) { freespace += (memtrav -> nxt -> endAlloc-memtrav -> nxt -> startAlloc); temp = memtrav -> nxt; memtrav -> nxt = memtrav -> nxt -> nxt; delete temp; } memtrav = memtrav -> nxt; } if (memtrav -> fk_pid == 0) { freespace += memtrav -> endAlloc-memtrav -> startAlloc; memtrav = memtrav -> nxt; } memtrav = mem; while (memtrav != NULL) { jobsize = search (jobs, memtrav -> fk_pid-1); memsize = memtrav -> endAlloc-memtrav -> startAlloc; if (memtrav -> fk_pid != 0) { memtrav -> endAlloc = memtrav -> startAlloc + jobsize; } freespace += (memsize-jobsize); memtrav = memtrav -> nxt; } memtrav = mem; allocList *newallocList; while (memtrav != NULL) { if (memtrav -> nxt==NULL) { memtrav -> nxt = newallocList; memtrav = memtrav -> nxt; memtrav -> startAlloc = (char*)malloc(freespace); memtrav -> endAlloc = memtrav -> startAlloc + freespace; memset (memtrav -> startAlloc, 0, freespace); memtrav -> fk_pid = 0; memtrav -> nxt = NULL; break; } memtrav = memtrav -> nxt; } memtrav = mem; cout << endl << endl << "Defragmentation Memory"<<"Block\tSize\tJob\tFreeSpace "; while (memtrav != NULL) { i++; cout << "\t" << i << "\t" << memtrav -> endAlloc-memtrav -> startAlloc << "\t" << memtrav -> fk_pid << "\t" << memtrav -> endAlloc-memtrav -> startAlloc- search(jobs,memtrav -> fk_pid-1) << endl; memtrav = memtrav -> nxt; } while(jobtrav != NULL) { if (jobtrav -> jobStatus==0) { cmptFragmentation (jobs, mem); } jobtrav = jobtrav -> nxt; } return 0; }

bool reset (procList* jobs, allocList* mem) { procList* tempj = jobs; allocList* tempa = mem; while (jobs -> nxt != NULL) { jobs = jobs -> nxt; free(tempj); tempj = jobs; } free(tempj); while (mem -> nxt != NULL) { mem = mem -> nxt; free(tempa); tempa = mem; } free(tempa); return true; }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!