CS 정리 | OS | 5. 병행제어 | 프로세스 동기화 문제의 등장 | kocw 반효경 교수님

Konseo·2023년 9월 12일
0

운영체제

목록 보기
9/19

데이터의 접근

경쟁 상태 (Race Condition)

  • S-box(메모리)를 공유하는 E-box(CPU)가 여럿 있는 경우 경쟁 상태의 가능성이 있음

사실 multiprocessor system 환경이더라도 각 CPU는 서로 다른 프로세스를 실행 중일 것이기 떄문에 각 프로세스 내 data에 접근하게 된다. 즉, 경쟁 상태는 OS 커널이 끼어들게 되는 경우이다. OS는 하나이기 때문에 어떤 프로세스가 접근하든 OS의 같은 data 영역(공유 data 영역)에 접근할 수 있다. 이는 multiprocessor가 아닌 CPU가 한 개인 상황에도 동일하게 발생할 수 있는 문제이다.

OS에서 race condition은 언제 발생하는가?

  1. kernel 수행 중에 인터럽트 발생 시
  2. Process가 system call을 하여 kernel mode로 수행 중인데 context switch가 일어나는 경우
  3. multiprocessor에서 shared memory 내의 kernal data

1. If interrupt occurs while in kernel mode...

  • 커널 모드 실행 중 인터럽트가 발생하여, 현재 처리하던 것을 멈추고 인터럽트 처리 루틴이 먼저 수행 됨 -> 양 쪽 다 커널 코드이므로 kernel address space를 공유
  • 해결책 : 특정 변수(ex.count)를 건들이는 동안 인터럽트를 disable 시키고, 원래의 작업이 끝난 다음에 인터럽트를 다시 enable 시킴

2. If you preempt CPU while in kernel mode...

  • 해결책 : 커널 모드에서 수행 중일 때는 CPU를 preempt하지말고 커널 모드에서 사용자 모드로 돌아갈 때 preempt를 하자

3. In multiprocessor situations...

  • 각 CPU에서 실행중인 프로세스들이 시스템콜등에 의해 동시에 커널 모드로 진입해 작업을 진행한다면 race condition이 발생할 수 있다. 이 때 multiprocessor의 경우 interrupt enable/disable로는 해당 문제를 해결할 수 없다.
  • 해결책
    • (방법 1) 한 번에 하나의 CPU만이 커널에 들어갈 수 있게 한다
    • (방법 2) 커널 내부에 있는 각 공유 데이터에 접근할 때마다, 그 데이터에 대한 lock / unlock을 한다.

Process Synchronization 문제

  • 공유 데이터(shared data)의 동시 접근(concurrent access)은 데이터의 불일치 문제 (inconsistency)를 발생시킬 수 있다.
  • The Critical-Section Problem
    • n개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우
    • 각 프로세스의 code segment에는 공유 데이터를 접근하는 코드인 critical section이 존재
    • Problem
      • 하나의 프로세스가 critical section에 있으 때 다른 모든 프로세스는 critical section에 들어갈 수 없어야한다.
    • 여기서 ciritacal section은 공유 데이터(변수)를 의미하는 것이 아니라, 공유 데이터를 접근하늗 '코드'를 의미함
profile
둔한 붓이 총명함을 이긴다

0개의 댓글