Skip to content

done #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9,592 changes: 9,592 additions & 0 deletions mp-lab5/gtest/gtest-all.cc

Large diffs are not rendered by default.

20,063 changes: 20,063 additions & 0 deletions mp-lab5/gtest/gtest.h

Large diffs are not rendered by default.

46 changes: 46 additions & 0 deletions mp-lab5/include/TJobStream.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#include "TQueue.h"
#include <cstdlib>

class TJobStream
{
private:
double jobIntense;// ������������� ������ �����
size_t lastJobId;
public:
TJobStream(double JobIntens);
double GetJobIntens(void) const noexcept;
size_t GetNewJob(void);
size_t GetLastJobId(void) const noexcept;
};
TJobStream::TJobStream(double jobIntense)
{
if (jobIntense >= 0.0 && jobIntense <= 1.0)
{
this->jobIntense = jobIntense;
lastJobId = 1;
}
else
throw "Err";
}

double TJobStream::GetJobIntens(void) const noexcept
{
return jobIntense;
}

size_t TJobStream::GetNewJob(void)
{
if (static_cast<double>(std::rand()) / static_cast<double>(RAND_MAX) <= jobIntense) //����� �� [0;1)<=�������������
{
lastJobId++;
return lastJobId - 1;
}
else
return 0;
}

size_t TJobStream::GetLastJobId(void) const noexcept
{
return lastJobId;
}

84 changes: 84 additions & 0 deletions mp-lab5/include/TProc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#include "TQueue.h"
#include <cstdlib>
class TProc
{
private:
double procRate;
TQueue<size_t> jobs;
size_t jobsDone;
size_t noJobsTimes;
public:

TProc::TProc(double rate, size_t maxJobs) : jobs(maxJobs)//������������������ � ������ �������
{
if (rate >= 0.0 && rate <= 1.0)
{
procRate = rate;
jobsDone = 0;
noJobsTimes = 0;
}
else
throw "Err";
}

double TProc::GetRate(void) const noexcept//�������������
{
return procRate;
}

size_t TProc::IsProcBusy(void) const noexcept//����� �� ���������
{
if (jobs.IsEmpty())
return 0;
else
return jobs.Top();
}

bool TProc::IsProcFull(void) const noexcept//������� ���������� ���������
{
return jobs.IsFull();
}

size_t TProc::RunNewJob(size_t JobId)//������ ����� ������
{

if (JobId > 0)
{
if (!(IsProcFull()))
{
jobs.Push(JobId);
return JobId;
}
}
else
return ~0;
}

size_t TProc::DoJob(void)
{
if (!IsProcBusy())
{
noJobsTimes++;
return 0;
}
else if (static_cast<double>(std::rand()) / static_cast<double>(RAND_MAX) <= procRate && IsProcBusy())//���������� ��������� ����� �� [0;1)
{
size_t lastJob = jobs.TopPop();
jobsDone++;
return lastJob;
}
else
return jobs.Top();
}

size_t TProc::GetJobsDone(void) const noexcept
{
return jobsDone;
}

size_t TProc::GetNoJobsTimes(void) const noexcept
{
return noJobsTimes;
}
};

111 changes: 111 additions & 0 deletions mp-lab5/include/TQueue.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#pragma once

using namespace std;
template<class size_t>
class TQueue
{
protected:
size_t* data;
int size;
int start, end;
int count;
public:
TQueue(int _size = 10); //����������� ������������� � �� ���������
~TQueue() { delete[] data; size = 0; start = 0; end = 0; }; //����������
TQueue(const TQueue<size_t>& p); //����������� �����������
bool IsEmpty() const noexcept; //�������� �� �������
bool IsFull() const noexcept; //�������� �� �������
int GetCoun();
size_t Pull(); //������� �������
void Push(const size_t& a); //�������� ������� � ����
size_t Top(void) const;
void Pop(void);
size_t TopPop(void);
void Free(void) noexcept;
};
template<class size_t>
inline TQueue<size_t>::TQueue(int _size)
{
if (_size < 0) throw ("error");
size = _size;
start = 0;
count = 0;
end = 0;
data = new size_t[size];
}
template<class size_t>
inline TQueue<size_t>::TQueue(const TQueue<size_t>& p)
{
size = p.size;
start = p.start;
end = p.end;
count = p.count;
data = new size_t[size];
for (int i = 0; i < size; i++)
data[i] = p.data[i];
}
template<class size_t>
inline bool TQueue<size_t>::IsEmpty() const noexcept
{
if (count == 0)
return true;
else return false;
}
template<class size_t>
inline bool TQueue<size_t>::IsFull() const noexcept
{
if (count == size)
return true;
else return false;
}
template<class size_t>
inline int TQueue<size_t>::GetCoun()
{
return (count);
}

