fork() 함수 사용시 스케쥴러에 대해...
글쓴이: kkw90111 / 작성시간: 수, 2013/04/03 - 1:29오전
fork()함수 사용시 부모가 먼저 실행될지 자식이 먼저 실행되지는 운영체제 스케쥴러에 의해 결정되는 것이라고 알고 있는데요.
그렇다면 fork 후에 부모와 자식간에 실행이 번갈아 가면서 나와야 하는데 그렇게 되지 않네요.
아주 가끔 부모와 자식의 실행순서가 바뀌긴 하는데 30번 실행해야 1번 바뀔정도로 희박합니다. 원래 대로라면 부모와 자식 엇비슷하게 먼저 실행되어야 하지 않나요?
똑같은 프로그램을 돌렸을때 왜 전과 같은 순서로 프로그램이 실행되는지 궁금합니다.
#include <stdio.h> #include <unistd.h> int main(int argc, char* argv[]) { char *name = argv[0]; int child_pid = fork(); if(child_pid == 0) { printf("[child ] child of %s is %d\n", name, child_pid); return 0; } else { printf("[parent] my child is %d\n", child_pid); return 0; } }
Forums:
...
> 부모가 먼저 실행될지 자식이 먼저 실행되지는 운영체제 스케쥴러에 의해 결정되는 것이라고 알고 있는데요.
네 맞습니다.
> 그렇다면 fork 후에 부모와 자식간에 실행이 번갈아 가면서 나와야 하는데 그렇게 되지 않네요.
...으으음.... 왜 그렇게 생각이 드셨을까요?
운영체제 스케줄러는 "부모가 먼저 시작하는 횟수와 자식이 먼저 시작하는 횟수가 공평해야 한다" 같은 건 전혀 신경쓰지 않습니다. 운영체제 맘입니다.
아니요..
아니요 제가 궁금한건 , 실행순서가 정말 무작위라면 부모가 실행될 확룰과 자식이 실행될 확률이 딱 오십대오십은 아니어도 엇비슷하게 나와야 하지않나 질문드린겁니다..
제가 올린소스로 실행을 해보면 질문에도 썼지만 열에 아홉번이상 부모가 먼저 실행된후 자식이 실행 됩니다.
정말 완전한 무작위라면 이런 상황은 조금이상한것 아닌가요? 궁금합니다..
"운영체제가 결정하기 때문에 어떤 것이 먼저 수행될지
"운영체제가 결정하기 때문에 어떤 것이 먼저 수행될지 보장할 수 없다"는 것이 "일정 확률로 내지는 무작위적으로 실행된다"를 뜻하지는 않습니다.
결국에 결론은 그냥 운영체제마음대로였다. 라고
결국에 결론은 그냥 운영체제마음대로였다.
라고 생각하면 되는건가요..
뭔가 큰비밀이있을줄 알았는데 아니었네요ㅠ
답변주신분들 모두 감사드립니다
댓글 달기