본문 바로가기
카테고리 없음

스레드와 멀티 태스킹(2)

by winter_sunshine 2023. 7. 9.

안녕하세요~ 이번 시간에는 스레드 상태와 운용, 스레드 컨텍스트, 스레드 컨텍스트 스위칭에 대해 알아보는 시간을 가져보겠습니다!  그럼 시작하겠습니다~

 

1.  스레드의 기본 상태

  • OS 마다 조금씩 상이
  • 스레드 상태는 TCB에 저장됨

스레드의 기본 상태

 

2.  스레드에 대한 연산/운용(operation)

  • 스레드 생성
    • 프로세스 생성시 main 스레드 자동 생성
    • 한 스레드는 다른 작업 스레드 생성 가능
      • 부모-자식 관계를 가지나 약한 관계를 지님
      • 부모 스레드는 자식 스레드를 id로 제어 가능
  • 스레드 종료
    • 프로세스 종료시 그에 속한 모든 스레드 종료
      • 임의의 스레드에서 exit() 호출시
      • 부모 스레드가 종료되더라도 자식 스레드가 종료되지는 않음
    • pthread_exit() 호출시 해당 스레드만 종료됨
    • 한 스레드가 다른 스레드를 강제 종료하는 방법은 일반적으로 제공하지 않음
      • 약속된 신호 전달하고, 신호를 수신한 스레드는 스스로 종료
      • 공유 변수를 통한 확인으로 지연 종료
  • 스레드 조인(join)
    • 한 스레드가 다른 스레드의 종료를 대기
      • 보통은 부모가 자식이 작업을 끝마치기를 기다릴 때 사용

스레드 조인(join)

  • 스레드 양보(yield)
    • 실행 중인 스레드가 스스로 CPU를 다른 스레드에게 양보하기 위해 실행을 중단하는 행위
    • 양보한 스레드는 ready 상태가 됨

 

 

3.  스레드 컨텍스트(thread context)

  • 스레드가 실행 중인 상태 정보
    • CPU 레지스터들 값
    • TCB에 저장

스레드 컨텍스트(thread context)

 

4.  스레드 제어 블록(TCB, Thread Control Block)

  • 스레드를 실행 단위로 다루기 위해 스레드에 관한 정보를 담은 구조체
    • 스레드 엔터티(thread entity), 스케줄링 엔터티(scheduling entity)라고도 불림
    • 커널 영역에 생성되고, 커널에 의해 관리
      • 스레드가 생성될 때 생성
      • 스레드가 소멸되면 제거
  • TCB의 구성 요소

TCB의 구성 요소

 

※ 스레드 테이블은 존재하지 않음. 각각의 스레드를 포함하고 있는 PCB에 의해서 유지 및 관리됨.

 

 

5.  PCB  TCB

PCB와 TCB

 

6.  준비 리스트블록 리스트

준비 리스트와 블록 리스트

 

7.  스레드 컨텍스트 스위칭

  • 현재 실행 중인 스레드를 중단시키고, CPU를 다른 스레드에게 할당하는 과정
    • 현재 CPU에 존재하는 스레드 컨텍스트를 TCB에 저장하고, 새로 실행될 스레드 컨텍스트를 CPU에 적재
    • 스레드 스위칭이라고 함
      • 커널이 CPU 자원을 한 스레드에서 다른 것으로 옮기는 작업

스레드 컨텍스트 스위칭

 

8.   컨텍스트 스위칭이 일어나는 경우

  • 시스템 호출 처리 과정 중에
    • 스레드가 자발적으로 다른 스레드에게 양보
      • sleep(), yield(), wait() 등에 의해
    • 블록되는 경우
      • read(), write()등에 의해
  • 인터럽트 발생으로 ISR 실행 중에
    • 스레드의 시간 할당량이 만료된 경우
      • 타이머 인터럽트에 의해
    • I/O 장치로부터 인터럽트가 발생한 경우
      • 현재 스레드보다 우선순위가 더 높은 스레드의 I/O 작업이 완료된 경우

 

9.   컨텍스트 스위칭  과정

  1. CPU 레지스터 저장 및 복원
  2. 커널 정보 수정

컨텍스트 스위칭 과정

  • 커널 공간에 저장되는 TCB는 '매핑 테이블'을 통해서 물리 메모리의 특정 부분에 저장됨
  • 스레드 컨텍스트 복원 또한 '매핑 테이블'을 통해 물리 메모리로부터 가져와서 CPU에 적재

 

10.  컨텍스트 스위칭 오버헤드

  • 컨텍스트 스위칭은 기본적으로 CPU의 일
    • CPU 시간 소모
    • 전환 시간이 길거나 잦은 경우 처리율 저하
    • 컨텍스트 스위칭 시간 최소화 필요
      • 멀티 코어 CPU에서는 한 프로세스를 한 코어에 배치하거나 CPU에 스레드 별로 레지스터 셋을 두기도 함

 

11.  컨텍스트 스위칭 오버헤드 : 같은 프로세스로

  • 같은 프로세스의 다른 스레드로 전환하는 경우
    • 컨텍스트 저장/복원, TCB 리스트 조작, 캐시 플러시/채우기

같은 프로세스 다른 스레드로 컨텍스트 스위칭

 

12.  컨텍스트 스위칭 오버헤드 : 다른 프로세스로

  • 다른 프로세스의 스레드로 전환하는 경우
    • CPU 주소공간의 변경으로 추가적인 오버헤드 발생

다른 프로세스로 컨텍스트 스위칭

 

 

 

 

 

 

지금까지 스레드 상태와 운용, 스레드 컨텍스트, 스레드 컨텍스트 스위칭에 대해 설명하였습니다.

아마도 많이 어려워 하실 것이라고 생각하는데요. 최대한 여러분이 이해하기 쉽게 설명하도록 노력하겠습니다~!

다음 시간에는 커널 레벨 스레드, 사용자 레벨 스레드, 멀티 스레드의 구현에 대해 알아보는 시간을 가질 예정입니다!

다들 고생 많으셨습니다~ 좋은 하루 되세여!!