
- 프로세스란 실행 중인 프로그램이다.
- 중요한 개념이 있는데 context라는 것이다.
- 특정 시점을 놓고 봤을 때 이 프로세스가 어디까지 수행했고 등.
- 프로그램이 실행이 시작되면 프로세스만의 독자적인 주소공간이 형성되고, 프로세스가 CPU를 잡게되면 프로그램 카운터라는 레지스터가 프로세스의 코드 어딘가를 가리키게 된다.
- 이후 매순간 instruction을 읽어서 CPU안으로 불러들임.
- 레지스터의 어느 값을 넣고 산술연산장치에서 연산을 하고 결과를 레지스터에 저장하든가 메모리에 저장.
- 이 프로세스는 어디까지 와있는가 이걸 규명하는 데에 필요한 것이 프로세스의 문맥 → 말 그대로 문맥이라는 뜻이다.
- 프로그램의 어디를 가리키고 있는가, 코드의 어디까지 실행했는가, 메모리에 어떤 내용을 담고있는가, 무슨 내용을 어디까지 쌓아놓고 있는가, 변수들의 값은 얼마이며 레지스터에 어떤 값을 넣어놓으면서 어떤 instruction을 실행하고 있었는가 → 이런게 다 있어야 프로세스의 현재 상태를 나타낼 수 있다.
- 이러한 것들을 통틀어서 프로세스의 문맥(context)이라고 한다.
- 내 현재 문맥은 어떤가? 밥은 얼마나 먹고 키는 얼마고 IQ는 얼마고 이런 것도 하나의 문맥이다 → 과거로부터 현재까지 어떻게 살아왔고 현재 어떤지.
- 문맥은 세 가지로 나타낼 수 있다.
- 현재 시점의 CPU 수행 상태를 나타내는 하드웨어 문맥
- 주로 레지스터에 현재 어떤 값을 가지고 있었는가를 나타냄
- 메모리와 관련된 프로세스의 주소 공간
- 즉 코드, 데이터, 스택에 어떤 내용이 들어있는가
- 운영체제의 역할 중 하나가 지금 돌아가고 있는 프로세스들을 관리하는 것이라고 했는데, 그 프로세스를 관리하기 위해 슬라이드에서도 보이듯이 본인의 데이터 공간에 PCB를 가지고 있다고 했었다 → 이런 프로세스 관련 커널 자료구조.
- 결국 모든건 CPU를 번갈아서 쓰기 때문에 이런 모든 정보들을 저장해놓는 일들이 필요한 것.

- Running: CPU를 잡고있는 프로세스의 상태
- Ready: 너도나도 CPU를 쓰겠다고 줄서있는데, 그런 프로세스들의 상태
- 다른 모든 상태는 준비되어있고 CPU만 받으면 열심히 instruction을 실행할 수 있을텐데..
- Blocked(wait, sleep): 요약하자면 CPU를 줘봤자 instruction을 실행하지 못하는 상태
- 주로 I/O 작업을 수행 중인 프로세스가 이런 경우로 알고 있었는데, 당장 실행해야 할 instruction이 physical memory에 올라와있지 않은 경우(추후 배울 page fault)도 포함된다고 함.
- 크게는 위 세 가지의 상태가 있지만 경우에 따라서 아래 상태도 포함한다.
- New: 프로세스가 생성되고 있는 과정