public static List <memoryitem> WorstFit(process newprocess) //approved { process nprocess = newprocess; List <memoryitem> temp = memory; temp = memory.OrderByDescending(d => d.getsize()).ToList(); foreach (var item in temp) { if (item.type == "h") { if (item.size >= newprocess.size) { int startaddress = item.getstratingadd(); int size = item.getsize(); nprocess.setstarting_add(startaddress); memory.Add(nprocess); hole nhole = new hole((startaddress + nprocess.getsize()), (size - nprocess.getsize())); memory.Add(nhole); memory.Remove(item); allprocess.Add(nprocess); break; } } } concatenate(memory); return(memory); }
public static List <memoryitem> BestFit(process newprocess) { process nprocess = newprocess; List <memoryitem> temp = memory; temp = memory.OrderBy(a => a.getsize()).ToList(); foreach (var item in temp) { if (item.type == "h") { if (item.size >= newprocess.size) { //get el starting address w el size int startaddress = item.getstratingadd(); int size = item.getsize(); //add new process in pos (starting address) nprocess.setstarting_add(startaddress); memory.Add(nprocess); //add new hole in pos start address+size of process its size equals ( old hole size - new process size) hole nhole = new hole((startaddress + nprocess.getsize()), (size - nprocess.getsize())); memory.Add(nhole); //delete el hole el adema memory.Remove(item); allprocess.Add(nprocess); break; } } } concatenate(memory); return(memory); }
public static void concatenate(List <memoryitem> L) // approved { List <memoryitem> temp = L; List <memoryitem> holes = new List <memoryitem>(); hole h = new hole(); foreach (var item in temp) { if (item.type == "h") { holes.Add(item); } } holes = holes.OrderBy(add => add.getstratingadd()).ToList(); for (int i = 0; i < holes.Count - 1; i++) { int size1 = holes[i].getsize(); int size2 = holes[i + 1].getsize(); int add1 = holes[i].getstratingadd(); int add2 = holes[i + 1].getstratingadd(); if (add1 + size1 == add2) { L.Remove(holes[i]); L.Remove(holes[i + 1]); h.setsize(size1 + size2); h.setstarting_add(add1); L.Add(h); } } }
public static void blackbox(hole hole) { List <memoryitem> temp = memory.OrderBy(a => a.getstratingadd()).ToList(); memoryitem last_item; int st_add; int t_size; if (temp.Count > 0) { last_item = temp.Last(); t_size = last_item.size; st_add = last_item.getstratingadd(); if ((st_add + t_size < hole.starting_add)) { blackhole before = new blackhole(st_add + t_size, (hole.starting_add - st_add - t_size)); memory.Add(before); } } }
public static List <memoryitem> deallocate(string processname) { string name = processname; foreach (var item in memory) { if (item.type == "p" && item.getname() == name) { int size = item.getsize(); int address = item.getstratingadd(); memory.Remove(item); allprocess.Remove(item); hole nhole = new hole((address), (size)); memory.Add(nhole); break; } } concatenate(memory); return(memory); }
public static void inserthole(hole hole) { foreach (var item in memory) { if (item.type == "s") { if ((item.starting_add + item.size <= hole.getstratingadd())) { continue; } else if ((item.starting_add <= hole.getstratingadd()) && (item.starting_add + item.size > hole.getstratingadd())) { int starting_add = item.starting_add; int size_temp = item.size; blackhole before = new blackhole(starting_add, (hole.starting_add - starting_add)); blackhole after = new blackhole(hole.starting_add + hole.size, starting_add + size_temp - hole.starting_add - hole.size); memory.Remove(item); memory.Add(hole); memory.Add(before); memory.Add(after); return; } else if ((item.starting_add <= hole.getstratingadd()) && (item.starting_add + item.size < hole.getstratingadd() + hole.size)) { } } else if (item.type == "p") { if ((item.starting_add + item.size <= hole.getstratingadd())) { continue; } else if ((item.starting_add <= hole.getstratingadd()) && (item.starting_add + item.size > hole.getstratingadd())) { break; } else { break; } } else { if ((item.starting_add + item.size <= hole.getstratingadd())) { continue; } else if ((item.starting_add <= hole.getstratingadd()) && (item.starting_add + item.size >= hole.getstratingadd())) { return; } else { return; } } } blackbox(hole); memory.Add(hole); concatenate(memory); }