Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131

Планировщик потоков

30.08.2017, 20:42. Показов 3670. Ответов 31
Метки нет (Все метки)

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



Очередь потоков сделал.
Кликните здесь для просмотра всего текста

Pascal
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
Program Potok2;
 
type
    descriptor = record
         id, status : integer;
    end;
 
const MAX = 4;
 
 
var
        que : array [0..MAX-1]of descriptor;
        i, qnext, qindex, qlength : integer;
        ck1,ck2:Boolean;
        Thead:descriptor;
        
        
        Procedure IqueInit;
begin
qnext := 0; qindex := qnext;
qlength:=0;
end;
 
  function queadd(eque : descriptor):boolean;
  begin
    queadd := true;
    if qlength <> MAX then
      begin
       que[qnext] := eque;
       inc(qnext);
       inc(qlength);
       if qnext = MAX then qnext := 0;
      end
    else queadd := false;
  end;
 
  function quedel(eque : descriptor):boolean;
  begin
    if qlength > 0 then
     begin
       inc(qindex);
       if qindex = MAX then qindex := 0;
       dec(qlength);
       quedel := true;
     end else quedel := false;
  end;
 
 
begin
qnext := 0; qindex := qnext;
qlength := 0;
end.


Никак не могу представить как сделать и как она должна выглядит второй пункт

- отрабатываемые события: создание нового потока, завершение активного потока, завершение кванта времени у активного потока, блокирование потока, разблокирование потока

Помогите кто в теме.

Добавлено через 4 часа 7 минут
Народ не ужели никто не знает?
Подскажите в каком направление хотя бы двигать. Как должен выглядит например "Создание нового потока" на паскале, вообще не понятно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.08.2017, 20:42
Ответы с готовыми решениями:

Программа неправильно работает при запуске через Планировщик Заданий
Это тоже тема, которая могла оказаться в разделе Windows, но, мне кажется, больше она подходит суда. Есть код. При простом запуске...

Планировщик потоков
Здравствуйте. Хотел бы разобраться с понятием планировщика потоков и его функций. Уже прошелся по всем похожим вопросам на форуме и...

