운영체제

[운영체제(OS)] 7-2. 프로세스 동기화 (Process Synchronization)

용성군 2022. 3. 23. 00:03
728x90
반응형

저번글까지 critical section problem 문제를 해결하기 위한 알고리즘에 대해서 알아보았다.

오늘은 lock을 이용해서 critical section problem을 해결하고 semaphore에 대해서 알아보도록 하겠다.

 

프로세스 동기화에 대해 알고 Peterson’s Algorithm을 이해하였다. 하지만 우리가 개발을 하는 입장일 때, 어떤 과정을 통해 동기화 과정이 해결되는 지 몰라도 기계적으로 코딩할 수 있도록 하는 것이 더 좋은 방법일 것이다. 그래서 나온것이 Lock이용한 해결법이다. 

동작방식

1. lock을 가진 process만이 critical section에 들어갈 수 있다. 단 lock은 하나의 process에게만 주어져야 한다.

2. critical section이 끝나면 lock을 반납(release lock)한다.

 

출처 : https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/5_Synchronization.html

문제점

그렇다면 lock을 하나의 프로세스만 가지도록 하는 보장하려면 어떻게 해야하는가?


Synchronization Hardware(hardware를 이용한 동기화)

lock을 하나의 프로세스만 가지도록 하기 위해, 많은 system들이 hardware로 이 문제(critical section problem)를 해결한다. 

 

Uniprocessors(단일 프로세서)

만약 단일 프로세서라면 interrupt를 disable시키면 된다.

process는 timer 때문에 scheduling이 발생할 때가 많다.(Round Robin)  따라서 interrupt를 disable 시켜 critical section을 수행중이라면 cpu scheduling이 발생하지 않도록 만드는 것이다. critical section이 끝나면 interrupt를 다시 enable 시킨다. 

 

하지만 multiprocessor 시스템에서는 매우 비효율적이라 대부분의 OS는 이 방법을 사용하지 않는다.

 

따라서 요즘은 프로세스가 lock을 가지기 위해 atomic한 hardware instruction을 제공하고 사용한다. (여기서 Atomic하다는 뜻은 interrupt가 발생하지 않아 한번에 실행된다는 뜻이다.) 두가지 방법이 있다.

  • Memory word를 test하고 값을 set(설정)하는 방법 (Test-and-Set)
  • 두개의 Memeory word를 swap 시키는 방법 (Swap)

여기서 word는 변수라고 생각하면 편할 것 같다.


Test-And-Set

다음은 TestAndSet 방식의 코드이며 이 부분을 하드웨어로 구워 만든다고 생각하면된다.

 

매개변수로 받은 target의 값을 return 해주고 target의 값은 true로 만드는 코드가 된다. 이부분은 atomic하게 동작해야한다. 

실제 위의 TestAndSet함수가 어떻게 사용되는지 알아보겠다. 실제 process P의 코드이다.

 

728x90
반응형