그 외 공부/운영체제

[운영체제] 프로세스와 스레드의 차이

SeongOnion 2021. 6. 6. 17:55
728x90

프로세스와 스레드의 차이

프로그램(Program)

특정 작업을 위해서 실행할 수 있는 파일 (코드의 묶음)

보조기억장치에 저장되어 있음 (디스크 등)

정적인 형태

 

→디스크에 저장되어 있는 binary파일을 프로그램이라고 보면 된다.

 

프로세스(Process)

운영체제로부터 메모리를 할당 받아 실행 중인 프로그램

실행되면 주기억장치에 데이터가 적재됨 (RAM)

동적인 형태

 

→ 프로그램이 RAM에 적재되어 실행중인 상태인 것을 프로세스라고 할 수 있다.

 

프로세스의 구성 요소 (Process Control Block)

1) PID (Process ID)

  • 프로세스를 식별할 수 있는 고유번호

2) Process State

  • 해당 프로세스가 현재 어떠한 상태인지를 나타내는 정보로, Ready, Waiting/Block, Running, Terminated가 있다

3) Program Counter

  • 해당 프로세스가 다음에 실행해야 할 명령어의 주소를 저장한다. 컨텍스트 스위칭 발생 후 프로세스를 재동작시킬 때 Program Counter에 저장된 값을 보고 다음 실행할 명령을 식별한다.

그 외 프로세스에 대한 다양한 정보들이 PCB에 저장되어 있다.

 

https://en.wikipedia.org/wiki/Process_control_block 참고!

 

Process control block - Wikipedia

A process control block (PCB) is a data structure used by computer operating systems to store all the information about a process. It is also known as a process descriptor. When a process is created (initialized or installed), the operating system creates

en.wikipedia.org

 

프로세스의 메모리 공간

1) Code 영역

  • Text 영역이라고도 불리며, 프로그램의 코드 자체를 저장하는 공간

2) Data 영역

  • 프로그램의 전역 변수, 정적 변수들이 저장되는 공간

3) Heap 영역

  • 동적으로 할당되는 변수가 저장되는 공간

4) Stack 영역

  • 지역변수들이 저장되는 공간

 

스레드란(Thread)?

프로세스 내에서 실행되는 작업 단위

 

스레드 구성 요소 (Thread Control Block)

1) Thread ID

  • 스레드를 식별할 수 있는 고유번호

2) Program Counter

  • 해당 스레드가 다음에 실행해야하는 명령어의 주소를 저장한다. 프로세스와 마찬가지로 스레드끼리도 컨텍스트 스위칭이 발생하기 때문에 컨텍스트 스위칭 후 스레드를 재가동하기 위해 필요한 정보를 저장한다.

그 외 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bycho211&logNo=220994380643 참고!

스레드의 메모리 공간

⭐️ 스레드는 하나의 프로세스 안에서 Code, Data, Heap 영역의 데이터들을 다른 스레드들과 공유한다 ⭐️

  • 스레드는 Stack 영역만을 개별적으로 할당받으며, 그 외의 데이터들은 다른 스레드들과 공유한다.
  • 스레드마다 개별적으로 Stack을 할당해줌으로써, 각 스레드들의 독립적인 작업 실행을 보장한다.

 

프로세스와 스레드 비교

프로세스

  1. 프로그램이 운영체제로부터 메모리를 할당받고 실행중인 상태
  2. 다른 프로세스들과 자원을 공유하지 않음
  3. 하나의 프로그램을 여러 개의 프로세스를 이용해 작동시킬 때 (멀티 프로세싱)
    • 각 프로세스마다 메모리를 할당해줘야해서 메모리 낭비가 심해질 수 있고, 컨텍스트 스위칭 시 발생하는 비용이 큼.
    • 각 프로세스가 개별적으로 동작하기 때문에 하나의 프로세스에 오류가 생기더라도 다른 프로세스에는 영향을 주지 않음
    • 크롬의 각 탭들은 멀티 프로세싱으로 동작

스레드

  1. 프로세스 내에 존재하는 프로세스의 작업 단위
  2. Stack 영역을 제외한 데이터들을 다른 스레드들과 공유함
  3. 하나의 프로세스를 여러 개의 스레드를 통해 작동시킬 때 (멀티 스레딩)
    • 다른 스레드들과 자원을 공유하기 때문에 컨텍스트 스위칭 시 발생하는 비용이 적음
    • 스레드들이 자원을 공유하기 때문에, 하나의 스레드에 오류가 생기거나 공유 자원을 망가트릴 시 다른 스레드들에도 영향을 줌
      • Thread Safe ? - 특정 자원에 여러 개의 스레드가 동시에 접근하더라도 프로그램이 정상적으로 실행되는 경우
      • 뮤택스, 세마포어 등을 활용해 구현할 수 있다.
    • 하나의 크롬탭에서 실행되는 작업들이 멀티 스레드 방식으로 동작