본문 바로가기
운영체제

[운영체제] KOCW 5.2 - Ch6: Process Synchronization

by Lizardee 2023. 6. 9.
데이터의 접근

데이터의 접근

 

Race Condition: 경쟁 상태

Race Condition

  • S-box(memory address space)를 공유하는 E-box(CPU process)가 여러 개 있는 경우, race condition의 가능성이 있다.

 

(1) 커널 내부 데이터를 접근하는 루틴들 간의(운영체제에서의) race condition

▶ kernel mode 수행 중 인터럽트 발생 시

kernel mode 수행 중 인터럽트 발생 시

  • Solution: kernel mode 수행 시, interrupt disable

 

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

  • user mode: 두 프로세스의 address space 간의 data sharing (x)
  • kernel mode: kernel address space의 data를 공유하게 된다. --> kernel mode 중간에 CPU를 preempt해가면, race condition 발생한다.

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

  • Solution: kernel mode에서 수행중일 때는 CPU를 preempt하지 않는다. kernel mode에서 user mode로 돌아갈 때 preempt한다. (비록 CPU 할당 시간이 다 끝났지만, 이를 연장해주는 개념)

 

▶ Multiprocessor에서 shared memory 내의 kernel data

: Multiprocessor(CPU가 여러 개)일 때, 두 CPU가 모두 system call을 하여 운영체제의 코드를 수행하면, race condition이 발생할 수 있다. 이는 CPU가 여러 개이기 때문에, 하나의 interrupt만 막는다고 해결되지 않는다.

Multiprocessor에서 shared memory 내의 kernel data

  • Solution1: kernel에 한번에 하나의 CPU만이 들어갈 수 있게 하는 방법(kernel에 대한 lock/unlock); 비효율적
  • Solution 2: kernel 내부에 있는 각 공유데이터에 접근할 때마다 그 공유데이터에 대한 lock/unlock을 하는 방법

 

(2) 공유메모리를 사용하는 프로세스들 간의 race condition
  • Problem: 공유데이터(shared memory)의 동시 접근은 데이터 불일치 문제(inconsistency)를 발생시킬 수 있다.
  • Solution: 일관성(consistency) 유지를 위해서는 협력 프로세스(cooperating process)간의 실행 순서를 정해주는 메커니즘이 필요하다
  • race condition을 막기 위해서는, concurrent process 동기화(synchronization)가 필요하다.

 

▶ The Critical-Section Problem

The Critical-Section Problem

  • 각 프로세스의 code segment에는 critical section(공유데이터에 접근하는 코드)이 존재한다.
  • Problem: 하나의 프로세스가 critical section 코드를 수행중일 때, 다른 프로세스가 critical section에 들어오면, 데이터 불일치 문제(inconstency)가 발생한다.
  • Solution: 하나의 프로세스가 critical section에 있을 때, 다른 모드는 프로세스는 critical section에 들어갈 수 없어야 한다.