הזיכרון מיוצג כשרשרת חוליות Node<Data>, כל חוליה מקטע (size, free). isDangerous בודקת אם היחס של הזיכרון הפנוי נמוך מ-10%. firstFit מיישמת את אלגוריתם ה-First Fit: מוצאת את המקטע הפנוי הראשון שמכיל את num, ומפצלת אותו לשני מקטעים — תפוס בגודל num, ופנוי בשארית — תוך שימוש ב-isDangerous כשומר-סף.
הזיכרון מיוצג כשרשרת חוליות Node<Data>, כל חוליה מקטע (size, free). isDangerous בודקת אם היחס של הזיכרון הפנוי נמוך מ-10%. firstFit מיישמת את אלגוריתם ה-First Fit: מוצאת את המקטע הפנוי הראשון שמכיל את num, ומפצלת אותו לשני מקטעים — תפוס בגודל num, ופנוי בשארית — תוך שימוש ב-isDangerous כשומר-סף.
public class Data{
private boolean free;
private int size;
//constructor
public Data (int size) {
this.free = true;
this.size = size;
}
public boolean isFree() { return free; }
public int getSize() { return size; }
public void setFree(boolean free) {this.free = free; }
public void setSize(int size){ this.size = size;}
}
public class Memory {
private Node<Data> start;
public Memory(int totalSize) {
this.start = new Node<Data>(new Data(totalSize));
}
}
דוגמה לזיכרון שיש בו מקטע פנוי בגודל 137, אחריו מקטע תפוס בגודל 97, ולבסוף מקטע פנוי בגודל 342. אחרי זימון firstFit(142): מקטע פנוי 137, מקטע תפוס 97, מקטע תפוס חדש 142, ומקטע פנוי חדש 200 (הפעולה מחזירה true).
לפני: start -> [true,137] -> [false,97] -> [true,342] -> null
אחרי firstFit(142): start -> [true,137] -> [false,97] -> [false,142] -> [true,200] -> null
כתבו פעולה פנימית במחלקה Memory הבודקת את מצב הזיכרון, ומחזירה true אם הוא ב"מצב מסוכן", ולא — הפעולה מחזירה false. כאשר המעבד צריך להקצות זיכרון בגודל מסוים (num), הוא יכול להשתמש באלגוריתם First Fit: האלגוריתם מחפש את מקטע הזיכרון הפנוי הראשון שיכול להכיל את num (כלומר, שגודלו לפחות num), ומקצה לו מקום בזיכרון (קובע שמקטע הזיכרון במצב תפוס). אם הזיכרון ב"מצב מסוכן" האלגוריתם אינו מבצע דבר.
public boolean isDangerous()
כתבו במחלקה Memory פעולה המממשת את האלגוריתם. כותרת הפעולה: boolean firstFit(int num). הפעולה מקבלת כפרמטר את num שהוא גודל הזיכרון הנדרש, מאתרת את המקטע הראשון הפנוי שגדול או שווה ל-num, משנה את הרשימה באמצעות הכנסת חוליה המייצגת מקטע תפוס בגודל num ומעדכנת את גודל המקטע הפנוי. הפעולה מחזירה true אם נמצא מקום כזה, ו-false אם לא נמצא מקום. אם הזיכרון נמצא ב"מצב מסוכן" הפעולה מחזירה false.
public boolean firstFit(int num)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.