[질문] Dispatcher를 만들고 있습니다.
sinal을 이용하려 하는데 잘 이해가 안되는 부분이 있습니다.
기본적인 실행 시퀀스를 보면
부모 프로세스(dispatcher)가 자식프로세스를 fork한 후
exec를 이용해 새 프로그램을 실행시킵니다.
일정 time quantum이 지난 후에는 현재 실행중인 프로세스는 SIGSTOP 시키고
두번째 자식프로세스를 실행시킨 후(exec)
또 일정 time quantum이 지난 후에 두번째 프로세스를 SIGSTOP 시키고
다시 처음에 실행시켰던 프로세스를 SIGCONT 해줍니다.
이런식으로 번갈아서 수행되도록 만드는 것이 목적입니다.
제가 개념이 안잡힌 부분은
가장 먼저, fork를 실행한 후의 상황입니다.
fork를 하고나서 전달된 pid를 검사하여 0보다 크면 부모프로세스이므로
부모프로세스가 처리할 일을 처리해주고
0이면 자식프로세스이므로 exec를 해주는데요.
그럼 이후에는 어떻게 진행되는 건가요?
예를들어, (슈도코드입니다.)
while(pid_num <5) //5개의 자식프로세스를 생성할때까지 while문을 돌며 fork() { pid = fork(); if(pid >0) { //부모프로세스가 할 일 } else { exec("program") //자식프로세스 프로그램 실행 //여기서부터는 실행되지 않음. } } //while문 이후 // 여기에 무엇인가를 넣게 되면 자식프로세스가 전부 종료된 후에야 실행되는건가요? // 전체적인 fork와 exec의 수행 흐름을 좀 알려주세요 ㅠ // 즉, 두번째while문 이후부터 while문을 돌면서 fork()한 후에 어떤식으로 진행되는지 이해가 잘 안됩니다.
두번째, 일정 time quantum을 따지는 부분은 부모프로세스에서 담당해야 되는건가요?
저는
부모프로세스부분에
kill(childPID,SIGCONT); sleep(1); kill(childPID,SIGSTOP);
이런식으로 구현했는데요. 자식프로세스에게 time quantum을 알려주고 알아서 그 시간후에는 stop되도록 하는 방법은 없나요?
또, 부모프로세스가 wait또는 wait_pid함수를 쓰게되면 그 부분에서 중지하게 되는데요.
예를 들어, 부모프로세스가 wait하고 대기하면서 자식프로세스를 실행시키다가 부모프로세스가 자식에게 SIGSTOP을 주고
자식프로세스가 중지되면 SIGCHLD를 부모에게 보내겠죠? 그러면 그 신호를 부모프로세스가 받아서 다시 활동을 제개하도록 하려면
어떻게 해야되나요?
제가 아직 초보라 모르는게 많습니다.
자세한 설명 부탁드릴게요.ㅠ
도움이 될만한 사이트나 서적등도 알려주시면 크나큰 도움이 될듯 합니다.
댓글 달기