컴퓨터에서 실행중인 프로그램을 프로세스라고 합니다.
프로세스
보조기억장치(하드디스크)에 저장된 코드의 집합을 프로그램이라고 합니다. 프로그램을 실행하면 메모리에 프로그램이 올라가게 됩니다. 이것을 프로세스라고 합니다. 다른 말로 표현하면 프로세스로 인스턴스화되었다고 합니다. 이후에는 CPU의 스케줄에 따라서 프로세스가 실행되게 됩니다. 프로세스는 하나의 실행 단위라고 볼 수 있습니다. 프로세스보다 더 작은 실행 단위를 스레드라고 하고, 프로세스는 최소 1개의 스레드를 가지고 있습니다.
프로세스 상태
생성상태: 프로세스가 생성된 상태
대기상태: 메모리 공간에 따라서 다른데, 공간이 충분하면 메모리를 할당 받고, 부족하면 기다리는 상태
대기중단상태: 메모리 부족으로 일시 중단된 상태
실행상태: 메모리를 할당 받고 실행중인 상태
중단상태: 프로세스가 중단된 상태
일시중단상태: 메모리 부족으로 일시 중단된 상태
종료상태: 자발적으로, 강제적으로 종료된 상태
프로세스 메모리 구조
프로세스가 메모리에 올라갈 때 다음과 같은 구조로 나뉘어서 저장됩니다.
- 스택
- 힙
- 데이터영역
- 코드영역
스택은 매개변수, 지역변수, 함수 등이 저장됩니다. 재귀 함수 같은 경우, 크기가 동적으로 변할 수 있기 때문에 스택과 힙 사이에 어느 정도의 공간을 비워놓습닏. 이곳을 동적 영역이라고 합니다. 만약 공간을 넘치게 되면 stack overflow가 발생하게 됩니다. 힙은 프로그램이 실행되고 있는 동안 동적 할당하는 부분입니다. 힙도 동적 영역에 해당됩니다. 프로그램이 실행되는 동안의 시간을 런타임이라고 합니다.
데이터영역은 전역변수, 정적 변수가 저장되는 공간입니다. 프로그램이 종료되면 같이 사라지게 됩니다. 정적 영역에 속합니다. 코드영역은 프로그램의 소스코드가 들어가는 영역입니다. 수정할 수 없는 기계어가 들어가기되는데, 이곳은 정적 영역에 속합니다.
PCB
프로세스의 메타데이터를 저장하는 것을 말합니다.
프로그램이 실행되고, 프로세스가 메모리에 올라가면서 인스턴스화된 뒤에, 프로세스 실행에 중요한 정보인 메타데이터들이 PCB에 저장됩니다. 싱글코어 컴퓨터는 한 번에 한개의 프로세스만 실행되는데, 다른 프로그램이 실행되면 관련 메타데이터를 스위칭 해야 합니다. 이때 빠른 속도로 PCB를 바꾸는데 이것을 컨텍스트 스위칭이라고 합니다.
멀티프로세스
하나의 프로그램을 여러 개의 프로세스로 구성하는 것을 말합니다. 반대로 말하면 여러 개의 프로세스가 하나의 일을 동시에 작업하는 거라고 볼 수 있습니다. 이러면 하나의 프로세스가 문제가 발생해도 프로그램을 문제없이 실행할 수 있어 안정성이 높아집니다. 대신 많은 메모리 공간을 차지합니다.
멀티프로세스에서 프로세스 끼리는 서로 데이터를 공유할 수 있는데 이것을 IPC라고 합니다. 여러 프로세스가 공유하는 하나의 메모리를 공유 메모리라고 합니다. 기본적으로는 여러 프로세스는 메모리를 공유할 수 없지만 공유 메모리는 서로 접근 권한을 가질 수 있습니다.
댓글