본문 바로가기
Computer Science/Operating System(OS)

Process Synchronization(1)-프로세스 동기화

by J._.cobb 2022. 3. 11.

데이터의 접근

컴퓨터 시스템 안에서 데이터가 접근되는 패턴(1-2-3-4)

 

Race Condition(경쟁상태)

  • 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서로 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황을 말한다. Race의 뜻 그대로, 간단히 말하면 경쟁하는 상태, 즉 두 개의 프로세스(스레드)가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상황을 말한다.
  • 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라진다.

  • 프로세스는 일반적인 경우, 자기 주소 공간만 접근하기 때문에 Race Condition이 발생할 일이 없음.

 

OS에서 발생하는 Race Condition

  • Kernel 수행 중 인터럽트 발생 시

*해결 방법: 커널모드 running 중 interrupt가 들어오면 disable 시키고 3단계(Store)까지 다 끝났을 때 Enable 시켜 Interrupt처리 루틴으로 넘김

 

  • Process가 system call을 하여 kernel mode로 수행 중인데 context switch가 일어나는 경우

*해결 방법: 커널 모드에서 수행 중일 때는 CPU를 preempt하지 않고, 커널 모드에서 사용자 모드로 돌아갈 때 preempt →할당 시간에 편차가 생길 수는 있으나 큰 문제는 아님.

 

  • Multiprocessor에서 shared memory 내의 kernel data

*멀티 프로세서 환경에서의 경우 interrupt enable/disable로 해결되지 않음

**해결 방법 :

  1. 한 번에 하나의 CPU만이 커널에 접근할 수 있게 하는 방법(커널 전체에 lock → 비효율적)
  2. 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대한 lock/unlock을 하는 방법

 

Process Synchronization 문제

  • 공유 데이터의 동시 접근은 데이터의 불일치 문제를 발생시킬 수 있다.
  • 일관성 유지를 위해서는 협력 프로세스 간의 실행 순서를 정해주는 메커니즘이 필요
  • Race Condition을 막기 위해 concurrent process는 동기화되어야 함.

 

The Critical-Section Problem

  • n개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우
  • 각 프로세스의 code segment에는 공유 데이터를 접근하는 코드cirtical section이 존재
  • 해결방법
    • 하나의 프로세스가 critical section(공유데이터를 접근하는 코드)에 있을 때 CPU가 넘어가더라도 다른 모든 프로세스는 critical section에 들어갈 수 없어야 한다.

 

 

 

 

 

출처

KOCW :  이화여대 반효경 교수님 <운영체제, 2014>

  •