
- CPU수행 상태를 나타내는 하드웨어 문맥(Program Counter, 각종 register)
- 프로세스의 주소 공간(code, data, stack)
- 프로세스 관련 커널 자료 구조(PCB - Process Control Block) - 운영체제가 해당 프로그램을 어떻게 평가하고 있는가, Kernel stack)


- Running : CPU를 잡고 instruction을 수행중인 상태.
- Ready : CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고, CPU만 있으면 instruction수행 가능)
- Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태. Process자신이 요청한 event(ex. I/O)가 즉시 만족되지 않아 기다리는 상태(ex. 디스크에서 파일을 읽어와야 하는 경우)
New : 프로세스가 생성중인 상태.
Terminated : 수행(execution)이 끝난 상태(프로세스의 수행이 끝나고 정리하는 과정)

- OS가 관리상 사용하는 정보 : Process state, Process ID / scheduling information, priority - 어떤 프로세스가 먼저 CPU를 사용할 것인가.
- CPU수행 관련 하드웨어 값 : Program counter, registers
- 메모리 관련 : Code, data, stack의 위치정보
- 파일 관련 : Open file descriptors...

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행한다
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장.
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴(중단된 시점부터 다시 시행).
System call이나 Interrupt발생시 반드시 문맥 교환이 일어나는 것은 아니다


프로세스들은 각 큐들을 오가며 수행된다. 프로세스에 메모리
현재는 장기 스케줄러가 없다. Medium-Term스케줄러를 이용. 현재는 프로그램이 시작하면 바로 메모리로 이동한다.프로세스에 CPU

- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out된다
- ex) 사용자가 프로그램을 일시 정지시킨 경우, 시스템이 여러 이유로 프로세스를 잠시 중단
Blocked : 자신이 요청한 event가 만족되면 Ready (자신이 요청한 일을 하면서 기다리는 중)
Suspended : 외부(중기 스케줄러)에서 resume해 주어야 Active (외부에서 강제로 정지)