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

Система состоит из процессора P, трёх очередей F0, F1, F2 и стека S. В систему поступают запросы на выполнение

12.10.2014, 23:46. Показов 2610. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поступающие запросы ставятся в соответствующие приоритетам очереди. Сначала обрабатываются задачи из очереди F0. Если она пуста, можно обрабатывать задачи из очереди F1. Если и она пуста, то можно обрабатывать задачи из очереди F2. Если все очереди пусты, то система находится в ожидании поступающих задач (процессор свободен), либо в режиме обработки предыдущей задачи (процессор занят). Если поступает задача с более высоким приоритетом, чем обрабатываемая в данный момент, то обрабатываемая помещается в стек, если она выполнена менее чем на половину по времени, и может обрабатываться тогда и только тогда, когда все задачи с более высоким приоритетом уже обработаны.обработаны.
работает норм
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
 
 
struct Zadacha {
    string name;//имя
    int prioritet; //приоритет
    int vremya; //время выполнения
    int time; //время когда начать выполнять процесс
};
 
int add_spisok(Zadacha *task) {
    int count;
    ifstream file_in("in.txt", ios:: in );
 
    if (!file_in) {
        cerr<<"Ошибка открытия файла"<<endl;
        return 0;
    }
    //Добавляем задачи в генератор задач
    for (count = 0; !file_in.eof(); count++) {
        file_in >> task[count].name;
        file_in >> task[count].prioritet;
        file_in >> task[count].vremya;
        file_in >> task[count].time;
    }
    return count;
};
 
void sdvig(Zadacha *F, int &iF){
    //сдвигаем очередь на 1
    for (int i = 0; i < iF; i++)
        F[i] = F[i+1];
    iF--;
};
 
 
int main () {
    setlocale(LC_ALL,"rus");
    Zadacha F0[100], F1[100], F2[100], //3 очереди
            stack[100], //стек
            task[300], //генератор задач (из файла добавляются)
            CPU; //процессор для выполнения задач
    int iF0 = 0, iF1 = 0, iF2 = 0, iS = 0;
    int timer = 0, count = 0;
    bool newTask = false;
    
    //Добавляем задачи
    count = add_spisok(task);
    CPU.name = "";
 
    for (int i = 0; i < count ; timer++) {
        //генератор задач
        do {
            newTask = false;
            if (task[i].time == timer) {
                if (iF0 == 100) iF0 = 0;
                if (iF1 == 100) iF1 = 0;
                if (iF2 == 100) iF2 = 0;
                switch (task[i].prioritet) {
                    case 0: {F0[iF0] = task[i]; iF0++; break;}
                    case 1: {F1[iF1] = task[i]; iF1++; break;}
                    case 2: {F2[iF2] = task[i]; iF2++; break;}
                }
                i++; //проверим  нет ли еще задачи
                newTask = true;
            }
        } while (newTask);
        //Работа процессора
        if (CPU.name != "") {
            CPU.vremya--;
            if (CPU.vremya <= 0) {
                CPU.name = "";
                CPU.prioritet = 4;
                if (iS > 0) {
                    CPU = stack[iS-1];
                    iS--;
                }
            }
        }
        //Обработка очереди 0
        if (iF0 > 0) {
            if (CPU.name != "") {
                if (CPU.prioritet > F0[0].prioritet) { //если приоритет круче то добавить в стек
                    stack[iS] = CPU;
                    iS++;
                    CPU = F0[0];
                    sdvig(F0, iF0);
                }
            } else {
                CPU = F0[0];
                sdvig(F0, iF0);
            }
 
        }
        //Обработка очереди 1
        if (iF1 > 0) {
            if (CPU.name != "") {
                if (CPU.prioritet > F1[0].prioritet) {
                    stack[iS] = CPU;
                    iS++;
                    CPU = F1[0];
                    sdvig(F1, iF1);
                }
            } else {
                CPU = F1[0];
                sdvig(F1, iF1);
            }
        }
        //Обработка очереди 2
        if (iF2 > 0) {
            if (CPU.name != "") {
                  
                    if (CPU.prioritet > F2[0].prioritet) {
                    stack[iS] = CPU;
                    iS++;
                    CPU = F2[0];
                    sdvig(F2, iF2);
                }
            } else {
                CPU = F2[0];
                sdvig(F2, iF2);
            }
        }
 
        cout << "Timer " << setw(2) << timer << "  CPU=" << setw(1) << CPU.name;
        cout << "  \tF0=";
        for (int i = 0; i < iF0; i++) cout << F0[i].name << ",";  
        cout << "\t F1=";
        for (int i = 0; i < iF1; i++) cout << F1[i].name << ","; 
        cout << "\t F2=";
        for (int i = 0; i < iF2; i++) cout << F2[i].name << ","; 
        cout << "    \t S=";
        for (int i = 0; i < iS; i++) cout << stack[i].name << ","; 
        cout << endl;
    }
 
    system("pause");
    return 0;
}
помогите переделать под условие, что если задача выполнилась уже более чем на половину времени то она продолжает выполняться а не выкидывается в стек задачей с большим приоритетом.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2014, 23:46
Ответы с готовыми решениями:

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

Почему на сервер беспрерывно поступают get запросы?
Я еще новичок в JS да и вовсе в программировании, так что не кидайтесь камнями пожалуйста и объясните почему при таком коде на мой сервер...

Создать систему очередей
Для этого мы создали массив peopleWaiting, который отображает текущий статус очереди. const peopleWaiting = ; По логике, следующую...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2014, 23:46
Помогаю со студенческими работами здесь

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

Основная часть автомобильного государственного регистрационного номера состоит из 6 символов: трех букв и трех цифр
Напишите, пожалуйста, программу по данной задаче: Основная часть автомобильного государственного регистрационного номера состоит из 6...

На сборку поступают детали с трех автоматов (с использованием формулы Байеса)
На сборку поступают детали с трех автоматов. Первый дает в среднем 0,2 % брака, второй – 0,1 % брака, , продукция, поступающая с третьего...

Система очередей на PHP
Добрый вечер, есть задачка, которую пытаюсь понять как решить. Имеется некоторый сайт, пользователь могут запускать определенные...

Найдите среди трех (4, 5) очередей две одинаковые
Найдите среди трех (4, 5) очередей две одинаковые. Решение в программе оформляйте через подпрограммы.


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru