프로세스와 스레드 개념은 개발자한테 밀접하게 닿아있고, 많은 기업들의 기술면접에도 자주 언급되는 주제이기도 하다.
그러면 프로세스와 스레드에 대해 알아보자.
프로세스는 현재 실행 중이거나 곧 실행 가능한 PCB를 가진 프로그램이다.
PCB에 대해 알아보기 앞서, 프로그램과 프로세스의 차이점에 대해 알아보자.
프로그램은 디스크에 저장된 수동적 실체이다. 잘 와닿지 않을 수 있는데 그냥 정적인 코드 덩어리라고 생각하면 된다.
프로세스는 프로그램 카운터와 프로세스 제어 블록(PCB)을 가지며, 실행 흐름을 제어하는 능동적 실체이다.
쉽게 생각하면 메모리에 적재되기 전에는 프로그램이고, 적재된 후에는 프로세스가 되는 것이다.
프로세스는 프로세서에 의해 수행되는 프로그램 단위로, 다음과 같은 특징을 가진다.
프로세스의 메모리는 정적(코드, 데이터), 동적(힙, 스택) 영역으로 구성되었다.
1. 코드(Code)영역 : 실행 가능한 프로그램 코드 영역, CPU가 프로세스 실행 시 해당 내역 참조
2. 데이터 (Data)영역 : 전역변수, 정적 변수, 작업 공간 등을 담음
3. 힙(Heap)영역 : 동적 메모리(malloc(), free()) 등에 사용되는 변수를 담는 영역
4. 스택(Stack)영역 : 지역변수, 인자 리스트, 복귀 주소, 스택 프레임 등을 담음
PCB는 운영체제가 프로세스를 관리하기 위한 정보가 담긴 자료구조이다.
디스패치(dispatch) : 준비 상태 -> 실행 상태
할당 시간 초과(time runout) : 실행 상태 -> 준비 상태
블록(block) : 실행 상태 -> 대기 상태
웨이크업(wake up) : 대기 상태 -> 준비 상태

내가 아는 스레드는 운영체제와 밀접한 스레드 보다는 자바 문법상으로 배우는 스레드의 느낌이 강했는데, 스레드에 대해 공부하고 나니 사고가 확장되는 것 같다.
와우ㅜ 스레드가 완벽하게 이해되는 매우 좋은 글이네요~