프로세스와 스레드

프로세스

  • 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것
  • 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받으며 이것들을 총칭하여 프로세스라고 한다.
    • 할당받는 메모리에는 함수의 매개변수, 복귀 주소와 로컬 변수와 같은 임시 자료를 갖는 스택 부분이 있고, 프로세스 실행 중에 동적으로 할당되는 부분이 있다.

프로세스 제어 블록

  • 프로세스 제어 블록(Process Control Block, PCB)는 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조이다. 운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성 한다.
  • 프로세스가 인터럽트가 발생해서 프로세스 전환이 일어난다면 진행하던 작업상황을 PCB에 저장하고, 다시 프로세스가 실행되면 PCB에 저장된 정보를 불러와서 실행된다.

스레드

  • 스레드는 프로세스의 실행 단위이다. 한 프로세스 내에서 동작되는 여러 실행 흐름이다.
  • 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택으로 구성된다.
  • 같은 프로세스 내의 다른 스레드들은 힙, 프로세스 데이터, 코드 부분을 공유한다.

스레드마다 스택을 독립적으로 할당하는 이유

  • 위에서 말한 함수의 매개변수, 복귀 주소와 로컬 변수와 같은것을 저장하는 스택부분은 함수 호출이 가능하게 해주는 것을 의미한다. 따라서 스레드가 독립적인 스택을 갖는다는 것은 독립적인 함수 호출 -> 독립적인 실행 흐름을 가진다는 것을 의미한다. 따라서 프로세스내의 독립적인 실행흐름을 추가하기 위한 최소 조건으로 스택을 할당한다.

멀티 스레드와 멀티 프로세스의 비교

멀티 스레딩을 이용하면 메모리 공간과 시스템 자원 소모가 줄어들게 된다. 스레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용하여 바로 데이터에 접근할 수 있기 때문이다. 하지만 데이터를 공유하는 만큼 데이터의 동기화 문제도 발생하기 때문에 이를 잘 고려해야 한다.

  성능 동기화 오류
멀티 스레드 스택을 제외한 영역을 공유하므로 메모리 절약, 프로그램 응답 시간 단축 메모리를 공유하므로 데이터를 다룰 때 동기화 해야하는 어려움 존재 하나의 스레드가 오류 발생시 프로세스 내부의 전체 스레드에게 영향
멀티 프로세스 독립된 메모리와 독립적으로 적재된 코드가 CPU에서 실행되므로 메모리 사용량, 처리 시간 증가 독립된 메모리공간을 가지므로 동기화 문제가 없음 독립적으로 작용하기 때문에 오류가 발생해도 다른 프로세스에 영향 X

참고사이트 https://github.com/JaeYeopHan/Interview_Question_for_Beginner