Skip to main content

Process

View all Operating System Knowledges.

프로세스란, 실행 중인 프로그램의 인스턴스이자 시스템의 자원을 할당하는 가장 기초적인 단위이다. 각 프로세스는 고유한 주소 공간을 가지며, 프로세스가 생성되면 최소 하나의 스레드(메인 스레드)를 생성하게 된다.


Process Memory Layout

process

프로세스의 메모리 주소 공간은 다음과 같은 세그먼트로 구성 돼 있다.

Stack Segment

지역 변수와 매개 변수, 함수 호출, 임시 데이터, 그리고 객체가 저장된 Heap의 주소가 저장된다. 따라서 객체를 참조한다면 Stack에서 호출한 Heap의 주소를 참조하는 것이다. 주로 고정된 크기의, 생명주기가 짧은 데이터가 저장된다.

만약 Stack Segment 때문에 메모리 공간을 모두 차지하게 되면 Stack Overflow가 발생한다.


Heap Segment

동적으로(컴파일 시점에 크기를 알 수 없거나, 실행되는 동안 크기가 변경될 수 있다) 할당되는 데이터가 저장된다. 객체와 같은 데이터가 저장되는데 원시 타입(Primitive Type, ex. int, char, float, ...) 데이터 또한 저장될 수 있다. 주로 크기가 크거나 복잡한 데이터 또는 생명주기가 긴 데이터가 저장된다.

가령 C에서 malloc()으로 할당된 메모리가 여기에 해당한다. 만약 Heap Segment 때문에 메모리 공간을 모두 차지하게 되면 Heap Overflow가 발생한다.


BSS(Block Started by Symbol) Segment

실제로 메모리를 할당받지는 않고, 필요할 때 초기화 돼 사용된다. 초기화 되지 않은 전역 변수, 정적 변수가 포함된다.


Data Segment

초기화 된 전역 변수, 정적(static) 변수가 포함된다.


Text(Code) Segment

실행 가능한 프로그램 코드(기계어)가 저장 돼 있다. 동일한 프로그램의 여러 인스턴스를 생성할 때, 운영체제는 코드 영역을 한 번만 로드하고, 각 프로세스에 이를 매핑한다. 그래서 코드 영역은 프로세스간 공유된다.


멀티 프로세싱

multi-core CPU의 여러 CPU core 또는, single-core를 가진 두 개 이상의 processors(a.k.a. multi-processors)를 사용해, 동시에 여러 프로세스를 실행하는 기술이다. 이때, 각 프로세스는 독립된 메모리 공간을 할당받게 되기 때문에, 자원을 서로 공유하지 않는다.

이는 멀티 스레딩에 비해 효율적이진 않은데, 프로세스간 Context Switching 등 프로세스를 관리해야 하는 오버헤드가 존재하기 때문이다.

Related Links