Лабораторна робота №5 (1)
.docxТехнічний коледж
НУ "Львівська політехніка"
Лабораторна робота №5 З ОС
Студент групи 31КІ Мартинюк Р.
Викладач
Різник О. Я.
Львів 2020
Мета: Створення алгоритму організації сторінок за використанням кванту часу з використання алгоритму переривання.
Код програми:
public class Main {
public static void main(String[] args)
{
printOrganized result = new printOrganized();
result.print_result();
}
}
public class DataBase
{
public int processNum;
public int size;
public int time;
public DataBase (int p, int s, int t)
{
this.processNum = p;
this.size = s;
this.time = t;
}
}
public class getData
{
private Scanner S = new Scanner(System.in);
private getNumber gN = new getNumber();
private getSize gS = new getSize();
private getTime gT = new getTime();
private getQuant gQ = new getQuant();
public DataBase[] array = new DataBase[4]; //структура
public int quant; //квант часу
public int length = array.length-1; //кількість сторінок пам'яті
public DataBase rez1;
void
get()
{
int count;
int i = 0;
while
(i < length)
{
array[i] = new DataBase(gN.get_(i+1), gS.get_(i+1), gT.get_(i+1));
i++;
System.out.println();
}
rez1 = new DataBase(gN.get_(i+1), gS.get_(i+1), gT.get_(i+1));
System.out.println();
quant = gQ.get_quant();
}
}
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 getSize extends getSomething
{
public int get_(int n)
{
int size;
System.out.printf("Введіть розмір сторінки %d:", n);
size = get();
return size;
}
}
public class getSomething
{
public int sth;
public int get ()
{
Scanner S = new Scanner(System.in);
if (S.hasNextInt()) sth = S.nextInt();
else
{
System.out.println("Ви ввели не число");
sth = get();
}
return sth;
}
}
public class getTime extends getSomething
{
public int get_(int n)
{
int time;
System.out.printf("Введіть час виконання сторінки %d:", n);
time = get();
return time;
}
}
public class printOrganized
{
private getData d = new getData();
public void
print_result ()
{
d.get();
int generalTime = 0;
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);
while
(generalTime > 0)
{
if
(d.array[j].time > d.quant)
{
generalTime -= d.quant;
pr_str(d.array[j].processNum, d.array[j].size, d.quant);
d.array[j].time -= d.quant;
rez2 = d.array[j];
d.array[j] = d.rez1;
d.rez1 = rez2;
rez2 = empty;
}
else
if
(d.array[j].time == d.quant)
{
generalTime -= d.quant;
pr_str(d.array[j].processNum, d.array[j].size, d.quant);
d.array[j] = empty;
}
else
if
(d.array[j].time < d.quant && d.array[j].time != 0)
{
generalTime -= d.array[j].time;
pr_str(d.array[j].processNum, d.array[j].size, d.array[j].time);
d.array[j] = empty;
}
else
if
(d.array[j] == empty && d.rez1 != empty)
{
d.array[j] = d.rez1;
d.rez1 = empty;
}
if (j == d.length-1) j = 0;
else j++;
}
}
private void
pr_str(int n, int s, int t)
{
System.out.printf("Процес №%2d | розмір сторінки - %3d Кб | час виконання - %3d\n",n,s,t);
}
}
Результат: