프로세스는 프로그램이 실행 중인 상태로 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU가 해당 명령어를 하나씩 수행하고 있는 상태를 의미한다. 운영 체제에서는 프로세스를 사용하여 프로그램을 수행하게 되는데 실행 중인 하나의 애플리케이션을 프로세스라고 부른다.
프로세스의 구조체에는 프로세스마다 독립적으로 관리해야 하는 유저 메모리 영역이나 프로세스가 사용하는 각종 객체들의 포인터를 관리하는 핸들 테이블을 가지고 있다.
유저 메모리 영역 관리
프로세스 별로 독립된 영역을 가지게 되는 곳은 유저 메모리 공간이다. 커널 메모리 공간의 경우 모든 프로세스가 공유하여 사용하고 있다. 프로세스 별로 독립적인 유저 메모리 영역을 관리하기 위해서 VAD라는 관리 테이블이 존재한다.
핸들 테이블
핸들 테이블은 프로세스에서 사용하는 모든 핸들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간이다. 프로세스가 종료하게 될 때 이 테이블의 정보를 참고하여 이 프로세서에서 사용하고 있는 모든 커널 객체를 자동으로 반환한다.
독립적인 메모리 공간
프로세스 단위로 관리되는 자원 중 가장 중요한 구별점은 가상 메모리이다. 페이징 기법을 이용하여 프로세스마다 별도의 고유한 메모리를 사용할 수 있게 한다.
자원 소유의 단위
각각의 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리 공간을 가지고 있어야 한다.
이것은 각 프로세스마다 구별되어야 하며 해당 프로세스가 접근하고자 하는 파일, I/O 장치들에 대해서 프로세서 단위로 할당 받아 관리되어야 한다.
디스패칭의 단위
프로세스는 하나의 프로그램이 운영체제로부터 CPU의 자원을 일정 기간 동안 할당 받아 명령어를 실행하는 것이며, 운영체제는 여러 개의 프로세스가 병렬적으로 실행되게 하기 위해서 CPU의 사용 기간을 각각의 프로세스에 골고루 나누어 주어야 한다. 하나의 프로세스에서 여러 개의 디스패칭 단위가 실행될 수 있도록 하고 있으며, 이러한 디스패칭 단위를 스레드라 부른다.
프로세서와 프로세스는 엄밀히 다른 존재이다.
프로세서는 하드웨어적인 측면과 소프트웨어적인 측면으로 나누어 볼 수 있다.
하드웨어적 측면: 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛으로, CPU를 의미하며 적어도 하나 이상의 ALU와 레지스터를 내장하고 있따.
소프트웨어적 측면: 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템을 의미한다. 워드프로세서나 컴파일러 등이 여기에 속한다.
프로세스는 특정 목적을 수행하기 위해 나열된 작업의 목록을 의미한다. 메모리에 적재 되어 프로세서에 의해 실행 중인 프로그램을 프로세스라고 볼 수 있다.