[OS] process, thread

이혜윤·2024년 1월 5일

process vs process

실제 작동하는 상태이냐 아니냐.
동적이냐 아니냐의 차이!

1. program

  • 어떤 데이터를 사용해서 어떤 작업을 할지 절차를 담은, 실행이 가능한 파일
  • 저장 장치(하드디스크)에 저장되어 있음

2. process

  • 프로그램을 메모리에 올린 동적인 상태
  • 프로그램이 실행되면 "프로세스 인스턴스"가 생성됨
  • OS가 프로그램을 메모리에 올리고 CPU를 위한 PCB(Process Control Block)을 할당한 상태
  • 프로세스란 프로그램 + PCB
  • 스케줄러의 입장에서는 "task"

3. Thread

  • CPU 관점에서 처리하는 실행 단위
  • 프로세스가 생성되면 CPU 스케줄러는 프로세스가 해야할 일을 CPU에 전달. 이 때 단위가 스레드. (CPU는 프로세스로부터 전달받은 스레드를 수행)
  • OS 입장에서 작업은 프로세스, CPU 작업은 프로세스 내의 스레드.
  • 프로세스는 최소한 1개의 스레드를 가지며, 2개 이상의 스레드를 가진 경우 멀티 스레드

4. 메모리 영역

  • stack 영역을 독립적으로 소유. 기능 면에서 독립
  • 정적: static data, code
  • 동적: stack, heap

4.1 code 영역

  • 실행할 프로그램의 코드가 저장된 영역

4.2 data 영역

  • 전역 변수와 정적 변수가 저장되는 영역
  • 초기화되지 않은 변수는 BSS에 저장 -> BSS?
  • 코드가 실행되면서 사용하는 변수나 파일 등의 자원을 모아놓는 영역

4.3 stack 영역

thread 단위로 소유

compile 시점에 크기 결정

  • 프로세스에서 순간적으로 처리해야 하는 정보를 위한 임시 메모리 영역
  • 함수 안에 선언된 지역변수, 매개 변수, 리턴 값, 돌아올 주소 등을 저장
  • 함수 호출 시 해당 정보를 기록(push), 종료되면 제거(pop)
  • LIFO Stack 자료구조 사용
  • 메모리의 높은 주소에서 낮은 주소로 할당되는 방식
  • 무한하게 할당할 수 X
  • thread 별로 stack을 독립적으로 소유하여 독립적인 함수 호출이 가능해짐. 독립적인 실행 흐름을 소유
  • 프로세스가 가지는 스레드의 개수만큼 실행 단위를 가지는 것. 개별 스택을 통해 CPU로 하여금 독립적인 단위로 처리하게 해주는 것.

4.4 heap 영역 (보충)

  • 프로그래머가 직접 공간을 할당, 해제하는 메모리 공간
  • JAVA에서는 객체 데이터 영역에 해당. ex. new 연산자로 생성된 객체가 heap영역을 사용
  • FIFO로 가장 먼저 들어온 데이터가 가장 먼저 인출되는 방식
  • 메모리의 관점에서 보면 낮은 주소에서 높은 주소의 방향으로 할당

5. thread가 필요한 이유

5.1 응답성 향상

  • 입출력으로 인해 작업이 막혀도 다른 스레드들이 작업을 계속해 응답

5.2 자원의 공유(heap, data, code)

  • 프로세스가 가진 자원을 스레드들이 공유해 작업은 원활하게 진행
  • 불필요한 자원의 중복을 막아주어 효율성 향상

5.3 다중 CPU 지원 시 멀티 스레드로 처리 가능

  • 2개 이상의 CPU를 가진 컴퓨터를 사용해 CPU 사용량을 높일 수도

6. Program Counter

profile
구르미 누나

0개의 댓글