2016-09-24 10 views
1

C 라이브러리의 함수 sched_setscheduler을 사용하여 스케줄링 정책이 SCHED_BATCH으로 설정된 하위 프로세스가 있다고 가정하면이 하위 프로세스는 다음을 사용하여 외부 프로세스를 생성합니다. execvp 시스템 호출.포크 후 exec 시스템 호출의 스케줄링 정책

생성 된 새 프로세스의 스케줄러가 이전 하위 프로세스의 스케줄러와 동일합니까? 예 : execvp 시스템 호출을 통해 상속 된 일정 계획 정책이 있습니까? 나는 FIFORR 정책이 상속된다는 멘 페이지를 읽었으나, SCHED_BATCH, SCHED_IDLE, SCHED_OTHER과 같은 일반적인 정책은 어떻게 되나요?

모든 예약 정책의 상속을 지원하는 exec 가족 기능이 있습니까?

답변

0

첫째, exec 시스템 호출 패밀리는로드하는 바이너리를 실행하지 않고 자신의 이미지를 실행하지 않습니다. man exec에 따라 : 그래서

The exec() family of functions replaces the current process image with a new process image.

, 그 특정 실행 이미지가 예약 할 준비가 얼마나 행동 것이다.

SCHED_BATCH으로 예약 된 프로세스는 SCHED_OTHER과 같은 멋진 값에 따라 예약됩니다. 일괄 작업은 사용자 상호 작용을 필요로하지 않으므로 스케줄러는 작업을 CPU를 많이 사용하는 것으로 간주합니다. man sched_setschedparam 인용 따라 SCHED_BATCH: Scheduling batch process에서 -

당신이 SCHED_BATCH에 프로세스의 스케줄링 정책을 변경하는 경우 따라서, 그것은 단지 예정 거의 모든 다른 정상 프로세스 (SCHED_OTHER, 기본 스케줄링 정책을) 좋아됩니다

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_RESET_ON_FORK 플래그와 ORED를 예약 정책과 함께 사용해야합니다. 해당 플래그를 지정하면 새로 생성 된 모든 프로세스가 부모의 동작을 복사하는 대신 기본 스케줄링 정책으로 대체됩니다.

희망이 도움이됩니다.

+0

기본적으로 내가 묻는 것은 다소 다르다. 나는 새롭게'forked' 자식 프로세스의 스케줄러를'sched_setscheduler'를 사용하여'SCHED_IDLE'로 설정하고있다. 이제 forked 자식 프로세스는'execvp' 시스템을 사용하여 새로운 프로세스를 생성한다. -call, 따라서 자식 프로세스의 이미지를 대체한다. 그래서이 새로 생성 된 프로세스는 자식 프로세스의 생성자와 동일한 스케줄러, 즉 SCHED_IDLE을 생성 할 것인가, 아니면 다를 수 있는가? – Jarvis

+0

다시,'execvp'는 새로운 프로세스를 생성하지 않고, 호출 프로세스의 이미지를 대체합니다. fork()와 exec() 사이에는 차이점이 있습니다. 'fork()'는 호출 프로세스를 복제합니다 (이것은 메모리에 새로운 공간을 생성한다는 것을 의미합니다, execvp는 그렇지 않습니다). –

+0

예, 이미지가 대체되면 이전 프로세스의 스케줄러가 새 프로세스에서 동일하게 적용됩니다. 맞습니까? – Jarvis