[OS] Process(프로세스) / Thread(스레드)
프로그래밍을 시작하게 되면서 과거에는 단어의 정확한 이해가 없이 대략적인 의사전달만을
위한 단어들을 말하는 습관을 고치는 계기가 되었다.
그중 하나가 스레드와 프로세스였는데 이 둘은 확연히 다른 단어이며
해당 포스팅에서 다뤄볼 것이다.
1. Process(프로세스)
운영체제로부터 자원을 할당받은 작업의 단위이며,
각 작업에는 운영체제로부터 부여받은 프로세스 식별자(PID)를 가지고 있다.
한 개의 프로세스에는 하나 이상의 스레드를 가지고 있고,
프로세스 간에 통신을 하려면 IPC(Inter Process Communication)를 요구한다.
프로세스는 Code / Stack / Heap / Data의 4가지 영역으로 구분되어 있으며,
Code / Data를 정적 영역으로, Stack / Heap을 동적 영역으로 구분한다.
프로세스가 생성되는데 오버헤드(Overhead)가 크기 때문에,
Context-Switching 또한 오래 걸릴 수 있다.
✽ Overhead : 작업에 걸리는 소요되는 시간 또는 메모리를 뜻함
✽ Context-Switching : 멀티 프로세스 환경에서 차우선인 다른 프로세스가
인터럽트 요청에 의하여 차우선의 프로세스 실행을 위해 기존 프로세스의
상태를 저장하고 교체하는 작업을 칭함
2. Thread(스레드)
프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이며,
스레드 또한 프로세스 내에서 실행 순서와 스케줄링을 위하여 스레드 식별자(TID)를 부여받는다.
스레드는 프로세스에서 사용하는 메모리와 시스템 자원을 공유하며,
한 프로세스 내에서 여러 개의 스레드를 통한 병렬적인 처리도 가능하다.
프로세스 내에서 스레드는 Stack을 따로 할당 받으며,
그 외의 Code / Heap / Data의 영역을 다른 스레드와 공유한다.
그로 인하여 스레드 한 개가 문제를 일으킨다면 영역을 공유하는
다른 스레드에게도 문제를 발생시킬 수 있다는 것이다.