인프런 커뮤니티 질문&답변

SIsB님의 프로필 이미지
SIsB

작성한 질문수

운영체제 공룡책 강의

06. 프로세스간 통신의 실제: Chapter 3. Processes (Part 4)

질문이 있습니다!

작성

·

182

0

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

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

답변 3

0

주니온님의 프로필 이미지
주니온
지식공유자

네. 맞습니다. ^^;

0

SIsB님의 프로필 이미지
SIsB
질문자

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

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

0

주니온님의 프로필 이미지
주니온
지식공유자

좋은 의문이네요.

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

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

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

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

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

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

SIsB님의 프로필 이미지
SIsB

작성한 질문수

질문하기