Да предположим, че имам детски процес, чиято политика на планиране съм възприела SCHED_BATCH
, използвайки функцията на библиотеката C, sched_setscheduler
, а сега този детски процес създава външен процес, използващ execvp
системно повикване.
Ще бъде ли планиращият Scheduler на новия процес същият като този на предишния детски процес, т.е. са наследени политиките за график през execvp
системно обаждане? Прочетох страницата на човека, която го казва FIFO
и RR
политиките са наследени, но какво ще кажете за нормалните политики SCHED_BATCH
, SCHED_IDLE
и SCHED_OTHER
?
Има ли exec
функция на семейството, която подкрепя наследяването на всички политики за график?
Отговори:
0 за отговор № 1На първо място, exec
семейството на системните повиквания не изпълнява неговия собствен образ, а изпълнява двоичното, което се зарежда man exec
:
The exec() family of functions replaces the current process image with a new process image.
Така че, ще се държи как е готово да се насрочи това конкретно изпълнимо изображение.
Когато процес, маркиран да бъде насрочен като SCHED_BATCH
, те ще бъдат насрочени въз основа на техните хубави ценности точно като SCHED_OTHER
, Тъй като партидните задачи не изискват взаимодействие с потребителя, планиращият обработва задачата като интензивно за процесора man sched_setschedparam
цитат от SCHED_BATCH: Scheduling batch process
-
This policy is similar to SCHED_OTHER in that it schedules the process according to its dynamic priority (based on the nice value).The difference is that this policy will cause the scheduler to always assume that the process is CPU-intensive. Consequently, the scheduler will apply a small scheduling penalty with respect to wakeup behaviour, so that this process is mildly disfavored in scheduling decisions.
Следователно, ако промените правилата за график на даден процес SCHED_BATCH
, ще бъде насрочено като почти всички други нормални процеси (SCHED_OTHER, стандартната политика за график) .Ако искате да се върнете към изцяло по подразбиране, тогава трябва да използвате SCHED_RESET_ON_FORK
флаг ORed с правилата за график. Ако посочите този флаг, всеки новосъздаден процес ще се замени с правилата за график по подразбиране, а не с поведението на родителя.
Надявам се това да помогне!