О т ч е т

advertisement
Классический приватный университет
кафедра системного анализа и программной инженерии
Отчет
по лабораторной работе № 4
дисциплины "Операционные системы"
Тема "Исследование временных характеристик программных процессов
операционной системы Windows."
Выполнил:
ст. гр. DI-112
______________ Маслий Г.П.
Принял:
_______________ Хрипко С. Г.
Запорожье
2016 г
Выполнение работы
Задание 3:
Подобрать параметр повторения цикла в режимах - "с прерыванием с консоли" и "без
прерывания". Зафиксировать в отчете эти значения и времена выполнения.
С прерыванием:
Без
пре
рыв
ани
я:
Задание 4:
Выполнить подбора параметра повторения с учетом операций ввода-вывода.
Зафиксировать в отчете это значение и время выполнения.
Без вывода:
Задание 5:
Выполнить анализ полученных результатов. Выяснить количественно на
сколько или во сколько раз операции ввода/вывода замедляют выполнение
программы.
Задание 6:
Выполните подобное сравнение (см. п.5) для случаев:
- "вычислительный" процесс не использует вызов процедуры, например
для probatime.cpp, "цикл расчета" реализован без вызова процедуры:
for(long int k=1; k<=k_out; k++)
{
for(j=0; j<k_in; j++)
{
y= exp(x); // что вычисляется....
};
};
- "цикл расчета" реализован с использованием вызова процедуры (в место
выше указанного фрагмента):
for(long int k=1; k<=k_out; k++)
{
for(j=0; j<k_in; j++)
{
y= dig(x); // что вычисляется....
};
};
Саму процедуру оформите как:
double dig(double x)
{ double x, y;
y= exp(x); // что вычисляется....
return y;
}
Цикл расчета с процедурой:
Зада
ние
7:
Выпо
лнит
е
подо
бное
сравн
ение
для
случа
ев -в
часто (многократно) вызываемой процедуре определяются ("рождаются")
локальные переменные и
- в процедуре используются статические переменны:
например:
double z(10000); - в первом случае,
и static double z(10000) - во втором.
Напомним, что динамически "получить" оперативную память для
использования в программе можно, например, по следующей "схеме":
double dig(double x)
{ double y, *ddd;
int n=10000;
ddd=(double*)malloc(n*sizeof(double));
y=exp(x);
free(ddd); // или delete [] ddd;
return y;
}
double z(10000):
static double z(10000):
Задание
8:
Исследуй
те влияния буферизованного (потокового) и не буферизованного
ввода/вывода на время выполнения программного процесса. Для этого создайте
два процесса по разному выводящие на винчестер достаточно большие файлы
разными способами.
Буферизованный (потоковый) и не буферизированный вывод в программах
может быть организован путем использования соответствующих С++
библиотечных функций.
Буферизированный вывод обычно выполняется по следующей схеме:
char *buf=new char[101];
FILE *f1;
f1=fopen("d:\\fff.txt","w+t");
if (!f1)
{ perror("d:\\fff.txt");
exit(16);
};
//**********************
sprintf(buf,"%99d\n", num_str++);
fprintf(f1,"%s",buf);
//**********************
fclose(f1);
Не буферизированный вывод обычно выполняется по следующей схеме:
char *buf=new char[101];
int handle, result;
handle=open("d:\\fff1.txt",O_RDWR|O_TRUNC|O_TEXT|O_CREAT, S_IWRITE);
if (handle == -1)
{ perror("Open d:\\fff1.txt");
exit(16);
}
//**********************
sprintf(buf,"%99d\n", num_str++);
result=write(handle, buf, strlen(buf)); // запись блоками по strlen(buf) байт.
//**********************
close (handle);
можно, конечно записывать и по одному байту //**********************
sprintf(buf,"%99d\n", num_str++);
for(int i=0; buf[i] != '\0'; i++)
{
result=write(handle, &buf[i], 1);
if ( result == -1 ) {
perror("write d:\\fff.txt");
exit (16);
};
};
Буферизированный вывод:
Не буферизированный вывод запись по 100 байт:
Не буферизированный вывод запись по 1 байту:
Нет отклика от программы.
Download