프로그램은 일반적으로 하드 디스크 등에 저장 되어 있는 실행코드를 뜻하고, 컴퓨터가 실행할 수 있는 명령어들의 집합.
프로그램을 실행 시켜 정적인 프로그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태. 즉, 컴퓨터에서 작업 중인 프로그램을 의미한다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.
프로세스가 만들어지면 4가지의 메모리 영역으로 구성되어 할당 받는다.

(사진 출처 : https://velog.io/@lamknh/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-3.-Processes)
하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술
컨텍스트 스위칭 오버헤드
컨텍스트 스위칭이 일어나는 과정에서 두 개 이상의 프로세스의 상태(context)를 보관하고 복구하는 과정에서 생기는 간극을 말한다.
하나의 프로그램이 종료되지 않고 I/O 작업을 한다고 해도 쉬지 않고 다음 프로그램을 실행한다. 즉, 입출력이 완료될 때까지 기다리는 시간을 버리지 않고 다른 프로세스를 처리할 수 있도록 해주는 것이다.
프로세스가 한번 cpu를 사용할 때 아주 짧은 시간(quantum)만 cpu에서 실행되도록 한다. 멀티 프로그래밍처럼 동시에 여러 프로그램을 실행시킨다는 면에서는 비슷하지만 cpu 실행 시간을 쪼개서 그 쪼개진 시간 안에서 프로그램들이 번갈아 가면서 실행될 수 있도록 했다는 차이가 있다.

(사진 출처 : https://thsd-stjd.tistory.com/149)
멀티 태스킹의 확장된 방식으로 동작을 하며 병렬적으로 스레드가 실행되어 동시에 프로그램 실행이 가능하며 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것을 말한다.
cpu/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것. 구체적으로 설명하자면, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업. 컨텍스트란 cpu, 메모리 등에서 프로세스/스레드의 상태를 말한다.
주어진 time slice(quantum)를 프로세스/스레드가 다 사용했거나, I/O 작업을 해야하거나, 다른 리소스를 기다려야 하거나 등의 이유로 컨텍스트 스위칭이 발생한다. 이 때 컨텍스트 스위칭은 커널모드에서 실행된다.
스위칭이 발생하면 cpu의 레지스터 상태를 교체한다.
이 때 컨텍스트 스위칭을 실행하는 주체는
OS 커널(Kernel)이 실행한다.
OS 커널은 각종 리소스를 관리/감동하는 역할을 한다.
cpu에서 실행되기 위해 어느 한 프로세스에서 다른 프로세스로 교체되는 것. 프로세스 교체시 서로의 메모리 주소가 다르기 때문에 가상(virtual) 메모리 주소 관련 처리를 추가로 수행해야 한다. 스위칭이 발생하면 MMU(Memory Management Unit)이 새로운 프로세스의 주소를 바라보도록 수정을 하고 캐시 역할을 하는 TLB(Translation Lookaside Buffer)를 비워줘야 한다.
같은 프로세스의 스레드들끼리 스위칭 하는 것이다. 프로세스 컨텍스트 스위칭과는 반대로 스레드는 메모리를 공유하기 때문에 주소를 수정하고 TLB를 비워줘야하는 일련의 작업을 하지 않는다.
프로세스 위키백과
쉬운코드 youtube
쉬운코드 youtube
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html#google_vignette
https://sorjfkrh5078.tistory.com/56