Quick Comparison
program: storage에 놓인 코드와 데이터
process: 실행 중인 program + address space + handles + execution state같은 실행 파일을 두 번 실행하면 일반적으로 서로 다른 process 두 개가 만들어집니다. 파일은 같아도 PID, 주소 공간, 열린 자원과 실행 상태는 별도입니다.
생성과 종료
운영체제는 실행 파일을 읽고 프로세스의 가상 주소 공간을 준비하며 코드와 초기 데이터를 매핑합니다. 필요한 동적 라이브러리를 연결하고 기본 thread를 실행 가능한 상태로 만들어야 CPU에서 명령이 시작됩니다.
프로세스가 종료되면 운영체제는 해당 프로세스가 소유한 주소 공간과 커널 자원을 회수합니다. 다만 외부에 기록한 파일, 서버에 보낸 요청, 다른 프로세스에 전달한 상태까지 자동으로 되돌리지는 않습니다.
독립성
프로세스는 기본적으로 서로의 주소 공간을 직접 읽고 쓰지 못합니다. 이 격리는 한 애플리케이션의 오류가 다른 애플리케이션 메모리를 임의로 깨뜨리는 것을 막습니다. 상태를 교환하려면 pipe, socket, shared memory, RPC처럼 운영체제가 제공하는 IPC 경계를 사용합니다.
부모가 자식 프로세스를 만들었다고 메모리 객체를 일반 pointer로 그대로 공유하는 것은 아닙니다. 상속되는 handle이나 환경, 명시적으로 공유한 memory 영역만 별도 규칙을 따릅니다.
자주 틀리는 점
- 창 하나와 process 하나가 항상 일치하지는 않습니다.
- process가 종료되어도 그 process가 시작한 독립 process가 반드시 함께 종료되지는 않습니다.
- PID는 process 수명 동안의 식별자이며 영구 ID로 저장하지 않습니다.
- 실행 파일 복사본과 실행 중인 메모리 상태를 같은 것으로 보지 않습니다.
참고 링크
2 sources