RECENT POSTS

최근에 작성한 글

01 / 03

전체 글

전체 보기

[Linux] 파일 디스크립터, 표준 스트림, IPC 정리

4. 파일 디스크립터(File Descriptor)와 표준 스트림

1️⃣ 파일 디스크립터(File Descriptor)

운영체제가 프로세스가 열어둔 파일을 추적하기 위해 사용하는 정수형 식별자

🚀 파일 디스크립터 특징

1️⃣ 정수값으로 표현됨
2️⃣ 파일뿐 아니라 소켓, 파이프, 디바이스도 동일하게 사용
3️⃣ 프로세스별로 관리됨 → 각 프로세스는 독립적인 FD 테이블 보유
4️⃣ 파일을 열면 FD 할당, 닫으면 반환

2️⃣ 표준 스트림(Standard Stream)

프로세스가 생성될 때 기본적으로 열리는 3개의 파일

  • 표준 입력 (stdin)
  • 표준 출력 (stdout)
  • 표준 에러 (stderr)

이를 표준 입출력이라고 한다.

1️⃣ 표준 입력 (stdin)

  • 키보드 등으로부터 입력
  • FD 번호: 0
  • 입력 전용

2️⃣ 표준 출력 (stdout)

  • 일반 출력용
  • FD 번호: 1
  • 출력 전용

3️⃣ 표준 에러 (stderr)

  • 에러 메시지 출력
  • FD 번호: 2
  • 출력 전용

5. 포어그라운드와 백그라운드 프로세스

 

1️⃣ 포어그라운드 프로세스

사용자와 직접 상호작용
하나의 셸에서는 한 번에 하나만 실행 가능

2️⃣ 백그라운드 프로세스

사용자와 직접 상호작용하지 않음
여러 개 동시 실행 가능

🚀 ping 명령어

네트워크 연결 상태를 확인하는데 사용 → ICMP(인터넷 제어 메시지 프로토콜)의 에코 요청 패킷을 대상 호스트로 보냄 → 에코 응답을 받아 해당 호스트가 네트워크에서 접근 가능한지 확인

6. IPC (Inter-Process Communication)

IPC : 프로세스 간 통신에 사용하는 도구

1️⃣ 파이프 (Pipe)

파이프 : 두 프로세스 간 데이터를 전송할 때 사용하는 IPC

데이터를 단방향으로만 전송 가능 → 한 프로세스가 데이터를 파이프에 쓰면 다른 프로세스가 파이프에서 데이터를 읽어갈 수 있음

부모-자식 간 프로세스 통신에는 유용하지만 그 외의 경우에는 사용 어려움 : 명명된 파이프 (파이프에 파일 형식의 이름을 부여)로 부모-자식 관계가 아닌 프로세스에서도 사용 가능

2️⃣ 메시지 큐

메시지 큐 : 정해진 큐에 메시지를 넣고 빼는 방식으로 데이터를 교환 : 선입선출 방식으로 작동

여러 프로세스가 하나의 메시지 큐를 이용가능

3️⃣ 소켓(Socket)

네트워크를 통한 프로세스 간 통신


💡 TCP 소켓

연결지향

  • 먼저 3-way handshake를 통해 연결을 설정한 후 데이터 통신
  • 데이터 전송이 끝나면 4-way handshake를 통해 연결 종료

신뢰성 보장

  • 데이터가 손실되면 재전송, 순서가 어그나면 재정렬

흐름 및 혼잡 제어

  • 송신자가 수신자의 처리 속도를 고려하면서 데이터를 전송해 과부하 방지

데이터 순서 보장

  • 패킷이 네트워크를 통해 전송될 때 순서가 바뀔 수 있는데 TCP는 이를 순서대로 조립

웹 서비스, 파일 전송 등에서 사용

💡 UDP 소켓

비연결형

  • 연결을 설정하지 않고 데이터를 바로 전송

신뢰성 없음

  • 패킷이 손실되거나 순서가 바뀌어도 보장하지 않음

빠른 속도

  • 복잡한 과정이 없어 속도가 빠르고 실시간 스트리밍, 온라인 게임 등에 많이 사용

데이터 순서 미보장

  • 네트워크 상태에 따라 순서가 바뀌거나 일부 데이터가 유실될 수 있음

 

인터넷 소켓은 네트워크에서 인식할 수 있는 ID가 부여

4️⃣ 공유 메모리

데이터 자체를 공유하는 개념 → 일정 영역의 메모리를 복수 프로세스가 공유

동기화를 고려해야 데이터가 섞이지 않게 관리할 수 있음

5️⃣ 세마포어(Semaphore)

  • 컴퓨터 시스템에서 임계 영역을 보호하기 위한 수단으로 사용 → 공유 메모리에서 프로세스의 동시 접근을 제한하거나 프로세스의 순서를 조절할 때 사용
  • 단순히 정수 값만 저장 : 접근 권한이 있는지 여부를 판단