OS

[쉽게 배우는 운영체제] 5-1. 프로세스 동기화: 임계 영역

noahkim_ 2024. 12. 12. 02:25

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다

 

1. 프로세스 간 통신

같은 호스트에서 프로세스 간 통신 (IPC)

  • 프로세스는 기본적으로 메모리를 공유하지 않기 때문에 통신이 필요함
구분 공유 메모리 파일 파이프
통신 방식 같은 메모리 공간 직접 접근 동일 파일 읽기/쓰기 단방향 스트림
속도 가장 빠름 가장 느림 중간
커널 개입
동기화 ❌ (직접 구현 필요) ⭕ (커널이 관리함)  (커널이 관리함)
지속성 ⭕ 
관계 제약 ⭕ (부모–자식 필요)
구현 난이도 높음 낮음 낮음
주 사용 목적 고성능 데이터 공유 기록·로그·설정 공유
간단한 데이터 전달
대표 예시 생산자–소비자 로그 파일 ls | grep txt
주요 API shmget(), shmat() open(), read(), write() pipe()

 

 

예제) 파이프

더보기
#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 RPC
통신 개념 네트워크를 통해 두 프로세스가 직접 데이터 송수신
원격 서버의 함수를 로컬 함수처럼 호출
통신 단위 바이트 스트림 / 메시지
함수 호출(Request / Response)
방향성 양방향 통신 요청 → 응답
추상화 수준 낮음 (전송 계층 중심)
높음 (네트워크 숨김)
개발자 제어 높음 (직접 프로토콜 설계)
낮음 (프레임워크가 처리)
대표 예시 채팅 서버, 게임 서버
gRPC, REST API, Java RMI

 

2. 임계 구역

  • 공유 자원에 접근하는 코드

 

Race Condition

  • 여러 스레드나 프로세스가 동시에 접근하면서 실행 순서에 따라 결과가 달라지는 상황
  • ✅ 실행 순서에 따라 데이터가 꼬일 수 있음
  • ➡️ 실행 순서를 규칙으로 제어해야 함

 

해결 조건

조건 설명
상호 배제 (Mutual Exclusion)
한 프로세스가 임계 구역에 있으면, 다른 프로세스는 동시에 진입할 수 없음
한정 대기 (Bounded Waiting)
특정 프로세스가 임계 구역에 들어가기 위해 무한정 기다리게 하면 안 됨 (공정한 기회 보장)
융통성 (Progress & Fairness)
대기하는 프로세스가 적절한 시점에 실행될 수 있어야 함