프로세스는 디스크에 있는 프로그램이 실행되서 운영체제에 의해 독립된 메모리 영역을 할당받고, CPU 의 할당을 받을 수 있는 상태를 의미합니다. 최소 하나의 스레드를 포함하며 PCB를 가진 프로그램입니다.
각 프로세스는 독립된 메모리 영역을 가진다.
데이터 영역을 나눈 이유?
최대한 데이터를 공유하여 메모리 사용량을 줄이기 위해서!
운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장하는 자료구조다. 프로세스가 생성될 때마다 고유의 PCB가 생성되고 메인 메모리에 유지되며, 프로세스가 완료되면 PCB는 제거된다.
프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 CPU에 넘겨와서 계속해서 하던 작업을 진행한다.
운영체제에 따라 PCB에 포함되는 항목이 다를 수 있지만, 일반적으로 다음과 같은 정보가 포함된다.
포인터 :
프로세스가 준비상태나 대기 상태일 경우에 큐로 운영이 되는데, 프로세스 제어 블록을 연결 시 큐로 구현하기 위해 포인터를 사용
프로세스 상태 :
생성, 준비, 실행, 대기 , 완료, 보류 등 프로세스가 현재 어떠한 상태에 있는지를 나타낸다.
프로세스 식별자 :
프로세스 ID 또는 PID라는 고유 한 ID가 할당
프로그램 카운터 :
프로세스가 준비상태에서 실행상태 갈 경우 프로그램 카운터를 통해 다음 실행될 명령어의 위치를 알 수 있다. 실행상태에서 준비상태로 갈 경우 프로그램 카운터에 저장하여 다음 실행될 명령어 위치를 저장한다.
프로세스 우선순위 :
CPU 스케줄러가 준비 상태에 있는 프로세스 중 실행 상태로 옮겨야 할 프로세스의 우선순위를 저장한다.
레지스터 정보 :
프로세스가 실행 중에 사용했던 레지스터 정보( 누산기(Accumulator), 색인 레지스터, 스택 포인터 등)들이 저장되고 다시 실행될때 복귀할 수 있다.
메모리 관리 정보 :
프로세스의 메모리 위치 정보가 필요하고 메모리 보호를 위해 사용되는 경계 레지스터, 한계 레지스터 값 등이 저장된다. 이외 세그먼테이션 테이블, 페이지 테이블 등의 정보도 포함된다.
할당된 자원 정보 :
프로세스를 실행하기 위해 사용되는 입출력 자원, 오픈 파일 등에 대한 정보가 포함된다.
계정 정보 :
계정 번호, CPU 할당 시간, CPU 사용 시간 등이 저장된다.
프로세스는 수행하면서 상태가 여러번 변한다. 그리고 프로세스는 일반적으로 여러 개가 한 번에 수행되므로 이러한 순서를 대기하는 곳을 프로세스 큐라 한다. 각 큐 내부에 저장된 실제 데이터는 각 프로세스의 PCB가 저장되어 있다.
CPU를 차지하던 프로세스가 나가고 새로운 프로세스에 할당하는 경우 CPU에서 나가는 프로세스는 지금까지의 작업 내용을 저장하고 새로 들어오는 프로세스는 PCB의 내용으로 CPU가 다시 세팅된다. 이와 같이 두 프로세스의 PCB 교환하는 작업이 문맥 교환이다.
문맥교환하는데 필요한 시간, 메모리 등을 오버헤드라 부른다.