Область видимости общей переменной для потоков + закрытие потоков
Есть два вопроса про потоки. Первый. Как можно сделать общую переменную для основного потока и моих ? struct ThreadInfo1 { int...

31
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
31.08.2017, 08:02
Паскаль объектно-ориентированный язык, начни с нпаписания класса, потом добавляй в него задачи-методы
1
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 09:09  [ТС]
А как соотносить тем что я написал выше на паскале? Его переделывать?
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
31.08.2017, 10:28
не понимаю, что ты хотел написать и что написал...
Поток - это одно, очередь - это другое, массив - третье.
В лучшем случае часть кода войдет в описание класса, в худшем - все в топку
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 10:48  [ТС]
Тогда переписал так:
Правильно ли описан класс? Если правильно
какое тело должно быть метода Stop(Завершение потока)
правильны ли остальные методы? И как вообще описать методы "Завершение кванта времени у активного блока" или этот метод вообще не должен быть в этом классе.
И еще правильно ли у метода Unblock(Разблокирование потока) тело? Из состояния блокировки перейти в состояние ожидание.
ps Нам задали задание по теме у которого не было практики, по этому мало что понимаю что от меня хочет препод со своим заданием.
Кликните здесь для просмотра всего текста
Pascal
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
Program PotokS;
 
type stat = (runs, wait, blok);
 
   type desc = Object
            id : integer;
        status : stat;
 
   Procedure Create(pid:integer; pstatus:stat);
   Procedure Stop;
   Procedure Run;
   Procedure Block;
   Procedure Unblock;
 
   end;
 
 Procedure desc.Create(pid:integer; pstatus:stat);
 begin
 id := pid;
 status := pstatus;
 end;
 
 Procedure desc.Run;
 begin
  status := runs;
 end;
 
 Procedure desc.Stop;
 begin
 
 end;
 
 Procedure desc.Block;
 begin
  status := blok;
 end;
 
 Procedure desc.Unblock;
 begin
 status := wait;
 end;
 
begin
 
end.
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
31.08.2017, 11:29
Цитата Сообщение от EpicSR Посмотреть сообщение
type desc = Object
Так писали в турбопаскале... надеюсь не его нужно использовать? Это первое...

В современном паскале используют классы

У класса есть поля, свойства и методы-процедуры(функции)

Если проектируется менеджер, то он должен содержать коллекцию того, чем он управляет... здесь можно использовать лист или очередь. Очередь гугли по словам стек, очередь

В классе обязательно должны быть конструктор и деструктор

Обычно под потоком понимают объект класса TThread. Если это то, что надо, то посмотри его свойства и методы

Называй вещи своими именами, если не знаешь чего-то, в гугле отличный переводчик. Если метод создает поток, так и назови его, СоздатьПоток, на английском. Создать можно что угодно. "desc" ассоциируется с "описание" К чему это? Не нужно сокращать имена. Ты же не наркоман и не душевнобольной.

Обычно ID является уникальным и генерируется программно, а имя можно задавать

Внимательно продумай, какой тип, какие свойства и поведение у каждого класса объектов. А то я даже со второго раза не могу понять, что к чему.

И пиши комментарии к коду, без комментариев, тебе даже за деньги никто не станет помогать
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 12:26  [ТС]
Цитата Сообщение от vlisp Посмотреть сообщение
Так писали в турбопаскале... надеюсь не его нужно использовать? Это первое.
Да, у меня стоит турбопаскаль

Цитата Сообщение от vlisp Посмотреть сообщение
Обычно под потоком понимают объект класса TThread. Если это то, что надо, то посмотри его свойства и методы
Возможно и тут путаница. Дело в том что задание дали по предмету ОС(Операционные системы)
А в операционных системах под потоком подразумевается многозадачность. То есть потоки делят процессорное время(квант). Я думал вы после прочтения задания поняли это.

И нужно написать, внимание, написать модель планировщика потоков. И по этому написать в турбопаскале или в бейсики мне кажется разницы нет.



Вот с комментариями

Кликните здесь для просмотра всего текста
Pascal
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
Program PotokS;
 
type stat = (runs, wait, blok); // Состояние потока runs  - выполняется, wait - ожидание, block - блокирован
 
   type desc = Object           // Класс - поток (имитация потока)
            id : integer;           // id - потока
        status : stat;              // текущее состояние потока
 
   Procedure Create(pid:integer; pstatus:stat);  // Совего рода конструктор - Создание потока
   Procedure Stop;                               // Метод - Заврешение потока
   Procedure Run;                                //       - Активизация потока
   Procedure Block;                              //       - Блокировка потока
   Procedure Unblock;
 
   end;
 
 Procedure desc.Create(pid:integer; pstatus:stat);  // Описание методов
 begin
 id := pid;
 status := pstatus;
 end;
 
 Procedure desc.Run;
 begin
  status := runs;
 end;
 
 Procedure desc.Stop;
 begin
 
 end;
 
 Procedure desc.Block;
 begin
  status := blok;
 end;
 
 Procedure desc.Unblock;
 begin
 status := wait;
 end;
 
begin
 
end.


Добавлено через 8 минут
Вот нашел такую же тему, но только с другими условиям задачи.
Программная реализация простого бесприоритетного планировщика потоков
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
31.08.2017, 13:13
Цитата Сообщение от EpicSR Посмотреть сообщение
Да, у меня стоит турбопаскаль
"Мадам знает толк в извращениях..." Ты бы хоть чуток покумекал и погуглил, прежде чем голову морочить... Турбопаскаль - МЕРТВЫЙ 16разрадный компилятор для однозадачной операционной системы MS-DOS. МЕРТВОЙ ОС!!! ни о какой многопоточности тогда речи не шло... Тебе нужен free pascal Delphi или PascalABC.Net
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 13:26  [ТС]
У меня есть free paskal Lazarus, но это сути не меняет, тут нужно написать имитатор функции планировщика ОС, написать модель. Но никак не могу тронутся с места потому что один говорит что нужно так то то, другой говорит что не так.

Добавлено через 10 минут
Другими словами мне не нужно написать программу что бы она работа в несколько потоков а нужно всего лишь написать имитатор плпнировщика ОС, не ужели это не понятно исходя из задачи.
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
31.08.2017, 14:49
Цитата Сообщение от EpicSR Посмотреть сообщение
но это сути не меняет
Еще как меняет, как ты тестировать свое творение будешь? В цикле for что ли? ну, ладно, desc - это поток, а где же сам планировщик потоков?
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 14:55  [ТС]
vlisp, Я вот по этому и здесь, так как не знаю каким образом его сделать. Еще нужно очередь потоков нужно закодировать. Вроде как бы в первом посте сделал очередь из потоков сейчас нужно переделывать получается.
Мне бы толчок в правильном направление...
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
31.08.2017, 15:17
У тебя есть пример на плюсах, там реализована очередь и кстати потоки там настоящие
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 15:23  [ТС]
Я не знаю ++. Если бы даже знал в паскале по любому по другому она делается.
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,365
31.08.2017, 15:26
я тебе написал, что надо, волшебного пендаля у меня для тебя нет, увы
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
31.08.2017, 16:47
Цитата Сообщение от vlisp Посмотреть сообщение
16разрадный компилятор для однозадачной операционной системы MS-DOS. ни о какой многопоточности тогда речи не шло.
Так, да не совсем так. Параллельное выполнение делали и в те времена, например, пользуясь прерыванием таймера.
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 18:43  [ТС]
Походу никто не знает что конкретно нужно сделать, жаль.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
31.08.2017, 19:03
Цитата Сообщение от EpicSR Посмотреть сообщение
- отрабатываемые события: создание нового потока, завершение активного потока, завершение кванта времени у активного потока, блокирование потока, разблокирование потока
Решение просто, элегантно и укладывается ровно в одно слово - "никак". Чтобы решить задачу, нужен прямой доступ к механизму прерываний. Фиг вас современная ОС туда пустит. ДОС конечно пускала, но передайте своему преподавателю что ДОС сдохла еще в прошлом веке.
Нет, если очень хочется, вы можете написать собственную ОС, которая будет пускать куда надо. Но это уровень дипломной работы.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
31.08.2017, 19:15
Цитата Сообщение от Renji Посмотреть сообщение
ДОС конечно пускала, но передайте своему преподавателю что ДОС сдохла еще в прошлом веке.
От этого ни DosBox не загнется, ни куча промавтоматики не канет одномоментно в лету.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
31.08.2017, 19:29
Промавтоматика, это то что запрограммировали лет 50 тому назад и оно с тех пор пашет без всяких изменений? Нет, если хорошо поискать, конечно откопать какое-то экзотическое железо с DOS возможно. Но я сомневаюсь что топикстартер учится на специалиста по экзотическому железу.
0
10 / 4 / 3
Регистрация: 29.01.2016
Сообщений: 131
31.08.2017, 19:44  [ТС]
Ну как либо сыимировать нельзя, построив какую нибудь структуру данных? Я знаю что задание бред, по операционным системам задавать составить программу.

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

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

Разработать программу, генерирующую n потоков в пуле потоков CLR
Добрый вечер. Решил поделать старые лабораторные, которые мне уже давно нужно было сдавать, но встрял на одном задании: &quot;Разработать...

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

Синхронизация потоков на элементарном уровне (переключение потоков)
в общем разбираюсь с потоками, на сколько понял мне нужен lock Вот имеется просто пример public void RunAdd() ...

Синхронизация потоков: проблема гонки потоков
Есть проблема в синхронизации потоков, которую я не знаю, как решить. Точнее у меня получается типичная гонка потоков. Есть функция,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru