실행 중인 프로그램
프로세스가 시작 되면 독자적인 주소 공간 형성
프로세스가 CPU를 잡게 되면 PC가 code의 어느 부분을 가리키게 되고 매 순간 기계어를 하나씩 읽어서 CPU안으로 불러들여 레지스터 안에다가 넣고 연산 장치로 연산 이후 연산된 값을 레지스터 또는 메모리에 저장
이러한 과정을 계속 진행하다 어느 순간 현재 프로세스가 어디까지 와있는가를 규명하기 위한 것이 바로 프로세스 문맥
프로세스는 상태(state)가 변경되며 수행

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCBdㅔ 저장
CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

context switch는 사용자 프로세스 -> 다른 사용자 프로세스로 넘어갈 때를 의미
사용자 프로세스가 운영체제에 프로세스를 넘기는 것은 context switch가 아님
context switch 시 이전 프로세스의 데이터가 새로운 프로세스에 영향을 미치지 않도록 캐시를 비움 (cache memory flush)
Long-term scheduler(장기 스케줄러 or job scheduler)
Short-term scheduler(단기 스케줄러 or CPU scheduler)
Medium-Term Scheduler(중기 스케줄러 or Swapper)
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
프로세스에게서 memory를 뺏는 문제
degree of Multiprogramming을 제어
프로세스 내부의 CPU 수행 단위

Thread가 독립적으로 가지는 부분
program counter
register set
stack space
Thread가 공유하는 부분(task)
응답성(Responsiveness) : 하나의 서버 쓰레드가 blocked 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행되어 빠른 처리 가능 (웹서버)
자원 공유(Resource Sharing) : 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상
경제성(Economy) : process 하나 더 만드는 것보다 thread를 하나 더 만드는 것이 overhead가 훨씬 적음
병렬성을 높일 수 있음