조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다
1. 프로세스 간 통신
종류
같은 호스트에서 프로세스 간 통신
구분 | 설명 | 특징 | 예시 |
공유 메모리 | 여러 프로세스가 같은 메모리 공간을 공유하여 데이터를 주고받는 방식 | - 빠른 속도 (커널 개입 없이 직접 접근 가능) - 동기화 필요 (뮤텍스, 세마포어 등) |
- 생산자-소비자 모델에서 공유 메모리를 이용해 데이터 전달 - POSIX shmget(), shmat() 사용 |
파일 | 프로세스가 파일을 읽고 쓰는 방식으로 데이터 공유 | - 지속성이 있음 (프로세스 종료 후에도 유지) - 속도가 느림 (디스크 입출력 필요) |
- 로그 파일을 여러 프로세스가 공유하여 기록 - open(), read(), write() 활용 |
파이프 | 한 프로세스가 데이터를 쓰면, 다른 프로세스가 읽는 방식 (단방향 통신) | - 프로세스 간 간단한 메시지 전달 가능 - 부모-자식 프로세스 간 사용 |
아래 코드 참고 |
#include <stdio.h>
#include <unistd.h>
int main() {
int fd[2];
pipe(fd);
if (fork() == 0) { // 자식 프로세스
close(fd[1]); // 쓰기 닫음
char buffer[100];
read(fd[0], buffer, sizeof(buffer));
printf("Child read: %s\n", buffer);
} else { // 부모 프로세스
close(fd[0]); // 읽기 닫음
write(fd[1], "Hello, Pipe!", 13);
}
return 0;
}
다른 호스트에서 프로세스 간 통신 (네트워크)
구분 | 설명 | 특징 | 예시 |
Socket | 네트워크를 통해 두 프로세스가 데이터를 주고받는 방식 | - 양방향 통신 가능 - OS가 제공하는 API 사용 - TCP/UDP 기반 |
- 채팅 애플리케이션 (ex: WebSocket) - 클라이언트-서버 모델 구현 (ex: HTTP 요청) |
RPC (Remote Procedure Call) |
원격 서버의 함수를 로컬 함수처럼 호출하는 방식 | - 네트워크 통신을 추상화 - 서로 다른 운영체제 간 통신 가능 - 동기/비동기 방식 모두 가능 |
- gRPC (Google RPC) - Java RMI (Remote Method Invocation) - REST API 호출 |
2. 임계구역
- 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
해결 조건
조건 | 설명 |
상호 배제 (Mutual Exclusion) |
한 프로세스가 임계 구역(Critical Section)에 들어가면, 다른 프로세스는 동시에 진입할 수 없음
|
한정 대기 (Bounded Waiting) |
특정 프로세스가 임계 구역에 들어가기 위해 무한정 기다리게 하면 안 됨 (공정한 기회 보장)
|
융통성 (Progress & Fairness) |
어떤 프로세스도 임계 구역을 무한정 점유해서는 안 됨
대기하는 프로세스가 적절한 시점에 실행될 수 있어야 함 |
'OS' 카테고리의 다른 글
[쉽게 배우는 운영체제] 7. 물리 메모리 관리 (0) | 2024.12.12 |
---|---|
[쉽게 배우는 운영체제] 6. 교착 상태 (1) | 2024.12.12 |
[쉽게 배우는 운영체제] 4-2. CPU 스케줄링: 인터럽트 처리 (0) | 2024.12.12 |
[쉽게 배우는 운영체제] 4-1. CPU 스케줄링: 스케줄링 (0) | 2024.12.12 |
[쉽게 배우는 운영체제] 3-2. 프로세스와 스레드: 스레드 (0) | 2024.12.12 |