Page 1 of 1

А что будет если ?

Posted: Tue Jul 31, 2007 10:19 pm
by Alver
Запланировал тему для задания разных занимательных вопросов. :D

И вопрос первый: Что будет если система будет работать так долго что номерация PID/TID перескочет за 2^32 ?
A - Появится PID=0
B - Появится PID=1
C - Появится PID=2
D - Появится PID=первому не используемому идентификатору
E - Система сдохнет. :wink:

Posted: Wed Aug 01, 2007 7:31 am
by Mario79
Alver
Вопрос конечно интересный.
Делаю ставку на E.
Тотализатор открыт...

Posted: Wed Aug 01, 2007 10:03 am
by bw
Недавно в описании функций обнаружил такое:
Функция 23 - ожидать события с таймаутом.
...
Возвращаемое значение:
  • eax = 0 - очередь сообщений пуста
  • ...

Замечания:
  • ...
  • При текущей реализации произойдёт немедленный возврат из функции с eax=0, если сложение ebx с текущим значением счётчика времени вызовет 32-битное переполнение.

Т.е. ждать осталось не долго :-). Хотя, наверное, совпадение событий будет редким.

..bw

Posted: Thu Aug 16, 2007 12:31 pm
by diamond
Alver
Правильный ответ - A. Само по себе ядро идентификаторы не использует, для него потоки определяются слотами, а номер слота всегда меньше 256. TID'ы увеличиваются на 1 для каждого нового процесса/потока (да, кстати: с формальной точки зрения в Колибри нет понятия процесса, а есть только потоки), и на переполнение ядру забить.
bw
Переполнение счётчика времени наступает каждые 2^32/100 секунд, то есть немного больше 497 суток. Долго придётся ждать :) Так что через каждые 497 суток наступает интервал в ebx сотых долей секунды, когда вызов 23-й функции будет работать немного странно, хотя никаких глюков от этого не будет.

Posted: Thu Aug 16, 2007 12:49 pm
by bw
diamond, а, ну да, если не использовать bochs :-). Я что то про тысячные подумал. А почему именно сотые использутся?

..bw

Posted: Thu Aug 16, 2007 12:57 pm
by diamond
bw
Да, про bochs я забыл - там ждать придётся меньше :) 1/100 секунды - это частота тиканья таймера в Менуэт/Колибри, так что все времена выражаются в этих единицах. Ну а почему программы переключаются именно 100 раз в секунду - по мнению всех ядерщиков, начиная с Велика, это вполне нормальное число, не слишком большое, чтобы не тратить много времени на переключение задач, но и не слишком маленькое, чтобы сохранять достаточную реакцию на происходящие события.