- •Курсовая работа по предмету «Архитектура Вычислительных систем»
- •Постановка задачи
- •2.Принцип особых состояний.
- •2. Формализованная схема и описание смо.
- •3. Пример временной диаграммы функционирования системы.
- •Пример технической системы, удовлетворяющей формализованному описанию.
- •Ограничения и требуемые характеристики.
- •Описание программных модулей
- •7. Результаты работы имитационной модели
- •7.1 Определение количества реализаций.
- •7.2 Анализ результатов, выводы и рекомендации по выбору конфигурации системы.
- •8. Вывод
-
Описание программных модулей
Программа содержит 5 основных модулей.
Buffer.h #include <vector> #include <stdio.h> #include <string> using namespace std; /* структура, которую хранит каждая ячейка буфера*/ struct BufferElement{ int iNumOfSource; //номер источника int iNumOfRequest; //номер заявки double fTimeAppear; //время прихода заявки }; class Buffer{ public: int iNumOfPlaces; //количество мест в буфере vector<BufferElement> buf; //элементы буфера Buffer(int); //конструктор, в который задаем количество мест void add(BufferElement); //добавление нового элемента в буффер BufferElement* remove(double);//удаление последнего элемента из буфера BufferElement* shift(double);//сдвиг элементов (возвращает заявку, которая ушла в отказ) bool hasFreeSpace();//есть ли в буфере свободное место bool empty(); //буфер пуст? string getStatistic(); //собирает статистику по буферу. void clear(); //очистка буфера }; |
Device.h #include <stdio.h> #include <string> using namespace std; class Device { public: int iNumOfServedRequests; //количество обработанных заявок int iCurrentSourceNum; //текущий номер источника int iCurrentRequestNum; //текущий номер заявки int iNumOfDevice; //номер прибора double fTimeRelease; //последнее время освобождения прибора double fTimeOfSilence; //время, в течении которого прибор не работал double fTimeOfWorking; //общее время работы прибора double fUseFactor; //коэффициент использования прибора double fRate; //интенсивность прибора double fT1; //нижняя граница времени обслуживания double fT2; //верхняя граница времени обслуживания bool bWaiting; //находится ли прибор в режине ожидания? Device(double,double,int); //конструктор void service(double*,double,int,int); //обслуживание заявки bool free(double fTime); //свободен ли прибор на данное время? string getStatistic(); //собирает статистику по приборам void clear(); //очистка прибора };
|
Source.h #include <stdio.h> #include <string> using namespace std; class Source{ public: int iTotalRequestsNum; //общее количество заявок от источника int iFailedRequestsNum; //количество отказов int iSuccessfulRequestsNum; //количество успехов int iNumOfSource; //номер источника int iNumOfWaiting; //количество заявок, проходивших через буфер int iNumOfDevices; //количество обработанных заявок
double fTimeEntrance; //время прихода крайней сгенерированной заявки double fTimeWaiting; //общее время ожидания заявок в буфере double fTimeInSystem; //общее время заявок в системе double fTimeInDevice; //общее время обслуживания заявок приборами double fRejectChance; //вероятность отказа double fLambda; //интенсивность double fRate; bool bStillInSystem; //генерирует ли еще источник заявки? Source(int,double); //конструктор void genRequest(); //генерация новой заявки void clear(); //очистка источника string getStatistic(); //сбор статистики по источнику };
|
Manager.h #include "Device.h" #include "Buffer.h" #include "Source.h" /*осуществляет выборку и постановку заявок в буфер, постановку заявок на прибор*/ class Manager{ private: vector<Device>* pDevice; //указатель на массив приборов vector<Source>* pSource; //указатель на массив источников Buffer* pBuffer; //указатель на буфер public: int iCurrentNumberOfRequests; //общее количество заявок на данный момент Manager(vector<Device> &,vector<Source> &, Buffer &,int); //конструктор /* вспомогательные методы */ Source* getSourceByEnrtanceTime(double); Device* getPriorityFreeDevice(double); Device* getDeviceByReleaseTime(double); Device* getDeviceByNum(int); Source* getSourceByNum(int); /**************************/ BufferElement getFromBuffer(double); //осуществляет выборку заявки из буфера bool freeDeviceExist(double); //есть ли свободные приборы? void putToDevice(Device*, BufferElement&, double);//ставит заявку на обслуживание прибора void setToBuffer(BufferElement&, double); //ставит заявку в буффер void printCalendar(); //вывод календаря событий void printStat(FILE* file); // вывод статистики void clear(); //очистка системы };
|
Model.h #include "Manager.h" /* Моделирование системы */ class Model{ private: Manager manager; int state1; int state2; double realTime; bool exit; bool needGenerateMore(); void makeNewRequest(int); double getEarliestEvent(); double getEarliestRequestTime(); double getEarliestDeviceReleaseTime(); double getLastDeviceReleaseTime(); void setStatistic(); BufferElement makeBufFromSrc(Source* src); public: int iNumOfSources; int iNumOfDevices; int iNumOfPlaceInBuffer; int iMinNumOfRequests; int iNumOfIterations; vector<double> fT1; vector<double> fT2; vector<double> fLambda; double fFirtsTimeEntrance; double realizationTime; double probOfRejection; double useCoef; double precision; double devRate; double srcRate; double srcTimeInSystem; bool autoMode; vector<Source> source; vector<Device> device; Buffer buffer;
Model(); void setSameParameters(int,int,int,int,double,double,double); void setParameters(int,int,int,int,vector<double>,vector<double>,vector<double>); void init(); void setDefault(); void simulate(); void destroy(); void printStatistic(FILE* file); void printAllStatistic(FILE* file); void printFinalStat(FILE* file); };
|