IT/OS

[OS] Thread & Process - 1

wakelight23 2025. 1. 14. 20:52

Thread (스레드)

프로세스(process) 내에서 실행되는 실질적인 작업 단위

● 모든 프로세스는 최소 하나의 스레드(메인 스레드)를 가지고 있다.

온라인 쇼핑하면서 파일 다운로드도 하고 영상도 시청하고... 모두 다 Thread 덕분!

 

● 프로세스의 자원을 이용하여 실제 작업을 수행

● 같은 프로세스 내의 다른 스레드들과 자원을 공유

프로세스(process)란?
- 프로그램을 실행 시켜 작동하지 않던 것을 작동하도록 변화시키는 것
- ex) 바탕화면에 Chrome.exe를 더블 클릭 → process! 
- 컴퓨터가 작업 중인 프로그램

 

● 프로그램(Program)과 프로세스(Process)의 차이

프로그램 프로세스
- 어떤 작업을 하기 위해 실행할 수 있는 파일 - 실행되어 작업중인 컴퓨터 프로그램
- 파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은
정적인(Static) 상태
- 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태
- 코드 덩어리 - 코드 덩어리를 실행한 것

 

 

● 프로세스 안에는 여러 개의 스레드들이 있기 때문에,
   스레드 수가 많을수록 동시에 처리할 작업이 많아져 성능 높아진다.

 

● 하나의 프로그램 당 하나 이상의 프로세스를 가지고 있고,
   하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.

 

Process & Thread Memory

● 프로세스의 자원 구조

Process 구조

 

  ○ 스택(Stack) 영역 :
    - 지역 변수와 같은 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장하는 독립적인 공간

    - 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸

    - IF, Stack영역을 초과하면 'stack overflow' 에러 발생

 

  ○ 힙(Heap) 영역 : 
    - 생성자, 인스턴스와 같은 동적(Dynamic)으로 할당되는 데이터들을 위해 존재하는 공간

    - 사용자가 직접 메모리 공간에 할당하고 해제

 

  ○ 데이터(Data) 영역 :
    - 코드가 실행되면서 사용하는 전역 변수나 각종 데이터들의 영역

   

  ○ 코드 (Code/Text) 영역 :
    - 프로그래머가 작성한 프로그램 함수들의 코드가 CPU가 해석 가능한 기계어 형태로 저장되어 있는 공간

 

  ○ 화살표가 합쳐지는 부분은 Code 영역과 Data 영역에서 선언할 때
     크기가 결정되는 것은 정적 영역이지만,

     Stack 영역과 Heap 영역은 프로세스가 실행되는 동안 크기가 늘고 줄어드는 동적 영역이다.

 

 

온라인 쇼핑하면서 동영상 시청이 가능한 이유?

● 스레드의 자원 공유

  - 스레드끼리 프로세스 자원을 공유하면서 프로세스 실행 흐름의 일부가 되기 때문에 가능한 것

프로세스 내에 여러개의 스레드가 들어있다!

  - 프로세스 4가지 영역 중 스레드는 Stack만 할당받아 복사

  - Code, Data, Heap은 프로세스 내의 다른 스레드들과 공유

스레드는 Stack만 할당! 나머지는 공유

 

 

 

# 다음 정리할 것

스레드 개념
프로세스, 프로그램 차이

스레드의 자원 공유

프로세스, 스레드의 생명 주기

컨텍스트 스위칭

스레드 스케줄링

멀티 스레드