Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: programings в Apr 06, 2013, 16:19



Титла: Как се определят PID-тата на процесите
Публикувано от: programings в Apr 06, 2013, 16:19
Здравейте!

Интересно ми е Линукс как определя PID-тата на процесите?
На база на какви фактори?

Дали Windows го прави по същият начин?


Титла: Re: Как се определят PID-тата на процесите
Публикувано от: n00b в Apr 06, 2013, 19:19
Общо взето се бройкат нагоре.

На Виндовс обаче се бройкат през 4 (0-4-8-12-16) докато на Linux/OSX се бройкат през 1.
Когато се зацикли (т.е. мине 2^16 или unsigned int 32) почва наново, стига да не се стигне до колизия (не може да имаш 2 еднакви pid-a). При колизия се взема следващия свободен pid.


Титла: Re: Как се определят PID-тата на процесите
Публикувано от: programings в Apr 06, 2013, 19:40
Ясно.

Значи все пак не е толкова трудно да се предвиждат какви ще бъдат PID-тата на процесите, и при Linux, и при Windows.

Повдигнах темата, защото се занимавам с един алгоритъм за генериране на псевдо-произволни числа - Mersenne Twister. Та сийда на този алгоритъм се генерира като се включва като фактор и PID-то на процеса на PHP да кажем, ако се използва в PHP (функцията mt_rand).

Ако се успее да се предвиди какво ще бъде PID-то, то ще бъде по-лесно да се разбере какво ще генерира приблизително и функцията. Е, след като сме предвидили и другите фактори де.

Благодаря, много ми помогна.


Титла: Re: Как се определят PID-тата на процесите
Публикувано от: go_fire в Apr 06, 2013, 20:35
Струва ми се почти невъзможно да предвидиш индефикационният номер на процес на отдалечен сървър, различен от init ;)


Титла: Re: Как се определят PID-тата на процесите
Публикувано от: gat3way в Apr 06, 2013, 22:46
Цитат
Повдигнах темата, защото се занимавам с един алгоритъм за генериране на псевдо-произволни числа - Mersenne Twister. Та сийда на този алгоритъм се генерира като се включва като фактор и PID-то на процеса на PHP да кажем, ако се използва в PHP (функцията mt_rand).

Ако се успее да се предвиди какво ще бъде PID-то, то ще бъде по-лесно да се разбере какво ще генерира приблизително и функцията. Е, след като сме предвидили и другите фактори де.

Каква е целта на занятието? PID-а на текущият процес има ужасно ниска ентропия, на повечето линукс дистрибуции, въпреки че pid_t е typedef-нат като long, реално новия pid се AND-ва с една маска, която на практика те ограничава до 2^15 или 32 хиляди възможни PID-а. В PHP, seed-а на mt_rand() е 32-битов или 4 милиарда стойности. С други думи използваш мнооооого малка част от възможните стойности с които да seed-неш алгоритъма.

На практика, PHP също проявава престъпна простотия в името на лесното ползване - никой не е казал, че Mersenne Twister-а трябва да се seed-ва с една 32-битова стойност, seed-а на алгоритъма са първите няколко шестстотиникусур числа от една редица. В PHP за да не си измисляш толкова на брой стойности, хващат един скапан PRNG, LCG-базиран както rand(), seed-ват го с твоята стойност, генерират въпросните шестстотин и нещо стойности и с тях seed-ват mersenne twister-а.

Ако мислиш да ползваш mt_rand() за някакви security неща, примерно генериране на session cookie-та, линкове за ресетване на пароли или нещо подобно, МНОГО внимавай в картинката :) Ако разчиташ само на PID-а на процеса за seed-ване примерно, със сигурност ще имаш проблеми.


Титла: Re: Как се определят PID-тата на процесите
Публикувано от: bop_bop_mara в Apr 08, 2013, 16:23
Значи все пак не е толкова трудно да се предвиждат какви ще бъдат PID-тата на процесите, и при Linux, и при Windows.
Поне под Линукс (за Уин нищо не знам) нямаш никакъв шанс да предвидиш ядрото как ще насрочи исканията за fork или за което и да е системно прекъсване. Гейт ще каже, но аз се съмнявам дали и самите разработчици на тази част от ядрото биха могли да направят такова нещо.


Титла: Re: Как се определят PID-тата на процесите
Публикувано от: shoshon в Apr 08, 2013, 17:29
... ако за 1 мин имаш 1000 форка, всеки с време за изпълнение 1 секунда, ще имаш не повече от 15/20 различни PID-а.

Виж в AIX ще върват нагоре :)