럿고의 개발 노트

운영체제 - Thread(쓰레드) 본문

Etc Note

운영체제 - Thread(쓰레드)

KimSeYun 2019. 12. 13. 22:05

운영체제 - Thread(쓰레드)

 

Thread의 개념

  • 프로세스의 처리속도를 높이기 위해 프로세스가 수행해야 할 여러 작업들을 나누어서 수행할 수 있도록 설계된 것
  • 프로세스는 자신만의 영역을 가지고 있지만, 쓰레드는 자신만의 영역이 존재하지는 않음
    • 모든 쓰레드는 프로세스의 상태를 공유
    • 즉, 쓰레드간 별도 통신이 필요하지 않음
  • Light Weight Process
  • 각 프로세스간에 데이터 접근이 불가
  • 하나의 프로세스에서 여러개의 쓰레드를 생성할 수 있고 쓰레드들은 동시에 실행이 가능함
  • 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능

쓰레드의 등장

  • 커널 내의 스택이 하나이기 때문에 속도가 떨어져서 커널스레드를 구상하기 시작함
  • 커널스레드 각자가 스택을 가짐으로써 동시에 여러 프로세스, 커널 내부에서 수행할 수 있게 됨

쓰레드의 동작

  • 하나의 프로세스에서 가장 핵심이 되는 것은 PC(Program Counter), SP(Stack Pointer)
  • 쓰레드는 각 스택 영역을 가지고 있는 하나의 함수라고 생각하면 이해가 쉬움
    멀티 쓰레드
  • S/W 병행 작업 처리를 위해 사용

멀티 프로세싱 vs Thread

  • 멀티 태스킹
    • 하나의 CPU에서 수시로 프로세스를 변경하면서 프로그램을 실행
      (사람 눈에는 모든 프로세스가 동시에 실행되는 것처럼 보이지만, 프로세스는 하나만 실행됨)
  • 멀티 프로세싱
    • 하나의 프로세스를 여러개의 CPU를 사용해서 실행
  • 멀티 쓰레드
    • 여러개의 쓰레드를 만들어서 멀티 코어를 통해 활용도를 높임

쓰레드의 장단점

  • 장점
    1. 사용자에 대한 응답성 향상
      • 여러개의 기능을 각기 다른 쓰레드에 할당 시켜서 작업처리 시간 향상
      • 서버가 동시에 접속한 클라이언트에 대응하기 위해 별도 쓰레드를 생성해 응답
    2. 자원 공유 효울
      • 프로세스의 데이터를 모두 접근 가능
    3. 작업 분리로 인해 코드 간결
  • 단점
    1. 여러개의 쓰레드 중 하나의 쓰레드에 문제가 있어도, 전체 프로세스가 영향을 받음
    2. 쓰레를 많이 생성하면 context switching이 많이 일어나서 성능 저하
      • 모든 쓰레드를 스케쥴링해야 하기 때문
      • context switching : 현재 진행하고 있는 Task의 상태 저장, 다음 진행할 Task의 상태 값을 읽어 적용하는 과정

프로세스 vs 쓰레드

  • 프로세스 독립적 / 쓰레드는 프로세스의 서브셋
  • 프로세스는 독립적 자원을 가짐 / 쓰레드는 프로세스 자원 공유
  • 프로세스는 독립적 주소 영역 / 쓰레드는 주소영역 공유
  • 프레서스간에는 IPC통신을 해야함 / 쓰레드는 필요 없음

쓰레드의 동기화(Synchronization)

  • 프로세스 내에 여러개의 쓰레드가 형성
  • 프로세스 안에 있는 영역 공유
  • 그러면 공유하고 있는 프로세스 자원에 동기화 문제가 발생할 수 있음
  • 실행순서는 스케쥴러가 상황에 맞게 결정되기 때문에 동기화 문제 발생

교착상태(deadlock) / 기아상태(Starvation)

  • 교착상태
    • 여러개의 작업이 서로 상대방의 작업이 끝나기만을 기다리기 때문에 다음 단계로 진행하지 못하는 상태
    • 배치 처리 시스템에서는 일어나지 않음
    • 프로세스, 스레드 둘다 이와 같은 상태가 발생할 수 있음
    • 무한 대기 상태라고도 함
    • 여러 프로세스가 동일 자원 점유를 요청할때 발생
  • 교착상태 발생 조건
    1. 상호배제 : 프로세스들이 필요로 하는 자원에 대한 배타적인 통제권 요구
    2. 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림
    3. 비선점 : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을수 없음
    4. 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음
  • 기아상태
    • 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
    • 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할때, 특정 프로세스는 영원히 자원이 할당되지 않는 경우

출처

https://velog.io/@pa324/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Thread%EC%8A%A4%EB%A0%88%EB%93%9C-rqk2kafwhw

 

운영체제 - Thread(스레드)

스레드(Thread) 의 개념 - 프로세스의 처리속도를 높이기 위해 하나의 프로세스가 수행해야 할 여러 작업들을 나누어 수행할 수 있도록 설계된 것이 스레드 - 1개의 프로세스를 3개의 스레드로 구성한 것은 3개의 프로세스와 같은 처리속도를 낼 수 있다. - 프로세스는 자신만의 영역을 갖고 있지만, 스레드는 그렇지 않다. - 한 프로세스에 존재하는 모든...

velog.io

 

'Etc Note' 카테고리의 다른 글

마이크로소프트웨어 콘퍼런스 2019(MASOCON 2019) 후기  (0) 2019.11.24
Comments