template<class size_t>
inline void TQueue<size_t>::Push(const size_t& a)
{
if (IsFull())
throw "Err";
data[end] = a;
end++;
end = (end < size) ? end : 0;
count++;

}

template<typename size_t>
inline size_t TQueue<size_t>::Top(void) const
{
if (IsEmpty())
throw "Err";
return data[start];
}

template<typename size_t>
inline void TQueue<size_t>::Pop(void)
{
if (IsEmpty())
throw "Err";
start++;
start = (start < size) ? start : 0;
count--;
}

template<typename size_t>
inline size_t TQueue<size_t>::TopPop(void)
{
size_t tmp = Top();
Pop();
return tmp;
}

template<typename T>
inline void TQueue<T>::Free(void) noexcept
{
end = 0;
start = 0;
count = 0;
}
39 changes: 39 additions & 0 deletions mp-lab5/samples/sample_queue_proc.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#include <iostream>
#include "TQueue.h"
#include"TProc.h"
#include"TJobStream.h"

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");

std::srand(std::time(nullptr));
const size_t tests = 3;
TProc proc[tests] = { TProc(0.5, 3), TProc(0.2, 3), TProc(0.5, 3) };//производительность и размер очереди
TJobStream stream[tests] = { TJobStream(0.5), TJobStream(0.9), TJobStream(0.2) };//интенсивность потока задач
size_t tacts[tests] = { 10, 10, 10 };
TQueue<size_t> jobsqueue(10);

for (size_t i = 0; i < tests; i++)
{
std::cout << tacts[i] << " тактов имитации , размер очереди 3, интенсивность потока задач " << stream[i].GetJobIntens() << ", производительность процессора " << proc[i].GetRate() << '.' << std::endl;
for (size_t j = 0; j < tacts[i]; j++)
{
size_t temp_job = stream[i].GetNewJob();
if (temp_job > 0)
jobsqueue.Push(temp_job);
if (!jobsqueue.IsEmpty())
if (proc[i].RunNewJob(jobsqueue.Top()))
jobsqueue.Pop();
proc[i].DoJob();
}
jobsqueue.Free();
std::cout << "Заданий создано " << stream[i].GetLastJobId() << ", заданий обработано " << proc[i].GetJobsDone() << ", количество отказов в обслуживании заданий из-за переполнения очереди " << stream[i].GetLastJobId() - proc[i].GetJobsDone() << ", тактов простоя " << proc[i].GetNoJobsTimes() << ", среднее кол - во тактов на задание. " << (static_cast<double>(tacts[i]) / static_cast<double>(proc[i].GetJobsDone())) << std::endl << std::endl;

}

return 0;
}

Binary file added mp-lab5/sln/vc10/Debug/gtest-all.obj
Binary file not shown.
20 changes: 20 additions & 0 deletions mp-lab5/sln/vc10/Debug/gtest.Build.CppClean.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.pdb
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.idb
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest-all.obj
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.lib
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\sample_queue_proc.obj
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\test_main.obj
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\test_tqueue.obj
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\mp-lab3.ilk
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\test_lab3.ilk
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\vc143.idb
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\mp-lab3.pdb
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\test_lab3.pdb
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\vc143.pdb
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.tlog\cl.command.1.tlog
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.tlog\cl.items.tlog
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.tlog\cl.read.1.tlog
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.tlog\cl.write.1.tlog
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.tlog\lib-link.read.1.tlog
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.tlog\lib-link.write.1.tlog
c:\users\sergey\desktop\mp-lab3-stack-and-queue-main\sln\vc10\debug\gtest.tlog\lib.command.1.tlog
Binary file added mp-lab5/sln/vc10/Debug/gtest.idb
Binary file not shown.
Binary file added mp-lab5/sln/vc10/Debug/gtest.lib
Binary file not shown.
7 changes: 7 additions & 0 deletions mp-lab5/sln/vc10/Debug/gtest.lib.recipe
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs />
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>
Loading