CS/운영체제

쓰레드의 이해

:_: 2022. 2. 24. 13:58

동기화(Synchronization) 이슈

  • 동기화 : 작업들 사이에 실행 시기를 맞추는
  • 여러 스레드가 동일한 자원(데이터) 접근시 동기화 이슈 발생

 ex. 프로세스 안에 스레드 여러개, 스레드들은 모픈 프로세스에 있는 데이터 공유

스레드 A 데이터값을 바꾸고 다른 스레드들이 읽을 있다.

스레드들은 실행 순서는 정해져 있지 않고 스케줄러가 그에 맞춰 정해지게 된다.

순서가 정해져 있지 않다보니 비정상 동작을 하게 된다.

동기화 이슈라고 한다. (Synchronization)

    동기화 이슈는 관리(스레드 관리) 필요하다. 디버깅하기 쉽지 않다.

 

동기화(Synchronization) 이슈 해결 방안

 - 동기화 간에 실행 시기를 맞춰야 한다.

 - Mutual exclusion (상호 배제)

 - 쓰레드는 프로세스 모든 데이터를 접근 있으므로,

  1. 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Access 필요

  2. 어느 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근하지 못하도록 막아라.

 

Mutual exclusion (상호 배제)

  • 임계 자원(critical resource) :  동시에 수정하는 안되는 자원
  • 임계 영역(critical section) : 동시 실행을 하면 안되는 코드 영역

 

동기화(Synchronization)와 세마포어

- Semaphore 를 동기화 이슈를 해결하는데 활용할 수 있음

 

 1) Mutex 세마포어(Semaphore)

  - Critical Section(임계 구역) 대한 접근을 막기 위해 LOCKING 메커니즘 필요

     1. Mutex(binary semaphore) : 임계구역에 하나의 스레드만 들어갈 있음

     2. Semaphore : 임계구역에 여러 스레드가 들어갈 수 있음 

         counter 두어서 동시에 리소스에 접근 있는 허용 가능한 스레드 수를 제어

 

 2) 세마포어(Semaphore)

  - 세마포어는 리눅스에서 코드로 구연되어 있는 하나의 함수 

 

  - P : 검사 (임계영역에 들어갈 )

  - V : 증가 (임계영역에서 나올 )

  - S : 세마포어 (초기 값만큼 여러 프로세스가 동시에 임계영역에 접근 가능)

3) 세마포어(Semaphore) - 바쁜 대기

wait() S 0이라면, 임계 영역에 들어가기 위해 반복문(loop) 수행

바쁜 대기 , busy waiting → 반복문 수행  CPU 실행 (성능 떨어짐)

 

4) 세마포어(Semaphore) - 대기큐

운영체제 기술로 보완 - 대기큐

 

세마포어(Semaphore) 

 wakeup() 함수를 통해 대기큐에 있는 프로세스 재실행

 

교착상태(Deadlock)와 기아상태(Starvation)

 

1) 교착상태(Deadlock) 란?

- 무한 대기 상태 (아무 스레드 동작 x) : 두개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있어 다음 단계로 진행하지 못하는 상태

 

  • 배치 처리시스템에서는 일어나지 않는 문제
  • 프로세스, 스레드 둘다 이와 같은 상태 일어날 있음

 

참고: 교착상태 발생 조건

- 다음 네가지 조건이 모두 성립될 때, 교착상태 발생 가능성이 있음

 1. 상호배제(Mutual exclusion): 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다.

 2. 점유대기(Hold and wait): 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.

 3. 비선점(No preemption): 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.

 4. 순환대기(Circular wait): 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

 

2) 기아상태(Starvation) ?

- 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태

 

- 교착상태와 기아 상태

 1. 교착상태는 여러 프로세스가 동일 자원 점유를 요청할 발생

 2. 기아상태는 여러 프로세스가 부족한 자원 점유하기 위해 경쟁할 , 특정 프로세스는 영원히 자원 할당이 안되는

경우를 주로 의미

 

- 기아상태 해결 방안

 

 우선순위 변경

  • 프로세스 우선순위를 수시로 변경해 프로세스가 높은 우선순위 가질 기회부여
  • 오랜 기다린 프로세스의 우선순위 높여주기
  • 우선순위가 아닌, 요청 순처대로 처리하는 FIFO 기반 요청큐 사용

 

제로베이스 컴퓨터 공학 전공자 따라잡기 강의 시청 후 정리한 내용입니다.
728x90