Міністерство освіти і науки України
Технічний коледж НУ "Львівська політехніка"
Лабораторна робота №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; } }
Результат:

