프로세스 vs 스레드

타미·2020년 11월 2일
0

Hello CS

목록 보기
3/8
post-thumbnail

프로그램

  • 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다.

프로세스

  • 실행중인 프로그램
  • OS 실행 단위

스레드

  • “프로세스 내에서 실행되는 여러 흐름의 단위”
  • 프로세스의 특정한 수행 경로
  • 프로세스 실행 단위


스레드들이 프로세스의 Code/Data/Heap 메모리 영역을 공유하는 모습
(이미지 출처: Heee's Development Blog)
프로세스는 서로 독립적이다.

  • A 프로세스에 문제 있을 때, B 프로세스와 상관없다.

스레드는 서로 공유하는 자원이 있다.

  • A 스레드 문제 있으면, B 스레드 - 프로세스 전체에 문제가 있다.
  • 자바 프로그램에서 어떤 오류 발생하면 프로세스(프로그램) 자체가 꺼지는 현상

code

  • 실행할 프로그램의 코드가 저장되는 영역
  • 컴파일 시 크기 결정

data

  • 정적 할당
    • global 변수, static 변수, 정적 배열 (array), 정적 구조체
  • 컴파일 시 크기 결정

heap

  • 동적 할당 객체에 대한 영역
  • 런타임 시 크기 결정

stack

  • 임시로 사용되는 것 local 변수, 매개변수, return
  • 런타임 시 크기 결정


스레드는 독립적인 Stack, Register를 가진다.

  • Register (PC Program Counter 명령어 어디까지 수행했는지)

Context Switching

CPU가 한 개의 Task(Process / Thread) 를 실행하고 있는 상태에서 Interrupt 요청에 의해 다른 Task 로 실행이 전환되는 과정에서 기존의 Task 상태 및 Register 값들에 대한 정보 (Context)를 저장하고 새로운 Task 의 Context 정보로 교체하는 작업

  • Task (Procees / Thread)를 바꾸는 작업
  • Interrupt 요청에 의해 발생한다.
    • HW I/O
    • 스케줄링
    • Context Swtiching 여부는 스케줄러에 의해 결정된다.
  • Context Switching을 하는 동안은 다른 작업을 할 수 없기 때문에 성능에 유의미하다.
    • 오버헤드 (작업 외에 추가적으로 소요되는 시간)

Task의 상태

Process

  • 실행 중

Ready

  • 대기 Queue에 있는 상태

Blocked

  • 스케줄링 대상이 아닌 상태

Process Context Switching

PCB

  • 각 프로세스는 PCB를 가진다.
  • Process Control Block | 프로세스 제어 블록
  • PCB는 os 커널에 위치한다.
  • Process를 바꿀 때 (Context Switching)할 때 PCB에 있는 정보를 기준으로 바꾼다.

동작


PCB에 있는 정보를 CPU로 올린다.
프로세스 간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐시 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크다.


Thread Context Switching

TCB


Process가 Process Control Block을 가지는 것처럼 Thread도 Thread Control Block을 가진다.
Thraed가 Process에서 파생된 것이기 때문에 위와 같은 구조를 가진다.


why multi thread?

  • 프로세스 간 통신 (IPC : Inter Process Communication)보다 Thread 간 전환 속도가 빠르다.
    • 처리 비용 ↓ 응답 시간 ↓
    • 프로세스 처리 시, CPU 교체 + 캐시 메모리까지 초기화한다.
    • Thread는 Stack 영역만 처리하면 된다.

JAVA Context Switching

  • JVM은 멀티스레드만(멀티프로세스) 지원한다.
    • 성능상의 이유 때문인다.
    • 하나의 프로그램에 하나의 JVM이다.
  • JVM에서 Thread Context Switching을 관리한다.
    • JVM이 스케줄링을 진행
    • 다음 정보를 관리한다.
      스레드가 몇 개 존재하는지
      스레드로 실행되는 프로그램 코드의 메모리 위치는 어디인지
      스레드의 상태는 무엇인지
      스레드 우선순위는 얼마인지
profile
IT's 호기심 천국

0개의 댓글