프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 컴퓨터 프로그램은 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 집합이다.
프로그램은 하드 디스크 등에 저장되어 있는 실행 코드를 뜻한다. 즉 하드 디스크 상에 바이너리 형식의 파일로 저장된 것이고, 사용자가 실행하게 되면 메모리에 적재되어 실행된다.
root 디렉토리의 bin 디렉토리를 확인해 보면 다음과 같은 명령어 프로그램들이 바이너라 파일로 저장 되어있는 것을 볼 수 있다.
프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위를 지칭한다.
ps 명령어를 통해 실행중인 프로세스를 확인할 수 있다.
위 이미지는 ps -ef 명령어를 통해 프로세스를 확인한 결과이다.
바이너리 파일로 저장되어 있던 프로그램인 ps가 사용자의 실행으로 인해 프로세스로 구동중인 것을 확인할 수 있다.
프로세스는 각각 독립된 메모리 영역을 지닌다.
실행할 프로그램의 코드가 저장되는 영역이다. CPU가 이 공간에서 명령어를 하나씩 가져와 처리한다.
전역 변수와 정적 변수가 저장되는 영역이다. 이 변수들은 프로그램이 시작될 때 할당되고 종료 시 소멸한다. BSS(Block Stated Symbol)에는 초기화되지 않은 전역 변수와 정적 변수가 저장된다. Data에는 초기화된 전역 변수와 정적 변수가 저장되는데, 이 변수들은 비휘발성 메모리인 ROM에 저장된다.
휘발성 메모리의 RAM에 비해 비용이 큰 비휘발성 메모리 ROM에 저장되는 변수들을 관리하기 위해 Data, BSS 영역을 구분한다.
사용자가 직접 관리할 수 있는 메모리 영역이다. 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
힙 영역의 메모리는 낮은 주소에서 높은 주소의 방향으로 할당된다.
함수의 호출과 관계되는 지역 변수와 매개 변수가 저장되는 영역이다. 함수의 호출 시 스택 영역의 메모리가 할당되고, 함수의 종료 시 소멸한다.
스택 영역은 LIFO 방식으로 동작하고, 가장 늦게 push된 데이터가 가장 먼저 pop된다.
스택 영역의 메모리는 높은 주소 방향에서 낮은 주소 방향으로 할당된다.
커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료구조가 존재하며, 커널은 이 자료구조를 이용하여 프로세스의 상태를 관리한다.
다음 내용
- 멀티 프로세스와 컨텍스트 스위칭
- 스레드와 멀티스레드