프로세스의 개념
프로그램과 프로세스
프로그램은 일반적으로 파일 시스템 상에 존재하는 정적인 엔터티이다. 디스크에 저장된 명령어들의 집합으로, 그 자체는 실행되지 않는다.
반면, 프로세스는 이러한 프로그램이 메모리로 적재되어 실행되고 있는 상태를 의미한다. 즉, 프로세스는 실행 중인 프로그램의 인스턴스로 간주된다. 프로세스는 다음을 포함한다:
프로그램 카운터 (어떤 명령을 실행 중인지 추적)
스택 (함수 호출과 지역 변수 저장)
데이터 섹션 (전역 변수 포함)
힙 (동적 메모리 영역)
하나의 프로그램 → 다수의 프로세스 가능
하나의 프로그램은 여러 개의 프로세스로 존재할 수 있다. 예를 들어, 여러 사용자가 같은 텍스트 편집기를 실행하면, 각 사용자마다 개별적인 프로세스가 생성된다.
각 프로세스는 고유한 주소 공간, 프로그램 카운터, 스택, 데이터 섹션을 가진다.
프로세스의 메모리 구조
프로세스는 일반적으로 다음 네 가지 메모리 영역을 갖는다:
텍스트 섹션: 실행 코드
데이터 섹션: 전역 변수
힙: 런타임 시 동적으로 할당되는 메모리
스택: 함수 호출 시 생성되는 프레임 (로컬 변수, 리턴 주소 등)
프로세스 상태
프로세스는 다음과 같은 상태 중 하나를 가진다:
New: 생성 중
Running: CPU에서 실행 중
Waiting: 어떤 이벤트(I/O 등)를 기다리는 중
Ready: 실행 준비가 된 상태, CPU 할당 대기 중
Terminated: 실행이 완료되어 종료된 상태
운영체제는 이러한 상태를 기반으로 프로세스를 스케줄링하고 전이시킨다.
프로세스 제어 블록 (Process Control Block, PCB)
운영체제는 각 프로세스의 정보를 PCB에 저장한다. PCB는 다음과 같은 항목을 포함한다:
프로세스 상태
프로그램 카운터
CPU 레지스터
스케줄링 정보
메모리 관리 정보 (페이지 테이블 등)
계정 정보 (프로세스 소유자, 자원 사용량 등)
입출력 상태 (열린 파일, I/O 장치 등)
PCB는 문맥 교환(context switch) 시 사용된다. 현재 프로세스의 상태를 PCB에 저장하고, 다음 프로세스의 PCB로부터 상태를 복원한다.
문맥 교환 (Context Switch)
문맥 교환은 CPU가 실행 중인 프로세스를 변경하는 과정이다. 운영체제는 현재 실행 중인 프로세스의 상태를 PCB에 저장하고, 새로운 프로세스의 PCB에서 상태를 읽어 들인다.
이때 저장되는 정보는 다음과 같다:
프로그램 카운터
CPU 레지스터
기타 상태 정보
문맥 교환은 성능에 영향을 줄 수 있으며, 가능한 한 효율적으로 수행되도록 운영체제가 설계되어야 한다.
프로그램과 프로세스의 차이
프로그램은 디스크에 저장된 정적인 명령어들의 집합이다. 프로세스는 그 명령어들이 실행 중인 동적인 상태이다.
하나의 프로그램으로부터 여러 프로세스가 생성될 수 있으며, 이들은 서로 독립된 상태를 유지한다. 운영체제는 이러한 프로세스 각각을 고유하게 관리한다.
Last updated