Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Sep 22, 2019 11:16 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 17 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Tue Aug 28, 2018 11:09 am 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
Мы знаем, что есть функция 5, которая приостанавливает выполнение программы, но главный минус, что программа не выполняется в это время. Я предлагаю реализовать 2 функции, которые будут работать как в JavaScript: setTimeOut, SetInterval. Смысл такой setTimeOut, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции.
Смысл такой setInterval, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции и все это выполняется в цикле.
ClearInterval - убивает процесс
Я это все смог реализовать на языке Си в программе для колибри, это возможно реализовать как системную функцию?


Top
   
PostPosted: Tue Aug 28, 2018 12:09 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Для начала, объясни, чем не устраивают имеющиеся фукции 5 и 23.


Top
   
PostPosted: Tue Aug 28, 2018 12:20 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
tsdima wrote:
Для начала, объясни, чем не устраивают имеющиеся фукции 5 и 23.

5 - тормозит приложение
23 - таймаут распределяется не равномерно. Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность.


Top
   
PostPosted: Tue Aug 28, 2018 1:23 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
pavelyakov wrote:
23 - таймаут распределяется не равномерно. Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность.

Для того, чтобы определить, сколько нужно ждать, есть функции текущего времени 26.9 и 26.10. Нужно вычесть текущее время из времени нужного момента. Если таких таймаутов несколько, найти минимум. Конечно, функция 23 ждёт с точностью 1/100 секунды, но на практике такой точности вполне хватает.


Top
   
PostPosted: Tue Aug 28, 2018 1:26 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
pavelyakov
Такие функции будут превращать однопоточную программу в многопоточную и программист должен это учитывать. Потому только через функцию 51.


Top
   
PostPosted: Tue Aug 28, 2018 1:28 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Многопоточность - не всегда лучший выход.


Top
   
PostPosted: Tue Aug 28, 2018 2:50 pm 
Offline

Joined: Sat Apr 22, 2017 6:11 pm
Posts: 222
Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования. По сути тебе нужно создать многопоточное приложение, где функционал отделён от обработки событий (от оболочки GUI и ввода пользователя). Такое может потребоваться при разработке того же будильника или таймера. Можно сделать и заготовку/шаблон для таких приложений (имею ввиду на разных языках: C--, FASM, Oberon и т.д.).
Но не обязательно это должен быть отдельный системный вызов. Это нужно хорошо взвесить, обсудить и переварить. ;)

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


Top
   
PostPosted: Tue Aug 28, 2018 3:12 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
theonlymirage wrote:
Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования.

Много шума из ничего. Если всё-таки использовать многозадачность, то кто мешает начинать новый поток с вызова функции 5 и зацикливать его в случае типа setInterval?


Top
   
PostPosted: Tue Aug 28, 2018 3:25 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
tsdima wrote:
theonlymirage wrote:
Думаю их лучше реализовать в стандартных библиотеках/модулях для всех языков программирования.

Много шума из ничего. Если всё-таки использовать многозадачность, то кто мешает начинать новый поток с вызова функции 5 и зацикливать его в случае типа setInterval?

мешает разрастание программы


Top
   
PostPosted: Tue Aug 28, 2018 3:28 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
Вообще можно отследить какие часто функции используются во многих программ, это например строковые ф-ции strcpy, strcmp, memcpy, и тд я видел есть даже реализации в самом ядре, почему их не выносят в прерывание? Ведь это уменьшило код почти всех программ?


Top
   
PostPosted: Tue Aug 28, 2018 4:03 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
pavelyakov wrote:
почему их не выносят в прерывание?

Ты хоть примерно представляешь, что делает процессор при выполнении инструкции int 0x40?


Top
   
PostPosted: Tue Aug 28, 2018 4:31 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
tsdima wrote:
pavelyakov wrote:
почему их не выносят в прерывание?

Ты хоть примерно представляешь, что делает процессор при выполнении инструкции int 0x40?

Я понял, тут сглупил, но все де надо что-то придумать на подобии PE dll


Top
   
PostPosted: Tue Aug 28, 2018 7:43 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
pavelyakov wrote:
надо что-то придумать на подобии PE dll

Есть библиотеки .obj в формате MS COFF.


Top
   
PostPosted: Tue Aug 28, 2018 9:28 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Я это все смог реализовать на языке Си в программе для колибри, это возможно реализовать как системную функцию?

А зачем системная функция, если уже реализуется существующими функциями API?
Если использовать фьютекс, можно сделать ожидание с прерыванием.


Top
   
PostPosted: Wed Aug 29, 2018 8:52 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
pavelyakov wrote:
Я это все смог реализовать на языке Си в программе для колибри
Ну так ты ведь и так уже реализовал. Выноси в библиотеку тогда и используй.
pavelyakov wrote:
Вообще можно отследить какие часто функции используются во многих программ, это например строковые ф-ции strcpy, strcmp, memcpy, и тд я видел есть даже реализации в самом ядре, почему их не выносят в прерывание?
facepalm В идеале всё, что может быть вынесено из ядра — лучше оттуда вынести. И не так давно были планы по выносу GUI из ядра, а у тебя всё наоборот — предлагаешь запихнуть в ядро неядерные функции.
pavelyakov wrote:
Ведь это уменьшило код почти всех программ?
Ага, а ещё быстродействие. Ты, наверное, хочешь, чтобы как в MenuetOS
Code:
151 - Mathlib

       NOTE: Volatile registers for every math function: rax,rbx and xmm0-xmm5

       Packed double

         In : rbx - 00 - cosine packed double

              xmm0 -  x

         Out: xmm0 -  cos(x)

         In : rbx - 01 - sine packed double

              xmm0 -  x

         Out: xmm0 -  sin(x)
....................................         
pavelyakov wrote:
Вот надо тебе чтобы за 10 сек, ровно 10 раз выполнилась проверка, но не получиться из-за событий или из-за циклов и прочей нагрузки, для этого нужно многопоточность.
И снова facepalm. Для этого НЕ нужно многопоточность. Вот к чему приводит нежелание думать.

Очередной велосипед.

pavelyakov wrote:
реализовать 2 функции, которые будут работать как в JavaScript: setTimeOut, SetInterval. Смысл такой setTimeOut, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции.
Смысл такой setInterval, создаем отдельный поток, в котором есть функция 5, которая после ожидания события выполняет callback переданной указателя функции и все это выполняется в цикле.
ClearInterval - убивает процесс
У тебя всё это есть уже!!! Тебе не нужно что-то ещё добавлять в ядро для этого — неужели это не доходит? Что за идиотское желание пихать всякую херь в ядро???


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 17 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited