카테고리 없음

[운영체제] 11. Process Synchronization (1) - OS에서의 경쟁상태

minjiwoo 2023. 7. 3. 07:11
728x90

데이터의 접근 

https://velog.io/@suuhyeony/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Ch6.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%94

데이터가 저장되어 있는 위치에서 읽어와서 연산을 함. 연산결과를 다시 원래 위치에 저장. 

Race Condition - 경쟁상태 

Storage-Box (Memory, Address Space)라는 것을 여러 Excution Box(CPU, Process)가 공유한다면 생기는 문제 

Multiprocessor system 이나 공유 메모리를 사용하는 프로세스들, 커널 내부 데이터를 접근하는 루틴들 간 경쟁 상태의 가능성이 있다. 

OS에서의 Race Condition

1. Kernel Mode 

https://rebro.kr/176

경쟁상태 발생 : Kernel Mode 중 인터럽트가 발생해서 인터럽트 처리 루틴이 수행되는 경우에, 양쪽 다 커널 코드이므로 kernel address space를 공유하게 된다. 

이렇게 kernel 에서 count++를 수행하다가 interrupt 가 걸리면 count-- 를 수행하여 원래값과 동일할 것 같이 보이지만, 실제 OS에서는 count 를 load 한 시점을 바탕으로 ++ 연산이 일어나고 저장되므로 count++ 한 값이 저장된다. 

해결 방법 : Interrupt를 disabled 시킨다. 그리고 Kernel 에서의 count++ 작업이 끝난 이후에 enable 시켜서 경쟁상태를 해결한다. 

2. CPU 선점 문제 

CPU 할당 시간이 끝나면 CPU 를 반납하게 된다. 

해결 방법 : 할당시간이 끝나는 시점이 Kernel Mode 에서 수행중이라면, CPU 를 선점하지 않는다. 커널 모드에서 사용자 모드로 돌아갈 때 선점한다. 

3. Multiprocessor 

어떤 CPU 가 마지막으로 count를 store했는가 ? 
- 멀티프로세서 환경에서는 공유 데이터를 건드리는 경우 인터럽트를 막아서 (인터럽트 enable/disable) 해결할 수가 없다. 

해결 방법 1 : 한번에 하나의 CPU 만이 커널에 들어갈 수 있게 하는 방법

해결 방법 2 : 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대한 lock , unlock 을 거는 방법

Critical Section 

  • N개의 프로세스가 공유데이터를 동시에 사용하기 원하는 경우 
  • 각 프로세스의 code segment에는 공유 데이터를 접근하는 코드인 critical section 이 존재 

 

728x90