안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

기타 IT 지식 (Etc)

[운영체제] 프로세스 (Process), 쓰레드 (Thread)

피그브라더 2020. 7. 9. 15:12

1. 프로세스 (Process)

1-1. 개념

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

 

1-2. 특징

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

 

[Figure 1] 프로세스 (Process)

 

2. 쓰레드 (Thread)

2-1. 개념

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

 

2-2. 특징

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

 

[Figure 2] 쓰레드 (Thread)

 

3. 멀티 프로세스와 멀티 쓰레드 (Multi-Process and Multi-Thread)

3-1. 멀티 프로세스 vs 멀티 쓰레드

  멀티 프로세스 (Multi-Process) 멀티 쓰레드 (Multi-Thread)
개념 여러 개의 프로세스를 생성하여 하나의 작업을 처리하는 것을 의미한다. 하나의 프로세스 내에서 여러 개의 쓰레드를 생성하여 하나의 작업을 처리하는 것을 의미한다.
장점 ① 설계와 디버깅이 멀티 쓰레딩에 비해 단순하다.

② 다른 프로세스의 자원에 애초에 접근이 불가하기 때문에 고려할 동기화 이슈가 많지 않다.

③ 여러 개의 자식 프로세스들 중 한 프로세스에 문제가 생기더라도 다른 자식 프로세스들은 영향받지 않는다.
① 프로세스에 비해 문맥 전환(Context Switching)의 오버헤드가 작다. 저장 및 복원해야 하는 정보의 양이 상대적으로 적기 때문이다. 프로세스가 한 번 자원을 할당받으면 쓰레드들이 계속해서 이를 공유하며 사용할 수 있기 때문에 자원 활용의 효율도 높다고 할 수 있다.

② 복잡한 통신 기법 없이 쓰레드 간 데이터 통신이 용이하다. Stack 영역을 제외한 메모리 공간을 전부 공유하기 때문이다.
단점 문맥 전환(Context Switching)의 오버헤드가 상당히 크다. 쓰레드와 달리 프로세스는 메모리 공간을 서로 공유하지 않아서 저장 및 복원해야 하는 정보의 양이 굉장히 많기 때문이다.

② 각각의 프로세스는 독립된 메모리 공간을 할당받기 때문에 또 다른 프로세스의 자원에 접근하려면 IPC와 같은 복잡한 통신 기법을 거쳐야만 한다.
① 설계와 디버깅이 멀티 프로세스에 비해 까다롭다.

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

③ 하나의 쓰레드에서 문제가 생기면 해당 프로세스 전체가 영향받는다.

 

3-2. 멀티 쓰레드의 선호 경향성

윈도우나 리눅스와 같은 많은 운영체제들은 멀티 프로세스를 지원하긴 하지만 멀티 쓰레드를 기본으로 하고 있다. 심지어 웹 서버도 멀티 쓰레드 방식으로 구현되는 응용 프로그램 중 하나이다. 그렇다면 왜 멀티 쓰레드를 멀티 프로세스보다 선호하는 경향이 있는 것일까? 사실 이에 대한 답은 위에서 설명한 멀티 프로세스와 멀티 쓰레드의 장단점에서 찾을 수 있다. 멀티 프로세스의 경우 문맥 전환의 상당한 오버헤드로 인해 성능 상으로도 비효율적일 뿐만 아니라, 다른 프로세스와 데이터 통신을 수행하는 것이 여간 복잡한 것이 아니다. 분명 멀티 쓰레드도 설계와 디버깅이 까다롭고 동기화를 철저히 해야 한다는 단점을 가지고는 있지만, 이에 비해 멀티 프로세스의 단점은 너무나도 명확하고 생각보다 감당하기 어려운 수준인 경우가 많다. 그래서 멀티 쓰레드를 많이 선호하는 경향이 있는 것이다.