Лабораторна робота №6
.docx
Міністерство освіти і науки України
Технічний коледж НУ "Львівська політехніка"
Лабораторна робота №6 З ОС
Студент групи 31КІ Мартинюк Р.
Викладач
Різник О. Я.
Львів 2020
Мета: створення алгоритму організації сторінок за кількістю запитів до них з використання алгоритму заміщення.
Етапи розробки:
-
створення в класі «введення даних» алгоритму введення розмірів і кількості запиту процесів процесу.
-
створення в класі «організатор» алгоритму поділу процесів і їх організації в пам’яті. У алгоритмі використовується алгоритм вибору сторінки жертви і її заміщення.
-
створення в класі «виведення результату» алгоритму виведення «вмісту оперативної пам’яті».
Принцип роботи:
-
При запуску програми на екран виводиться номер поточного процесу.
-
Після цього користувачу буде доступна для введення розмір процесу. Після введення розміру, буде доступним для введення поле «кількість запитів».
-
Після введення останніх даних, програма організовує їх у пам’яті. Процес, до якого є найменша кількість запитів, заміщується сторінкою з основної пам’яті.
-
Результат виводиться у вигляді списку.
Код програми:
public class Main { public static void main(String[] args) { printOrganized res = new printOrganized(); res.print_result(); } }
public class DataBase { public int processNum; public int time; public int request; public DataBase (int p, int t, int r) { this.processNum = p; this.time = t; this.request = r; } }
public class DataBase { public int processNum; public int time; public int request; public DataBase (int p, int t, int r) { this.processNum = p; this.time = t; this.request = r; } }
public class getNumber extends getSomething { public int get_(int n) { int number; System.out.printf("Введіть номер програми %d:", n); number = get(); return number; } }
public class getQuant extends getSomething { public int get_quant() { int quant; System.out.print("\nВведіть квант часу (мс):"); quant = get(); return quant; } }
public class getRequest extends getSomething { public int get_(int n) { int request; System.out.printf("Введіть частоту запитів на квант часу №%d:", n); request = get(); return request; } }
public class getTime extends getSomething { public int get_(int n) { int time; System.out.printf("Введіть час виконання сторінки %d:", n); time = get(); return time; } }
import java.util.Scanner; public class getData { private Scanner S = new Scanner(System.in); private getNumber gN = new getNumber(); private getTime gT = new getTime(); private getQuant gQ = new getQuant(); private getRequest gR = new getRequest(); public DataBase[] array = new DataBase[3]; //структура public int quant; //квант часу public int length = array.length-1; //кількість сторінок пам'яті public int min; public DataBase rez1; void get() { int count; int i = 0; while (i <= length) { array[i] = new DataBase(gN.get_(i+1), gT.get_(i+1), gR.get_(i+1)); i++; System.out.println(); } rez1 = new DataBase(gN.get_(i+1), gT.get_(i+1), gR.get_(i+1)); System.out.println(); quant = gQ.get_quant(); } }
public class printOrganized { private getData d = new getData(); private int generalTime = 0; private int twp; public void print_result () { d.get(); for (int i = 0; i <= d.length; i++) generalTime += d.array[i].time; generalTime += d.rez1.time; int j = 0; DataBase rez2; DataBase empty = new DataBase(0,0,0); int min = d.array[0].request; int index = 0; while (generalTime > 0) { min = d.array[0].request; index = 0; for (int i = 0; i < d.length; i++) { if (d.array[i].request < min) { min = d.array[i].request; index = i; } } if (d.array[j].time != 0) { calcul_twp(j); pr_str(d.array[j].processNum, twp, d.array[j].request); calculate(j); } else if (d.rez1 != empty) { d.array[j] = d.rez1; d.rez1 = empty; } if (d.rez1 != empty) { rez2 = d.array[index]; d.array[index] = d.rez1; d.rez1 = rez2; rez2 = empty; } if (j == d.length) j = 0; else j++; } }
private void pr_str(int n, int t, int r) { System.out.printf("Процес №%2d | час виконання - %3d | кількість запитів - %3d\n",n,t,r); } private void calcul_twp(int j) { if (d.array[j].time > d.quant) twp = d.quant; else if (d.array[j].time == d.quant) twp = d.quant; else if (d.array[j].time < d.quant) twp = d.array[j].time; } private void calculate (int j) { if (d.array[j].time > d.quant) { d.array[j].time -= d.quant; generalTime -= d.quant; } else if (d.array[j].time == d.quant) { d.array[j].time = 0; generalTime -= d.quant; } else if (d.array[j].time < d.quant) { generalTime -= d.array[j].time; d.array[j].time = 0; } }
Результат: