
Есеп 7.1.8
Известно, что программа А выполняется в монопольном режиме за 10 минут, а программа В- за 20 минут, то есть при последовательном выполнении они требуют 30 мин. Если Т- время выполнения обеих этих задач в режиме мультипрограммирования, то какое из неравенств справедливо? Поясните ответ схемой.
а) Т<10; б)10<T<20; в)20<T<30; д)Т>30;
Решение:
Монопольный режим:
A B T=30мин
10мин 20 мин
2)Мультипрограммный режим:
A
10мин ∆x
B
20 мин ∆y
20+∆y=Т, отсюда т.к. 20+∆y<30,тогда 20<T<30.
Вариант б (20;30)
10.1.5 Система устраняет свободные участки памяти с помощью уплотнения. Предположим, что множество свободных участков сегментов данных распределены случайно, а время для чтения или записи 32-разрядного слова в памяти равно 10 нс. Сколько времени займет уплотнение 128 Мбайт памяти в худшем случае? Построить график времени уплотнения в зависимости от объема занятой памяти.
4 байт – 10 нс =>X=(10*10-9 128*1024*1024)/4=0,34c
128 Мбайт –Х
Есеп 10.1.1
C++ тілінде есептеуге арналған екі өзіндік программа құрастыру, мысалы 0-ден 3,14 интервалындағы y=sinx, y=cosx функцияларының мәндері үшін. Осы программалардың біреуін шақыратын басқа бір программа құру. Егер программаны орындау және одан басқа программаларды жүктеу керек болса, онда аты бар <process.h> -тағы exec... функциясы қолданылады.
тапсырмаға арналған программа листингі
#include<process.h>
#include<iostream.h>
#include<errno.h>
#include<string.h>
#include<conio.h>
int main(char*argv[])
{clrscr();
char ch;
cout<<"to zadach1 - 1"<<endl;
cout<<"to zadach2 - 2"<<endl;
cout<<"to zadach3 - 3"<<endl;
cout<<"to quit - q"<<endl;
cin>>ch;
while(ch!='q')
{switch(ch)
{case '1':execv("task1.exe",argv);
case '2':execv("task2.exe",argv);
case '3':execv("3.exe",argv);
case 'q':exit(1);
default:cout<<"net"<<endl;break;}}
//execv(@rever/exe@?argv)$
return 0; }
#include<iostream.h>
#include<math.h>
void main()
{float x,y;int i;
for(i=0;i<=20;i++)
{x=i*0.157;
y=sin(x);
cout<<x<<" "<<y<<endl;}
cout<<endl;
}
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
void main()
{float x,y; int i;
for(i=0;i<=20;i++)
{x=i*0.157;
y=cos(x);
cout<<setw(5)<<setprecision(3)<<x<<setw(8)<<setprecision(3)<<y<<endl;}
cout<<endl;
}
Биролшемди дин. Массив
Мысал 10.1 – Программаларда new және delete операторын қолдану.
#include<iostream.h>
void main()
{int *p;
p=new int; // жадыны бөлу
*p=55; // сол облысқа 55 орнату
cout<<*p<<endl; // экранға шығару
delete p;} // жадыны босату
Мысал 10.2 – Динамикалық ерекшелеген жадыны инициализациялау.
//initial memory
#include<iostream.h>
void main()
{int *p;
p=new int (345); // жадыны инициализациялау
cout<<*p<<endl;
delete p;}
Мысал 10.3 – Жадыны массивтерге ерекшелеп беру.
//dinamic memory for odnomerny massiv
#include<iostream.h>
void main()
{int *p; int i;
p=new int [10]; // массивтің 10-элементіне жады
for(i=0;i<10;i++) p[i]=10+i; // массивті толтыру
for(i=0;i<10;i++) cout<<p[i]<<" "; // массивті экранға шығару
cout<<endl;
delete []p;} // массивті жою
Динамикалық массивті құрудың бірнеше түрі бар. Ең ыңғайлылардың бірі – массивтің екі өлшемі де программаны орындау барысында берілгені.
Мысал 10.4 – Екі өлшемді динамикалық массивті құрудың бір түрі.
//dinamic memory for 2-merny massiv
#include<iostream.h>
void main()
{ int nrow, ncol, i,j;
cout<<"enter count rows and columns"<<endl;
cin>>nrow>>ncol;
int**a=new int *[nrow];
for(i=0;i<nrow;i++)
a[i]=new int[ncol];
for(i=0;i<nrow;i++)
for(j=0;j<ncol;j++)
cin>>a[i][j];
for(i=0;i<nrow;i++){
for(j=0;j<ncol;j++)
cout<<a[i][j]<<" ";
cout<<endl;} cout<<endl; }
Определим затраты времени на перемещение одного файла Тп которые складывается из времени чтние файла. Тч и времени записи Тз файла т.е. Тп=Тч+Тз. Каждая из этих составляющих в свою очеред, складывается из времени пуска нужного цилиндра tц времени задержки вращение диска Тз и вращени tч чтения файла. Последнюю составляющися можно определит зная размер файла Еф и скоростьV передачи данных при чтени записи с учетом введенных обозночений затраты времени на перемещени одного файла можно найти из выражения Тп=Тч+Тз=2(tц+tв+Еф/v)=2(5+4+ (8кБайт/8Мбайт/с))=2(9+(8*210/8*220/1000))мс=19,95мс. Определим сколько файлов Nф потребуется переместит для уплатнение половины 16гб диска Nф=0.5*Ед/Еф=0,5*16гб/8кб=2^20=1048576. Время необходимое уплатненние половины диска находим умножением диска перемещаемых файлов на время затрачиваемое на перемещение одного файла Т=Nф*Тп=1048576*19,95мс=5,81 часа
При известном времени записи слова в аппаратуру для определение времени копирования таблицы страниц нужно знать число слов в таблице. Оно должно быть равно числу виртуальных страниц в виртуальном адресном пространства Ев определяется. Следовательно Ев=2^32 байт. При заданным размере станицы Естр=8кб число виртуальных страниц Nстр=Еп/Естр=2^32/2^13=2^19. Теперь можно найти время копирования таблицы страниц в аппаратуру Ткоп=tкоп*Nстр=10*2^19нс=542880нс. Так как процесс работает в течении 100мс, то доля времени процессора, затрачиваемая на загрузку таблицы будет равна Δ=(Ткоп*Тпроц)*100%=5.24/100*100%=5.24%
ресурс
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
void main()
{clrscr(); randomize();
int z,a[10][10],n[10],q[10][10], b[10][10], c[10][10], v[10][10],i ,j,k,l,m[10];
cout<<"Kolichestvo processov= ";
cin>>k; cout<<"Kolichestvo resursov= ";cin>>l;
cout<<"1. Generator sluchainih chisel "<<endl;
cout<<"2. Ruchnoi rejim " ;
cin>>z; if(z==1){ for(i=0;i<k;i++)
{for(j=0;j<l;j++) {a[i][j]=random(10);
cout<<a[i][j]<<" "; }
cout<<endl;}
cout<<"Maksimal'nye trebovanie:" <<endl;
for(i=0;i<k;i++) {for(j=0;j<l;j++){
b[i][j]=random(15);
cout<<b[i][j]<<" ";}
cout<<endl;} cout<<"Kolichestvo dostupnih resursov: "<<endl;
for(j=0;j<l;j++) { v[0][j]=random(9);
cout<<" "<<v[0][j]; } cout<<"\n\n";}
if(z==2){ cout<<" Kolichestvo predostavlennih resursov "<<endl;
for(i=0;i<k;i++) for(j=0;j<l;j++)
cin>>a[i][j]; cout<<"Kolichestvo maksimalno trebuemih resursov "<<endl;
for(i=0;i<k;i++) for(j=0;j<l;j++)
cin>>b[i][j]; cout<<"Kolichestvo dostupnih resursov:"<<endl;
for(j=0;j<l;j++) cin>>v[0][j]; }
cout<<"Kolichestvo trebuemih resursov:"<<endl;{
c[i][j]=0; for(i=0;i<l;i++) for(j=0;j<l;j++) c[i][j]=b[i][j]-a[i][j];
for(i=0;i<k;i++) {for(j=0;j<l;j++)
cout<<c[i][j]<<" "; cout<<endl; }}
cout<<"Resultat:"<<endl;
for(i=0;i<k;i++){ m[i]=0; for(j=0;j<l;j++){ if(v[i][j]>c[i][j]) cout<<i+1<<"Process vipolniaetca ";m[i]++; }
if(m[i]==l) for(j=0;j<l;j++)
{ v[i+1][j]=a[i][j]+v[i][j]; cout<<" "<<v[i+1][j]; }else
{ cout<<i+1<<" Process ne vipolniaetca "; for(j=0;j<l;j++){ v[i+1][j]=v[i][j];}
}cout<<endl;}getch();}
Ресурс арип # include <iostream.h>
# include <conio.h>
# include <string.h>
#include<stdlib.h>
void main()
{ clrscr (); int i,j; char s[100],v[100],m,k;
for(m='A',i=0; m<='F'; m++,i++)
{ cout<<"Processi "<<m<<endl;
cout<<"Process zanimaiushi resurs: ";
cin>>s[i]; cout<<"Process hochet poluchit: "; cin>>v[i]; cout<<"\n";
} int o; for(m='A',j=0;m<='F';m++,j++)
{ o=0; for(i=0;i<3;i++) {
if(v[j]==s[i]) o++; } if(o<1)
cout<<"Process vipolniaetca!!!";
else cout<<"Process ne vipolniaetca!!!";
cout<<endl; } getch(); }
сортировка#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void main() {clrscr();
randomize();
int *x,i,j,imin,jmin,min;
x=new int [10];
cout<<"VVedite massiv"<<endl;
for(i=0;i<10;i++)
x[i]=random(100);
for (i=0;i<10;i++)
cout<<x[i]<<" ";
cout<<endl; for (i=0;i<10;i++) {
min=x[i];imin=i; for(j=i+1;j<10;j++)
if(x[j]<min){min=x[j];jmin=j; }
x[jmin]=x[i]; x[i]=min; }
cout<<"Otsortirovannyi massiv"<<endl;
for(i=0;i<10;i++) cout<<x[i]<<" ";
cout<<endl; getch(); }
Про-нышакыру #include<iostream.h>
#include<process.h>
#include<errno.h>
#include<conio.h>
#include<math.h>
int main(char*argv[])
{clrscr(); char ch;
cout<<"zada4a: pow(cos,2)+pow(sin,2) 1"<<endl;
cout<<"zada4a: sin 2"<<endl;
cout<<"zada4a: cos+sin 3"<<endl;
cout<<"to quit: q"<<endl;
cin>>ch; while(ch!='q')
{switch(ch)
{case'1':execv("1.exe",argv);
case'2':execv("2.exe",argv);
case'3':execv("3.exe",argv);
case'q':exit;
break;}} return 0;}
(5,7)массив #include<iostream.h>
#include<conio.h> #include<fstream.h>
#include<stdio.h> #include<time.h>
#include<stdlib.h>
void r(int n,int m)
{clrscr(); int d[18][18];
int i,j,l,sum=0;
cout<<" massiv:"<<endl;
for(i=0;i<n;i++){ for(j=0;j<m;j++)
d[i][j]=1+rand()%9;} for(i=0;i<n;i++){
for(j=0;j<m;j++) cout<<d[i][j]<<" ";
cout<<endl;} for(i=0;i<n;i++){
for(j=0;j<m;j++) sum=sum+d[j][i];
cout<<"sum("<<i+1<<")="<<sum<<endl; sum=0;}} void main() { r(5,7); getch();}