CS/OS

Process Synchronization (동기화)

Kitsune_park 2022. 2. 7. 11:40

 

다중 프로그래밍이란, 여러 개의 프로세스들이 존재할때(보통의 경우에 해당)

 

프로세스들은 서로 독립적으로 동작하고, 공유자원 or 데이터가 있을 때 문제가 발생한다.

 

이때 동기화가 필요하며, 동기화란 프로세스들이 서로 정보를 공유하며 동작을 맞추는 것이다.

 

비동기적 => 프로세스들이 서로에 대해 모름

 

병행적 => 여러 개의 프로세스들이 동시에 시스템에 존재

 

병행 수행중인 비동기적 프로세스들이 공유 자원을 동시 접근할 때, 문제가 발생할 수 있다.

그러므로 동기화가 필요하다!

 

 

Shared data(공유 데이터) => 여러 프로세스들이 공유하는 데이터

 

Critical section(임계 영역) => 공유 데이터를 접근하는 코드영역

 

Mutual exclusion(상호배제) => 둘 이상의 프로세스가 동시에 critical section에

진입하는것을 막는것

 

 

 

두 프로세스는 sdata에 1을 더하는 연산을 더한다 할 때, 메모리에는 sdata 의 값이

 

2가 되어야 한다. 하지만 실제로 그렇게 되지 않을 수 있다.

 

기계어 명령의 특성 중 한 기계어 명령의 실행 도중 인터럽트를 받지 않기 때문이다.

 

 

 sdata += 1 은 machine은 3개로 번역한다.

 

레지스터에 sdata 값을 Load 해와라, 레지스터에서 1을 더해라, 이 레지스터 값을

 

shared data에다 다시 저장해놓아라.

 

만약 저 프로세스의 1,2,3 사이에 preemption이 발생하고, 그 때, 다른 프로세스가

 

같은 연산을 한다면 둘다 sdata에 1을 반환한다. 이렇게 실행 순서에 따라 결과가

 

달라질 수 있는것을 Race Condition 이라 한다.

 

이를 막기위해 등장한 것이 Mutual Exclusion 이다.

 

즉 프로세스 입장에서, 내가 이것을 실행하는동안 다른 프로세스가 이 작업을

 

하지 못하도록 막아달라고 요청하는것이다. 

 

Mutual Exclusion을 구현하기 위한 기본연산은

 

enterCS() primitive(노크역할) => critical section 진입 전 검사, 

exitCS() primitive => critical section 을 벗어날 때 후처리 하는 과정(시스템에 알림)

 

이렇게 두가지가 있다.