본문 바로가기
Computer Science

스레드 (Thread)

by 개발자 데이빗 2021. 12. 29.

스레드의 개념

Light Weight Process 라고도 한다.

  • 프로세스
    • 프로세스 간에는 각 프로세스의 데이터 접근이 불가능하다
  • 스레드
    • 하나의 프로세스에 여러개의 스레드 생성이 가능하다.
    • 스레드들은 동시에 실행이 가능하다.
    • 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능하다.

Stack영역과 Register(SP, PC)는 스레드 마다 나뉜다. ( Thread 1 Stack Pointer, Thread 2 Stack Pointer, Thread 3 Stack Pointer )

Heap, Data, Code(Text) 영역은 공유한다.

 

최근 CPU는 멀티 코어를 가지므로, Thread를 여러개 만들어 멀티 코어의 활용도를 높인다.

 

멀티 프로세싱

여러 cpu가 하나의 프로세스를 병렬처리하여 실행속도를 높이는 기술

하나의 프로세스를 나누어 병렬처리를 하기 위해 thread를 여러개 나누어 여러 cpu가 동시에 처리한다.

 

스레드의 장점

  • 사용자에 대한 응답성 향상
    • 스레드 1이 특정 작업을 하는 동안 스레드 2는 사용자와 커뮤니케이션 할 수 있다.
  • 자원 공유 효율
    • IPC 기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업이 필요 없다.
    • 프로세스 안에 있으므로 프로세스의 데이터를 모두 접근 가능하다.

스레드의 단점

  • 스레드 중 한 스레드만 문제가 있어도 전체 프로세스가 영향을 받는다
  • 스레드를 많이 생성하면 context switching이 많이 일어나 성능이 저하된다.
    • 리눅스 OS에서는 스레드는 구조가 프로세스와 동일하다 (스레드를 별도의 프로세스인것처럼 처리한다.)
    • 스레드를 많이 생성하면 모든 스레드를 스케줄링해야 하므로 context switching이 빈번할 수 밖에 없다.

스레드 vs 프로세스

  • 프로세스는 독리적, 스레드는 프로세스의 서브셋
  • 프로세스는 각각 독립적인 자원을 가진다, 스레드는 프로세스 자원을 공유한다.
  • 프로세스는 자신만의 주소영역을 가진다, 스레드는 주소영역을 공유한다.
  • 프로세스간에는 IPC 기법으로 통신해야 한다.

PThread

POSIX 스레드: Thread 관련 표준 API

 

스레드 동기화 이슈

스레드 A,B,C는 실행순서가 정해져 있지 않다. (스케줄러가 관리)

Context Switching에 의해 실행순서가 꼬이는 경우 비정상 동작을 하게 되는 경우가 있는데 이를 동기화 이슈라고 한다.

스레드 관리가 필요함

여러 스레드가 동일한 자원을 동시에 수정하여 각 스레드 결과에 영향을 준다.

 

Mutual exclusion (상호 배제)

  • 어느 스레드가 변경하는 공유 변수에 대해 (Exclusive Access)가 필요
  • 스레드가 실행되기 전 열쇠(Exclusive Access)를 발급하고 Context Switching이 일어나 다음 스레드가 실행되어도 열쇠(Exclusive Access)가 없으면 실행되지 않는다.
  • 다시 Context Switching이 일어나 열쇠(Exclusive Access)를 반환하여야만 다음 스레드가 실행될 수 있다.
  • 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근하지 못하도록 막는다.

코드 예시

lock.acquire() # Exclusive Access
for i in range(100000):
	count += 1
locak.release() # Exclusive Access 반환

 

Mutex와 세마포어 (Semaphore)

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

  • Mutex (binary semaphore)
    • 임계구역에 하나의 스레드만 들어갈 수 있음
  • Semaphore
    • 임계구역에 여러 스레드가 들어갈 수 있음
    • counter를 두어서 동시에 리소스에 접근 할 수 있는 허용 가능한 스레드 수를 제어

세마포어 (Semaphore)

  • P (검사) 
    • 임계영역에 들어갈 때
    • S값이 1 이상이면 임계 영역 진입 후 S값 1 차감 (S값이 0이면 대기)
  • V (증가)
    • 임계영역에서 나올 때
    • S값을 1 더하고 임계영역을 나온다
  • S 세마포어
    • 초기 값만큼 여러 프로세스가 동시 임계영역 접근 가능

 

바쁜대기 - busy waiting

세마포어의 검사에서 S가 0이라면 계속 루프를 돌며 대기를 한다. - busy waiiting

즉, cpu를 계속 사용하는 상태이다.

S가 음수인 경우 바쁜 대기 대신 대기큐에 넣는다. (운영체제의 기술 사용)

 

교착상태(Deadlick)

무한 대기 상태

두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리는 상태

 

Deaklick 발생 조건

다음 네가지 조건이 모두 성립 될 때, 발생 가능성이 있다.

다음 네가지 조건을 없애는 방법으로 해결한다.

  1. 상호배제: 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다.
  2. 점유대기: 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
  3. 비선점: 프로세스가 어떤 자원이 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
  4. 순환대기: 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

기아상태(Starvation)

  • 특정 프로세스가 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태
  • 프로세스 우선순위를 수시로 변경 또는 오래 기다린 프로세스의 우선순위를 높여주는 방법을 사용하여 해결
  • 또는 FIFO 기반 요청 큐 사용

교착상태 vs 기아상태

  • 교착 상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생
  • 기아상태를 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 특정 프로세스는 영원이 자원 할당이 안되는 경우

'Computer Science' 카테고리의 다른 글

파일 시스템  (0) 2022.01.03
가상 메모리  (0) 2022.01.01
프로세스간 커뮤니케이션 (IPC)  (0) 2021.12.28
프로세스의 구조와 컨텍스트 스위칭  (0) 2021.12.27
인터럽트  (0) 2021.12.26

댓글