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)
- 컴퓨터 시스템에서 임계 영역을 보호하기 위한 수단으로 사용 → 공유 메모리에서 프로세스의 동시 접근을 제한하거나 프로세스의 순서를 조절할 때 사용
- 단순히 정수 값만 저장 : 접근 권한이 있는지 여부를 판단
'개발 공부 > Linux' 카테고리의 다른 글
| [Linux] Bash: 조건문과 테스트 연산자(1) (0) | 2026.03.01 |
|---|---|
| [Linux] 시그널 (0) | 2026.03.01 |
| [Linux] 컴퓨터의 작동원리와 프로세스 정리 (0) | 2026.03.01 |
| [Linux] 소유권과 권한 (0) | 2026.03.01 |
| [Linux] 사용자와 사용자 그룹 (0) | 2026.03.01 |
