이번 포스팅에서는 프로그램과 프로세스의 차이점, 프로세스의 메모리 구조, 그리고 운영체제가 프로세스를 어떻게 관리하는지에 대해 알아보겠습니다.
1. 프로그램과 프로세스
- 프로그램(program): 프로그램은 하드 디스크와 같은 저장 매체에 저장된 실행 파일입니다. 단순히 실행될 준비가 된 명령어들의 집합으로, 정적인 상태에 있습니다.
- 프로세스(process): 프로그램이 실행되면, 운영체제는 이를 메모리에 적재하고 실행 상태에 놓습니다. 이때의 프로그램을 프로세스라고 부릅니다. 프로세스는 독립적인 메모리 공간에서 실행되며, 이 메모리 공간은 코드, 데이터, 힙, 스택의 네 가지 영역으로 나뉩니다.
프로세스의 특징은 다음과 같습니다:
- 운영체제는 프로세스마다 고유한 메모리를 할당합니다.
- 각 프로세스는 독립적인 메모리 공간을 가지며, 다른 프로세스의 메모리 영역에 접근할 수 없습니다.
- 운영체제는 프로세스의 위치와 크기를 관리하며, 각 프로세스에 고유한 프로세스 ID를 부여합니다.
- 프로세스는 생성에서 종료까지의 생명주기를 가지며, 이 모든 과정은 커널이 관리합니다.
2. 프로그램의 다중 인스턴스
하나의 프로그램을 여러 번 실행하면, 운영체제는 각각의 실행마다 독립된 프로세스를 생성합니다.
이때 각 프로세스는 별개의 메모리 공간을 할당받아, 서로 독립적으로 동작하게 됩니다. 이를 프로그램의 다중 인스턴스라고 합니다.
3. CPU 주소 공간과 프로세스 메모리 구조
CPU 주소 공간은 CPU가 액세스 할 수 있는 전체 물리 메모리 공간입니다.
이 공간의 크기는 CPU의 주소선 수에 의해 결정됩니다.
예를 들어, 32비트 CPU는 2^32개의 주소, 즉 4GB의 주소 공간을 가집니다.
CPU 주소 공간보다 큰 메모리가 설치되어 있더라도, 그 초과 부분은 CPU가 접근할 수 없습니다.
프로세스의 메모리 구조는 크게 네 가지 영역으로 나뉩니다:
- 코드 영역: 프로그램의 실행 코드를 저장하는 공간으로, 사용자가 작성한 모든 함수 코드와 라이브러리 함수들이 여기에 적재됩니다.
- 데이터 영역: 고정된 변수(전역 변수와 정적 데이터)를 저장하는 공간입니다. 프로세스가 시작할 때 할당되고, 종료 시 소멸됩니다.
- 힙 영역: 프로세스가 실행 중 동적으로 메모리를 할당받는 공간입니다. malloc()이나 new()와 같은 함수로 할당된 메모리는 이 힙 영역에서 관리됩니다.
- 스택 영역: 함수 호출 시 사용되는 메모리 공간입니다. 매개변수, 지역 변수, 리턴 값 등이 스택에 저장되며, 함수가 종료되면 스택에 할당된 메모리는 반환됩니다.
4. 프로세스 주소 공간
프로세스 주소 공간은 프로세스가 실행 중 접근할 수 있는 메모리의 최대 범위를 의미합니다.
이 공간은 논리적(가상) 공간으로, 0번지에서 시작해 연속적인 주소를 가지며 CPU가 접근할 수 있는 최대 크기를 가집니다.
- 사용자 공간: 프로세스의 코드, 데이터, 힙, 스택 영역이 할당되는 공간입니다. 프로세스가 직접 사용할 수 있는 공간입니다.
- 커널 공간: 운영체제가 관리하는 영역으로, 프로세스가 시스템 호출을 통해 커널 코드에 접근할 때 사용됩니다. 이 공간은 모든 프로세스에 의해 공유됩니다.
프로세스의 주소 공간은 사용자가 작성한 코드가 연속적인 메모리 공간에 형성된 것처럼 보이지만, 실제로는 메모리에 흩어져 저장됩니다.
운영체제는 가상 주소 공간과 실제 물리 메모리 간의 매핑을 통해 이러한 불연속성을 관리합니다.
결론
프로세스는 프로그램이 메모리에 적재되어 실제로 실행될 때를 말하며, 독립적인 메모리 공간에서 운영체제의 관리하에 실행됩니다.
프로세스의 메모리 구조와 주소 공간은 CPU가 프로그램을 어떻게 인식하고 처리하는지를 이해하는 데 중요한 역할을 합니다.
운영체제는 이러한 프로세스들을 효과적으로 관리해 시스템 자원을 효율적으로 활용하며, 다중 인스턴스의 프로그램을 독립적으로 실행할 수 있게 합니다.
이 모든 과정을 통해 컴퓨터는 여러 작업을 동시에 수행할 수 있는 강력한 성능을 발휘하게 됩니다.
'운영체제' 카테고리의 다른 글
프로세스 계층 구조: 부모-자식 관계와 시스템 호출 (0) | 2024.08.16 |
---|---|
커널의 프로세스 관리: 프로세스 테이블, PCB, 그리고 스케줄링 (0) | 2024.08.15 |
운영체제가 가지고 있는 두 번째 인터페이스: 인터럽트 (0) | 2024.08.13 |
커널의 실체와 시스템 호출 (0) | 2024.08.12 |
운영체제의 효율적인 자원 관리 (0) | 2024.06.21 |