논문 리뷰/Accelerating Dynamic Graph Analytics on

Synchronization

왕크다 2020. 11. 25. 20:08

병렬 처리에서의 동기화 : 서로 다른 Threads 간의 실행 순서를 보장하기 위해서 구속 조건을 강제로 거는 것이다.

동시에 여러개의 Threads가 동일한 자료를 접근하여 조작하고 그 실행 결과를 접근하는 특정 순서에 의존하는 상황

==>경쟁 상황(racecondition).

즉, 동기화 : Thread의 실행 순서를 구성하고 공유하는 데이터를 관리하는 것이다.

 

동기화 처리 유형

  • 상호배제(mutual exclusion) : Thread가 공유 데이터를 사용하는 부분을 동기화 객체(critical section등)으로 block시키는 방식.
  • 상태 동기화(condition synchronization) : 시스템이 특정 상태로 도달하기 전까지는 Thread를 완전히 block시킴.

동기화 객체

: 커널에서 제공하는 객체. Thread 사용시 문제되는 자원의 공유시 충돌에 대한 해법 제시.

 - Critical Section

커널 객체를 사용하지 않으므로 내부 구조가 단순==>동기화 처리 속도가 빠르다.

그러나 동일한 프로세스에서만 사용이 가능하다.

동일 프로세스에서 다른 Thread의 방해를 받지 말아야 할 작업을 할 때, 이 영역을 Critical Section으로 둘러싸면 전역 자원의 독점권을 획득하게 된다.

Lock, Unlock을 사용하여 자원의 동기화를 유지시킴.

Kernel Object : 프로세스의 상태정보(Ready, Running, Blocked)와 우선순위와 같은 정보들은 운영체제 내에서 저장되는데 상태나 우선순위가 바뀜에 따라서 갱신되어야 함. ==>스케줄러가 관리.
윈도우 개발자들이 정보를 저장하기 위해 프로세스 관리 구조체를 만들었다.
커널 객체를 사용하는 동기화 : Signaled와 Non-Signaled 두 가지 중 하나의 상태로 존재.
동기화 객체가 Signaled가 될 때까지 이 커널 객체를 사용하려는 Thread는 대기하게 됨.
이때 대기 함수(일정한 조건에 따라 Thread의 실행을 block/실행을 허가하는 함수 "WaitForSingleObject" 와 함께 사용. 

- Mutex

프로세스간에도 사용할 수 있으나 속도는 느리다. 그러나 같은 프로세스내의 스레드끼리만 동기화한다면 속도 차이는 CS와 비슷.

한 Thread에만 소유될 수 있으며 소유되면 비신호 상태가 된다. 어떤 Thread에서도 소유되어 있지 않으면 신호 상태.

Critical Section과 유사하게 사용 가능.

Thread가 여러 개 있더라도 자신이 소유한 Thread를 기억하며 같은 Thread가 중복 호출하더라도 dead lock 이 발생하지 않게 함. ==>동기화 제한 시간을 설정할 수 있다. 기본값=무한대

이유 : Lock 된 상태에서는 논리적 오류로 인해 Unlock되지 않을 시 다른 Thread가 영영 자원에 접근할 수 없는 dead lock 상태에 빠지기 때문에 제한시간을 둬서 dead lock을 방지. 

*내부적으로 카운트 체크를 해서 카운트가 0이 되었을 때 신호 상태로 돌려줌*

Thread 동기화 + 프로세스 동기화.

Lock, Unlock을 사용하여 동기화를 유지. 자원 소모량이 CS보다 많음. 

 

-Semaphore

기본적으로 Mutex와 비슷하게 처리. 사용자가 지정한 개수만큼 보호되는 자원에 대해서 접근할 수 있도록 함.

유효자원의 카운트0==>semaphore 비신호 상태. 카운트1이상==>신호상태. 다른 Thread가 자원을 풀때까지 대기하게 되고 semaphore가 1 이상이면 유효자원의 개수를 1 감소시키고 곧바로 리턴.

*서버측에서 동시 접속자 수가 1000명이 있을 때 10명까지만 접근을 허용할 때 사용*

 

-Event 

어떤 사건이 일어났음을 알리는 동기화 객체. 

CS, Mutex, Semaphore는 주로 공유 자원을 보호하기 위해 사용되며

Event는 Thread간의 작업 순서나 시기를 조정, 신호를 보내기 위해 사용됨.

특정 조건이 만족될 때까지 대기해야 하는 Thread가 있을 경우 이 Thread의 실행을 이벤트로 제어할 수 있다.

 

'논문 리뷰 > Accelerating Dynamic Graph Analytics on' 카테고리의 다른 글

Thread  (0) 2020.11.26
Red-Black Tree  (0) 2020.11.25
Muex  (0) 2020.11.25