[OS] 프로세스 동기화(Process Synchronization)

2025. 8. 3. 16:46·Computer Science/운영체제

프로세스 간 데이터를 주고받는 4가지 통신 방식은 이전 포스팅에서 확인할 수 있다.

2025.07.31 - [CS/운영체제] - IPC(Inter-Process Communication)란?

 

IPC(Inter-Process Communication)란?

IPC(Inter-Process Communication)의 정의IPC(Inter-Process Communication)는 프로세스들 사이에 서로 데이터를 주고받는 행위를 의미한다. 운영체제 구조는 보다시피 user mode와 kernel mode로 나뉘어져 있다.user mode

jjangsudiary.tistory.com

 

프로세스 동기화(Process Synchronization)

이번에는 프로세스 간 자원 접근을 동기화하고 제어하는 방법들을 살펴보겠다!

앞서 프로세스 간 통신함에 있어서 공유 메모리 방식이 있었다.

공유 메모리는 두 프로세스가 동일한 메모리 영역에 접근할 수 있어 빠른 통신이 가능하지만,

동시에 접근할 경우 Race Condition(경쟁 조건)이 발생할 수 있다.

Shared Memory 방식

Race Condition(경쟁 조건)

여러 프로세스나 스레드가 공유 자원에 동시에 접근하여, 실행 순서에 따라 결과가 예측 불가능하게 달라지는 상황을 말한다.

 

Critical Section(임계 구역)

경쟁 조건을 발생시킬 수 있는 코드 블록을 임계 구역이라 한다. 위의 공유 메모리 영역도 임계 구역이라 할 수 있다.

 

따라서 임계 구역 내의 공유 자원에 대해 일관성을 유지하고 데이터 유실을 방지하려면,

한 프로세스가 임계 구역에 진입한 동안 다른 프로세스는 진입하지 못하도록 "동기화"가 필요하다.

 

동기화를 유지시키기 위한 충족 조건은 다음과 같다.

 

1. Mutual Exclusion(상호 배제)

한 프로세스가 임계 구역에 들어가 있으면, 다른 프로세스는 들어갈 수 없다.

 

2. Progress(진행)

임계 구역에 프로세스가 없다면 어떠한 프로세스라도 들어가서 자원을 활용할 수 있다.

 

3. Bounded Waiting(유한 대기)

프로세스가 임계 구역에 들어가는 횟수에 제한을 두어 무한정 대기(기아 상태)를 방지한다.

 


 

이제 이러한 조건을 만족시키기 위해 실제로 어떤 동기화 도구들이 사용되는지 살펴보자.

대표적으로 세마포어, 뮤텍스, 모니터 등이 있다.

 

뮤텍스(Mutex)

임계 영역에 하나의 작업 스레드만 허용한다.(Mutual Exclusion 원칙)

따라서 임계 영역에 들어갈 수 있는 작업 스레드는 acquire()을 통해 lock을 획득하고, 나올 때는 release()를 통해 lock을 반환해야 한다.

※ Busy Wait(바쁜 대기)란?

임계 영역에 들어가지 못한 프로세스는 lock을 획득하기 위해 while문을 지속적으로 수행해야 한다.

이를 Spin Lock이라고도 지칭하며, 문맥 교환이 발생하지 않으므로 임계 구역에서 머무르는 시간이 짧을 경우 효율적일 수 있다.

 


 

세마포어(Semaphore)

뮤텍스에서의 Lock은 Mutual Exclusion 원칙으로 인해 하나의 스레드만 임계 구역으로 들어갈 수 있었다.

하지만 세마포어는 임계 구역에 동시에 여러 스레드 또는 프로세스가 들어갈 수 있다! (Integer형 S 이용)

 

  • wait(): 스레드 또는 프로세스가 임계 구역에 들어가기 위해 호출하는 연산, 만약 사용할 수 있는 자원이 없으므로 대기한다.
  • signal(): 스레드 또는 프로세스가 임계 구역에서의 작업을 마치고 세마포어 값을 1 증가시킨다.

 


 

모니터(Monitor)

세마포어의 단점은 wait()와 signal()의 호출 순서를 프로그래머가 직접 제어하여 논리적 오류가 발생할 수 있다는 점이다!

이를 방지하기 위해 프로그래밍 언어를 이용한 고수준 동기화 도구가 Monitor가 도입되었다.

 

Java의 Synchronized, Python의 with threading.Lock()이 모니터 역할을 한다.

각각은 모두 동기화하기 위한 데이터와 조작 함수를 캡슐화하여 ADT 형식으로 제공한다.

사용자는 제공되는 메소드나 구문을 활용해 임계 구역을 제어할 수 있다!

 

 

:)

 

출처

https://yonghwankim-dev.tistory.com/270

https://brightstarit.tistory.com/10

https://sihyung92.oopy.io/os/6

https://myvelop.tistory.com/199#1-3-process-synchronization-problem

https://yaelimeee.tistory.com/56

'Computer Science > 운영체제' 카테고리의 다른 글

[OS] 메모리 관리- 페이징(Paging)과 세그먼테이션(Segmentation)  (2) 2025.08.21
[OS] 시스템 콜(System Call)  (3) 2025.08.14
[OS] IPC(Inter-Process Communication)  (4) 2025.07.31
[OS] GC(Garbage Collection, 가비지 컬렉션)  (1) 2025.07.21
[OS] 프로세스(Process) vs 스레드(Thread)  (0) 2025.06.19
'Computer Science/운영체제' 카테고리의 다른 글
  • [OS] 메모리 관리- 페이징(Paging)과 세그먼테이션(Segmentation)
  • [OS] 시스템 콜(System Call)
  • [OS] IPC(Inter-Process Communication)
  • [OS] GC(Garbage Collection, 가비지 컬렉션)
jjangsudiary
jjangsudiary
jjangsudiary 님의 블로그 입니다.
  • jjangsudiary
    jjangsudiary 님의 블로그
    jjangsudiary
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • 이모저모 (0)
        • 회고 (0)
      • Development (17) N
        • 개발 공부 (14) N
        • 프로젝트 (2)
      • Android (10)
        • Compose (1)
      • AI (15)
      • Computer Science (25)
        • 네트워크 (8)
        • 데이터베이스 (10)
        • 운영체제 (6)
        • 자료구조 (0)
        • 컴퓨터구조 (1)
      • Java (9)
        • 디자인패턴 (2)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    baekjoon
    db
    자바
    머신러닝
    CS
    운영체제
    프로그래머스
    코딩 테스트
    Ai
    database
    파이썬
    Python
    안드로이드
    android
    백준
    딥러닝
    java
    TensorFlow
    인공지능
    os
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
jjangsudiary
[OS] 프로세스 동기화(Process Synchronization)
상단으로

티스토리툴바