OS

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

noahkim_ 2024. 12. 12. 02:25

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

 

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)
어떤 프로세스도 임계 구역을 무한정 점유해서는 안 됨
대기하는 프로세스가 적절한 시점에 실행될 수 있어야 함