ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1076 / 1500
운영체제난이도 중하5분 답변 목표 · 보강본

프로세스에서 dup한 파일 디스크립터 두 개로 읽으면 파일 위치도 따로 움직이나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

파일 디스크립터 숫자와 커널의 열린 파일 상태는 다릅니다. dup이나 fork로 공유된 열린 파일 설명은 파일 offset과 일부 상태를 공유할 수 있어 독립적인 파일 열기와 구분해야 합니다.

동작 원리와 전제

한 디스크립터로 읽어 offset이 이동하면 공유한 다른 디스크립터의 다음 읽기 위치도 달라질 수 있습니다. 독립 위치가 필요하면 별도 open이나 pread 같은 offset 지정 연산을 검토합니다. 같은 경로를 open했다고 반드시 동일한 열린 상태를 공유하는 것은 아닙니다.

선택과 실패 처리

close는 해당 참조를 줄이는 것이며 다른 참조가 있으면 파일·소켓이 계속 열려 있을 수 있습니다. exec 때 자식에게 FD가 새지 않도록 close-on-exec를 사용하고 race가 없는 생성 옵션을 확인합니다.

구체적인 사례와 검증

부모가 파일을 열고 fork한 뒤 부모와 자식이 같은 열린 파일 상태를 공유하면 서로의 read가 offset을 이동시킬 수 있습니다. 각자 파일의 처음부터 독립적으로 읽으려면 별도 open이나 명시적 offset 연산을 고려합니다. 디스크립터 숫자가 프로세스마다 같거나 다르다는 사실만으로 공유 여부를 판단할 수 없습니다. 소켓 FD가 자식에게 새면 부모가 close해도 상대는 연결 종료를 바로 못 볼 수 있습니다. close-on-exec와 자식 프로세스의 FD 정리를 생성 단계에서 관리하고, 네트워크 종료 지연을 앱의 요청 처리 문제와 구분해 관찰하겠습니다.

dup·fork·close·병렬 read·offset 지정 읽기를 작은 파일로 시험합니다. 여러 writer의 append와 원자성은 파일시스템·연산 크기·프로토콜에 따라 별도 확인합니다. 사용자 공간의 정수 하나보다 커널 객체의 공유 수명을 이해하는 것이 중요합니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 파일 디스크립터 숫자와 커널의 열린 파일 상태는 다릅니다.
  • 선택 조건: close는 해당 참조를 줄이는 것이며 다른 참조가 있으면 파일·소켓이 계속 열려 있을 수 있습니다.
  • 검증 기준: dup·fork·close·병렬 read·offset 지정 읽기를 작은 파일로 시험합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • dup한 FD는 항상 독립 파일 위치와 수명을 가진다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 주소 공간 공유와 장애 격리·통신 비용을 어떤 실행 단위 선택으로 맞추나요?
  • 커널 진입과 다른 스레드로의 문맥 교환은 왜 항상 같은 사건이 아닌가요?
  • 파일 내용 flush와 이름 교체의 디렉터리 내구화는 어떤 순서로 처리하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기