Process
프로그램을 실행하는 과정에서 보조저장장치 등에서 프로그램을 메모리에 적재 후 실행할 경우 Process가 된다고 한다.
모든 process는 CPU를 필요로 하며 CPU의 사용권한은 한정되어 있으므로 OS는 process에 정해진 시간만큼 CPU를 할당해주고 시간이 끝나면 타이머 인터럽트가 발생하여 CPU 권한을 넘긴 뒤 대기한다.
이 과정을 위해 OS는 kernel mode에서 PCB를 사용을 한다.
PCB는 아래와 같은 구성요소를 가진다.
이 구성요소들이 PCB의 각 위치에 저장이 되는데, 이를 Context라 부르며 인터럽트가 발생하면 PCB의 context를 저장하고 다른 process의 context를 PCB에 입력하는데 이 과정을 Context Switching이라 부른다.
OS는 끊임없이 빠르게 context switching을 하여 user에게 프로그램이 동시에 실행되는 것과 같이 보이게 한다.
(단, 너무 잦은 context switching은 overhead를 유발한다.)
kernel에서 PCB가 있으면 User mode에서는 Memory 영역이 동작한다.
Memory 영역은 아래 그림과 같은 구조로 나뉜다.

Stack과 Heap 영역은 실시간으로 그 크기가 변할 수 있으므로 동적 할당 영역 이라고 부르며
Data와 Code 영역은 크기가 항상 고정되므로 정적 할당 영역 이라고 부른다.