파일과 실행 인스턴스
디스크에 놓인 프로그램은 명령과 데이터를 담은 파일이다. 이를 실행하면 운영체제가 메모리와 식별 정보, 파일 등의 자원을 연결해 실행 인스턴스를 관리한다.
같은 실행 파일을 여러 번 사용해도 각 실행의 상태와 데이터는 다를 수 있다. 반대로 하나의 응용 프로그램이 역할별로 여러 프로세스를 이용하기도 한다.
실행 중이 아니어도 존재한다
프로세스는 CPU에서 명령을 실행하는 순간에만 존재하는 것이 아니다. 실행할 차례를 기다리거나 입출력 완료 같은 사건을 기다리는 동안에도 상태가 유지된다.
준비 상태와 대기 상태는 다르다. 준비된 실행 단위는 처리 시간을 배정받으면 진행할 수 있지만, 대기 중인 단위는 필요한 사건이나 조건이 먼저 충족되어야 한다.
분리와 통신
일반적인 운영체제는 프로세스별 주소 공간을 이용해 메모리 접근을 분리한다. 데이터 교환이 필요하면 소켓과 파이프, 공유 메모리 등 별도의 수단을 사용한다.
주소 공간의 분리는 모든 자원이 완전히 독립적이라는 뜻은 아니다. 프로세스 사이에 공유하도록 설정한 영역이나 상속된 자원이 있을 수 있으며 접근 권한도 중요하다.
스레드와 자원 관리
프로세스 안에는 하나 이상의 스레드가 실행될 수 있다. 스레드들이 메모리 같은 자원을 공유하는 방식과 스케줄링 단위는 운영체제의 구현에 따라 차이가 있다.
프로세스 수를 늘리면 실행 기회를 나눌 수 있지만 메모리와 문맥 전환 등의 비용도 늘 수 있다. 필요한 분리 수준과 실제 작업 특성을 함께 고려해야 한다.