• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

질문이 있습니다!

21.03.01 11:20 작성 조회수 125

0

parent 가 언제나 child보다 먼저 실행된다는 보장이 없다고 전 강의에서 설명해주셨고, 이번 강의에서도 concurrency 하게 작동한다고 얘기해주셨는데요 fork 한 이후에 child process가 먼저 파이프에서 READ 하려 먼저 시도하면 원하는 결과인 parent process가 파이프에 WRITE 한 뒤에 child process 가 READ하는 과정은 보장할 수 없지 않나요?

read() 함수가 buffer에 아무것도 없다면 blocking 되는 API인가요?

답변 3

·

답변을 작성해보세요.

0

네. 맞습니다. ^^;

0

SIsB님의 프로필

SIsB

질문자

2021.03.01

답변이 이렇게 빨리 해주시다니! 감사합니당

후자로 얘기해주셨던 부분은 non-blocking io 인 경우에는 wait() 시스템 콜로 부모의 프로세스가 끝날 때까지 기다린 이후에 인터럽트를 받아서 non-blocking io를 실행하면 된다는 얘기이신거죠?

0

좋은 의문이네요.

말씀하신 상황에서 child가 read() 했을 때, buffer에 아무 것도 없다면 어떤 일이 벌어지나요?

blocking io일 경우에 buffer에 뭔가 쓰여질 때까지 계속 읽으려고 하고 있겠죠?

그 후에 parent가 write()를 하고 나면 child가 그것을 읽을 수 있으니까

파이프의 정상 동작에는 문제가 없습니다.

non-blocking io일 경우에도 wait하고 있다가 parent의 signal을 받아서 깨어나니까

파이프의 정상 동작에는 문제가 없겠지요.