Computer Science/OS

[OS] Process와 Thread 개념

[앙금빵] 2022. 9. 29.

프로그램(Program)은 특정 작업을 수행하기 위한 일련의 명령어들로 이루어진 하나의 실행파일을 의미한다.

프로세스(Process)

프로세스 개념

  • 프로세스(Process)는 메인메모리에 로드되어 실행 중인 특정 프로그램의 인스턴스를 의미한다.
  • 프로세스(Process)는 시스템으로부터 공간적 자원(=메모리 공간)과 시간적 자원(=CPU 시간)을 일정량 할당받아 특정 작업을 수행한다.
  • 운영체제는 각 프로세스에게 할당된 시스템 자원들을 관리하는 역할을 수행한다.

프로세스 특징

  • 프로세스는 서로 겹치지 않는 독립된 메모리 공간(Code, Data, Heap, Stack) 영역을 할당받는다.
  • 가상 메모리 시스템에 의해 하나의 프로세스는 다른 프로세스의 메모리 공간에 접근할 수 없도록 제한된다.
  • 다른 프로세스의 자원에 접근하려면 IPC(Inter-Process Communication, 프로세스 통신)을 이용해야 한다.
  • 기본적으로 각 프로세스는 하나의 Thread(=main thread)를 가지며, 필요한 경우 추가로 Thread를 생성할 수 있다.


쓰레드(Thread)

쓰레드 개념

  • Thread는 특정 프로세스 내에 존재하는 각각의 실행 흐름을 의미한다.
  • 한 프로세스의 Thread들은 해당 프로세스가 할당받은 시스템 자원들을 일부 공유한다.

쓰레드 특징

  • 한 프로세스의 Thread들은 Stack 영역들만 별도로 할당받고 Code, Data, Heap 영역은 공유한다.
  • 동일한 프로세스 내 존재하는 Thread들끼리는 동일한 자원에 대하여 읽고 쓰기가 가능하다.
  • 자신만의 고유한 Thread ID, 프로그램 카운터, Register 집합을 가진다.
  • 기본적으로 각 프로세스는 최소 하나의 Main Thread를 가진다.

 


멀티 Process vs 멀티 Thread

멀티 Process

여러 프로세스를 생성하여 하나의 작업을 처리한다.

+) 설계와 디버깅이 멀티 Thread에 비해 단순하다.

+) 다른 프로세스와 격리되어 있기에 고려할 동기화 이슈가 적다.

+) 여러 개의 자식 프로세스 들 중 한 프로세스에 문제가 생기더라도 다른 자식 프로세스들은 영향받지 않는다.

-) 문맥 전환(Context Switching)의 오버헤드가 상당히 크다.

→ Thread와 달리 프로세스는 서로간 정보교환을 하지 않아 저장 및 복원해야하는 정보의 양이 굉장히 많기 때문이다.

→ 각각의 프로세스는 독립된 메모리 공간을 할당받기 때문에 또 다른 프로세스 자원에 접근하기 위해서는 IPC와 같은 복잡한 통신기법을 거쳐야 한다.


멀티 Thread

하나의 프로세스에 여러 Thread를 생성하여 하나의 작업을 처리하는 것을 의미한다.

+) 멀티 프로세스에 비해 오버헤드가 적다.

→ 저장 및 복원해야 하는 정보의 양이 상대적으로 적기 때문이다.

→ (공유자원) 복잡한 통신 기법 없이 Thread간 데이터 통신이 용이하다. Stack 영역을 제외한 메모리 공간을 전부 공유하기 때문이다.

→ (공유자원) 프로세스가 한번 자원을 할당 받으면 Thread들이 이 자원들을 계속 사용할 수 있기에 자원 활용이 높다.

-) 설계와 디버깅이 멀티 프로세스에 비해 까다롭다.

-) 자원을 공유하기 때문에 동기화 이슈가 발생할 수 있다.

-) 하나의 Thread에서 문제가 생기면 전체 프로세스가 영향받는다.

 

멀티 쓰레드를 선호하는 이유

멀티 프로세스 경우 문맥 전환의 상당한 오버헤드로 인해 성능 상으로도 비효율적이며 다른 프로세스와 통신을 수행하는 것은 복잡한 과정을 걸친다.

멀티 프로세스의 단점은 너무나 명확하고 생각보다 감당하기 어려운 수준인 경우가 많다. 그렇기에 멀티 쓰레드를 선호하는 경향이 있다.

Overhead
어떠한 처리를 진행하기 위해 들어가는 간접적인 처리 시간 메모리 등을 말한다.

Context Switching
 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스 상태 또는 레지스터 값을 저장하고  CPU가 다음 프로세스를 수행하도록 새로운 프로세스 상태, 또는 레지스터 값(Context)를 교체하는 작업을 Context 스위칭이라고 한다.

 


참조

https://it-eldorado.tistory.com/

댓글