프로세스(Process)
프로세스란 "실행"중인 프로그램 또는 작업으로, 관리의 단위를 의미한다. 즉 PC에 설치된 프로그램이 실행중이라면 그것이 곧 프로세스다. 프로세스에서의 연산은 CPU와 RAM을 사용하여 이루어진다. 프로세스의 구조, PCB, 동작과정을 통해 더 자세히 알아보자
프로세스의 구조
프로세스는 크게 stack, heap, data, code 영역으로 구성되어 있다.
- stack
- 임시 데이터가 저장되는 영역으로, 함수 및 지역변수 등이 선언되면 stack 영역에 저장된다
- 함수 호출 시 생성되며, 함수가 끝나면 반환된다
- 프로세스가 메모리에 로드될 때 stack 사이즈가 고정되므로, 동적으로 사이즈를 변경할 수 없다
- 명령 실행 시 자동으로 증가/감소 하기 때문에, 보통 메모리의 마지막 번지를 지정한다
- heap
- 코드에서 동적으로 만들어지는 데이터가 저장되는 영역으로, 유저가 직접 공간을 할당/해제하는 메모리 공간이다
- 실제로는 stack 영역과 같은 공간을 공유하며 주소가 할당되는 방식이 다르다
- heap이 메모리의 낮은 주소부터 할당되고(FIFO 방식), stack이 높은 주소부터 할당된다(LIFO 방식)
- stack과 heap이 상대 공간을 침범하는 일이 발생할 수 있는데, 이를 각각 stack overflow와 heap overflow라고 한다
- data
- 전역 변수나 초기화된 데이터가 저장되는 영역으로, 전역변수, 정적변수, 배열, 구조체 등이 저장된다
- 프로그램 실행 시 생성되며, 프로그램이 종료될 때 반환된다
- BSS영역과 Data(GVAR) 영역으로 나누어진다
- 초기화되지 않은 데이터는 BSS 영역에, 초기화된 데이터는 GVAR 영역에 저장된다
- code(text)
- 기계어로 컴파일된 소스 코드가 저장되는 영역으로, 실행 명령을 포함하는 코드들이 들어간다
- 읽기 전용 영역이기에 프로세스가 함부로 변경할 수 없고, 변경 시 오류를 발생시킨다
PCB(Process Control Block)
프로세스가 원활하게 동작하기 위해 다양한 정보가 필요한데, 이런 정보(Meta data)를 가지고 있는 데이터베이스를 PCB라고 한다.
- Process의 모든 정보를 가지고 있는 데이터베이스이다
- OS에서 Process는 PCB로 나타내어진다
- 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다
- PCB가 가지고 있는 정보
- PID: 32bit 양의 정수로 이루어진 고유한 값
- 메모리 관련 정보: stack, heap, code, text(기계어), static(read-only, read-write)
프로세스의 동작
프로세스의 생명 주기는 생성,준비,실행,(대기),완료 순서로 흘러간다
이때 실제로 작업을 수행하는 CPU Core는 한정적인데 Process는 수백개 이상이 될 수 있으므로, Process는 CPU Core를 시분할해서 사용한다. 즉, cpu에서 처리할 프로세스 순서를 정해놓는데 이를 '스케줄링(Scheduling)' 이라고 한다
- 생성: PCB가 생성되는 단계이다. 설치된 Program이 Memory에 할당되어 Instance화 되면 프로세스가 된다
- 준비: 대기열 queue에서 실행을 기다리는 단계이다
- 실행: Dispatch(스케줄링된 프로세스를 순서에 맞게 선택해서 메모리로 보내는 작업)가 일어난다
- 대기: '실행'단계에서 I/O request가 들어왔을 때, Non-blocking이면 계속 실행하고, Blocking이면 '대기'상태가 된다
- 완료: 프로세스가 종료되고 PCB가 삭제된다
프로세스의 RAM
프로세스 연산에서 CPU가 참조하는 RAM 주소는, H/W에 존재하는 실제 메모리(Physical Memory)가 아니라 OS가 지정해준 가상 메모리(Virtual Memory)이다.
- 프로세스에게 전체 공간이 아닌, 제한된 공간을 할당해주기 위해서 사용(보안적인 측면)
- 가상 메모리를 따라가면 물리 메모리가 나올 수도, hdd가 나올 수도 있다
- Window는 Thread 기준으로, Linux/Mac/Docker는 Process 기준으로 가상 메모리를 할당한다
Reference