프로그램이란?
컴퓨터에서 어떤 작업을 위해 실행할 수 있는 정적인 상태의 파일
- 컴퓨터 프로그램에서 내부 구조는 함수들로 구성되어있다. 이 때 명령을 담은 프로그램 주소 영역은 크게 code, data, stack 영역으로 구분됨
프로그램이 컴퓨터 메모리상에 올라간 상태가 되면 프로세스가 된다
프로세스 문맥 (context)
프로세스가 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보
- 시분할 시스템에서 타이머 인터럽트에 의해 짧은 시간동안 CPU를 빼앗긴 후 다시 획득을 할 때 어느 명령까지 실행했는지 알 수 있는 정보를 뜻함
- 프로세스 문맥을 크게 세 가지로 분류하면 하드웨어 문맥, 프로세스의 주소 공간, 커널상의 문맥으로 나눌 수 있음
- 하드웨어 문맥: CPU의 수행상태를 나타낸다. 프로그램 카운터값과 각종 레지스터에 저장하고 있는 값을 의미
- 프로세스의 주소 공간: 코드, 데이터, 스택, 힙으로 구성되는 자기 자신의 공간을 가지고 있음
- 커널상의 문맥: PCB와 커널스택을 의미한다
문맥 교환 (context switing)
하나의 사용자 프로세스로부터 다른 사용자의 프로세스로 CPU 제어권이 이양되는 과정

프로세스 메모리 공간
code, data, heap, stack 영역으로 이루어져 있다.
- code 영역: 실행할 프로그램의 코드가 저장된다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 된다.
- data 영역: 정적 변수, 배열, 구조체 등이 저장되는 공간 프로세스가 종료되면 같이 소멸된다. (초기화 되지 않은 변수는 BSS(Blocked State Symbol)에 저장된다.)
- 프로그램(디스크에 있는) 크기를 최적화 하기 위함
- heap 영역: 필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부른다. 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.
- stack 영역: 지연변수, 매개변수, 함수 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다. 함수 호출 시 할당되고 함수 반환 시 소멸됩니다. 로드 시(컴파일 타임) 크기가 결정된다.
stack을 제외하고 컴파일 타임에 크기가 결정된다.
PCB
운영체제가 시스템 내의 프로세스를 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조
다음과 같은 내용을 담고 있다.
- 프로세스 상태, 프로그램 카운터 값, CPU 레지스터 값, CPU 스케줄링 정보, 메모리 관리 정보, 자원 사용 정보, 입출력 상태 정보