Добавил:
інстаграм _roman.kob, курсові роботи з тєрєхова в.в. для КІ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторна робота №6

.docx
Скачиваний:
2
Добавлен:
31.05.2020
Размер:
60.09 Кб
Скачать

Міністерство освіти і науки України

Технічний коледж НУ "Львівська політехніка"

Лабораторна робота №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; } }

Результат: