본문 바로가기

Roadmap

OS and General Knowledge - 4

Threads and Concurrency

Thread

스레드란 CPU 연산의 가장 작은 단위로 Thread ID, program counter(PC), register set, stack으로 구성되어 있다. 같은 프로세스 안에 있는 스레드들은 코드 섹션, 데이터 섹션, 리소스를 공유하며 프로세스가 멀티 스레드를 갖게 되면 한 번에 1개 이상의 작업을 수행할 수 있게 된다.

웹 서버의 경우에도 멀티 스레딩을 적용하여 여러 request를 처리할 수도 있다.

 

멀티 스레딩을 할 경우 다음의 장점이 존재한다.

  • Responsiveness - 프로세스 일부 스레드가 block 되거나 긴 연산이 수행될 때도, 나머지 스레드들을 통해 계속 실행할 수 있으므로, 사용자 경험을 높여준다.
  • Resource sharing - 프로세스간에는 shared memory, message passing을 통해서 resource 공유가 가능하며 같은 프로세스의 스레드들은 메모리와 자원을 공유한다.
  • Economy - 프로세스 생성에 있어 메모리와 자원의 할당은 비용이 크나 스레드는 같은 프로세스 안에서 자원을 공유하므로  context switch 스레드를 만드는 것이 더욱 경제적이고 속도 역시 스레드와 스레드가 더욱 빠르다.
  • Scalability - 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 병렬성이 증가한다.

 

Concurrency

Concurrency(동시성) 문제를 처리하기 위해 스레드가 데이터 및 기타 리소스에 한 번에 하나씩 액세스 할 수 있도록 독점적인 방식으로 스레드를 실행하는 메커니즘이 필요한데 이를 위해서 다중 스레드가 리소스를 공유할 수 있도록 하는 상호 배제를 위해 뮤텍스를 사용한다. 뮤텍스는 임계 영역이라고도 하며 같이 접근해서는 안 되는 공유 영역을 뜻한다. 임계 영역에서는 한 번에 하나의 스레드만 수행해야 하는 작업을 수행하는 코드가 포함되어 있으며 독점 액세스를 위해 임계 영역을 Lock 시킨다. 또한 작업이 종료되면 임계 영역을 unLock 시킨다.

 

동시성 코드를 작성할 때 발생하는 경쟁 상태, 교착 상태 등이 발생할 수 있으며 이를 예방(상호 배제 조건 제거, 점유와 대기 조건 제거, 비선점 조건 제거, 순환 대기 조건 제거) 및 회피(자원 할당 그래프 알고리즘, 은행원 알고리즘)하는 알고리즘을 통해 100%는 아니지만 예방할 수 있다.

'Roadmap' 카테고리의 다른 글

OS and General Knowledge - 6  (0) 2022.02.08
OS and General Knowledge - 5  (0) 2022.02.07
OS and General Knowledge - 3  (0) 2022.02.03
OS and General Knowledge - 2  (0) 2022.01.26
OS and General Knowledge - 1  (0) 2022.01.25