Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 29.12.2013
Сообщений: 81

Создать двух канальную систему массового обслуживания

11.12.2016, 15:59. Показов 1442. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Задача такая: необходимо сделать двух процессорную вычислительную систему, если 1 процессор занят, то заявка переходит во 2, если заняты оба - то в очередь (буфер) до 4 заявок на каждом процессоре, соответственно, если очередь забита, то заявка покидает систему и остается не обслуженной.

Пока что не получается сделать 2 поток и как сделать буфер - в виде массива?

Вот код структуры. Как видно, пробовал разделить 600 запросов по 300 на каждый поток, но это явно неправильно....

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
TCMO get_TCMO(double lambda, double mu, int ntry)
{
    TCMO TCMO_;
    double tau1 = 1 / lambda;   // Временной интервал между запросами,  лямба = 1
    double tau2 = 1 / mu;       // Средний интервал времени для обслуживания запроса, мю = 0,5
    const int n = 600;          // Общее количество запросов на обслуживание
    const int m = 300;
    const int v = 300;
 
    // 2 процессор
    int nserv2 = 0;             //Счетчик запросов, которые были приняты для обслуживания 
    double tf2 = 0;             // Время окончания обслуживания запроса, который был принят 2 процессором
    double tserv2 = 0;        // Время обслуживания запроса 
    double tz2 = 0;             // Время для прибывающего запроса
 
    //1 процессор
    int nserv = 0;             //Счетчик запросов, которые были приняты для обслуживания 
    double tf = 0;            // Время окончания обслуживания по запросу, который был принят 1 процессором
    double tserv = 0;        // Время обслуживания запроса
    double tz;                // Время для прибывающего запроса
    tz = 0;
    
    double time[n];           //  Список времен, когда запросы прибыли
    double z;                 // Интервал времени между предыдущим и новым запросами 1 процессора
    double z2;                // Интервал времени между предыдущим и новым запросами 2 процессора
    int ntot = 0;             // счетчик общего числа запросов
    double ttot = 0;         // общее время работы процессора
    double Exp1 = exp(tau1);
    double Exp2 = exp(tau2);
 
    
        //                               цикл генерации времени для поступающих запросов  1 процессора
        for (int i = 0; i < m; i++) {
            ntot = ntot + 1;                 // Следующий запрос прибыл
            z = rand() / Exp1;                 // Генерация временного интервала между предыдущим запросом и новым запросом
            tz = tz + z;                     // Поступающие в реальном времени
            ttot = ttot + z;
            time[i] = tz;                    // Хранение времени
        }
 
        //                               цикл генерации времени для поступающих запросов  2 процессора
        for (int b = 0; b < v; b++) {
            ntot = ntot + 1;                 // Следующий запрос прибыл
            z2 = rand() / Exp1;                 // Генерация временного интервала между предыдущим запросом и новым запросом
            tz2 = tz2 + z2;                     // Поступающие в реальном времени
            ttot = ttot + z2;
            time[b] = tz2;                    // Хранение времени
        }
    
    //                               цикл для генерации времени окончания обслуживания для принятых запросов
    for (int i = 0; i < m; i++) {
        tz = time[i];                    // Время запроса
        if (tz > tf)                      // проверка: занята СМО или нет? 
        {
            z = rand() / Exp2;              //  СМО свободна: запрос принят на обслуживание, генерация временного интервала
            nserv = nserv + 1;            // +1 запрос, который принят на обслуживание
            tf = tz + z;                  // Время окончания обслуживания = время прибывающего запроса + интервал времени между запросами
            tserv = tserv + z;            // Время обслуживания = время обслуживания + интервал времени между запросами
        }
    }
 
    for (int b = 0; b < v; b++) {
        tz2 = time[b];
        if (tz2 < tf)
        {
            z2 = rand() / Exp2;
            nserv2 = nserv2 + 1;
            tf2 = tz2 + z2;
            tserv2 = tserv2 + z2;
        }
    }
 
    TCMO_.ntot = ntot;
    TCMO_.nserv = nserv;
    TCMO_.ttot = ttot;
    TCMO_.tserv = tserv;
 
    TCMO_.nserv2 = nserv2;
    TCMO_.tserv2 = tserv2;
    return TCMO_;
}
Примерно, что должно выводить:
C++
1
2
3
4
5
cout << "   количество запросов, которые были обслужены 1 процессором =  " << ttt.nserv << endl;
        cout << "   количество запросов, которые были обслужены 2 процессором =  " << ttt.nserv2 << endl;
        cout << "   общее время работы системы = " << ttt.ttot << endl;
        cout << "   время обслуживания 1 проц = " << ttt.tserv << endl;
        cout << "   время обслуживания 2 проц = " << ttt.tserv2 << endl;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2016, 15:59
Ответы с готовыми решениями:

Нужно выявить ошибку (задача на систему массового обслуживания)
Дана такая задача: Проблема в сделанном коде в том, что программа выводит уж явно неверные значения для текущего и среднего кол-ва...

Смоделировать систему массового обслуживания типа G/G/1
смоделировать систему массового обслуживания,а конкретней накопитель(определенного размера) чтобы принимал пакеты,чтобы промежуток между...

Описать функцию, моделирующую систему массового обслуживания
Помогите, пожалуйста, с решением задачи. Описать функцию, моделирующую систему массового обслуживания, имеющую на данный момент...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2016, 15:59
Помогаю со студенческими работами здесь

(Моделирование системы массового обслуживания с параллельными каналами обслуживания с повторами)
Помогите написать программу Рассмотрим систему массового обслуживания с заданным числом устройств обслуживания п= 5, действующих...

Создать библиотеку для решения различных задач по системам массового обслуживания
1)Создать библиотеку предназначенную для решения различных задач по системам массового обслуживания(стандартного вида) Простой не...

Система массового обслуживания с параллельными каналами обслуживания с повторами
Всем доброго времени суток. Прошу вашей помощи в следующей задаче (Нет, не очередной ловец халявы: я уже попытался написать код, но мой...

Сети массового обслуживания
Скажите пожалуйста, возможно ли создание с помощью Any Logic и дальнейшая имитация работы сетей массового обслуживания. Понятно, что вопрос...

Система массового обслуживания
Дана задача по системе массового обслуживания: АТС поселка обеспечивает не более 5 переговоров од*новременно. Время переговоров в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru