Process and Thread
프로세스와 스레드, 메모리 영역
Process and Thread
예시
프로그램: 프로젝트 기획서
Process: 프로젝트 진행 중.
프로젝트를 진행하려면 회사(OS)에서 자원, 시간을 할당 받아야 함. (메모리에 올라감)
Thread: 홍보팀, 사업팀 마케팅 팀 등 프로젝트를 위해 동시에 일을 진행함. 할당된 자원을 같이 공유함.
프로그램: 브랜드 설립, 그 자체
Process: 가게를 차려 운영함.
가게를 차리려면 나라(OS)에서 땅에 인허가를 내줌(메모리에 올라감, 작업 영역 할당). 이 자리에서 영업하세요
Thread: 가게에서 영업을 위해 동시에 일을 진행함. 고객 응대, 매대 정리, 음식 만들기 등이 동시에 돌아감. 이때 가게 안의 자원을 같이 공유함. 다만, 독자 행동이 가능함.
Process
- 프로그램이 돌아가고 있는 상태.
- 정적인 코드 덩어리인 프로그램을 실행시켜 정적인 프로그램이 된 상태.
- 실행하기 위해선 OS가 메모리 공간을 할당해줘야 실행 가능.
- 프로그램(코드 덩어리)이 실행될 때 즉시 CPU로 부터 할당받는 자원 영역, 자원을 할당받은 작업의 단위
- 프로그램이 메모리에 올라와, 운영체제로부터 자원을 할당받고, 프로그램이 연속적으로 실행되고 있는 상태.
- 특징
- 각각 독립된 메모리 영역 (Code, Data, Stack, Heap)을 할당 받음.
- 메모리의 구조
- 정적 영역
- Code: 명령 실행하는 코드, 명령어
- Data: 변수(Static, Global)
- 초기화안된 global, static 변수(bss)
- 초기화된 global, static 변수(.data)
- (.rodata) 섹션
- 동적 영역
- Heap: 동적 메모리 영역, 개발자가 관리하여 할당 해제 가능 (자바스크립트는 참조 타입 저장)
- 개발자가 할당 후 수동으로 해제하지 않으면 누수 발생.
- Stack: 일시적인 데이터 (반환 값, 지역 변수 할당 및 해제, 매개 변수, 함수 호출 등)
- 자바스크립트는 원시타입을 콜스택에 저장함.
- Heap: 동적 메모리 영역, 개발자가 관리하여 할당 해제 가능 (자바스크립트는 참조 타입 저장)
- 정적 영역
- 메모리의 구조
- 다른 프로세스에 접근하려면 IPC,LPC등 을 이용해야 함.
- 각각 독립된 메모리 영역 (Code, Data, Stack, Heap)을 할당 받음.
Thread
- 정의 :
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 하나의 프로세스에서 자원을 공유하면서 일련의 과정을 동시에
여러 개
실행시킬 수 있는 것. - 햄버거라는 프로세스 안에 스레드 1: 패티를 굽지, 스레드2, 빵을 굽기를 동시에 하는 것.
- Code, Data, Heap을 공유하여 공통된 자원을 사용함. 다만, 레지스터, Stack,은 따로 갖고 있음.
- 따라서 독립적인 함수 호출 → 독립적인 실행 흐름을 각 Thread가 가질 수 있음.
- 특징
- 프로세스 내 여러 개 존재 가능
- 어떤 스레드가 자원을 변경하면, 다른 이웃 스레드가 변경 결과를 즉시 볼 수 있음.