커널 영역과 사용자 영역의 프로세스
Foreground process
Background process
프로세스 제어 블록

PCB는 운영체제 커널 영역에 적재되어 있음.
프로세스 제어 블록 (PCB)
- PID (PPID)
- 레지스터
- 스케줄링 정보 - CPU를 얼마나 자주 할당 받을 지.
- 메모리 정보 - 메모리에 어디 적재되어 있는 지.
- 사용한 파일 정보
- 입출력장치 정보
문맥 교환
실행을 재개하기 위한 정보를 주고 받는 것.
한정된 자원을 공유하면서 여러 프로세스가 번갈아서 실행됨.
사용자 영역

| 코드 영역 | 실행 가능한 코드; 기계어로 이루어진 명령어 [Read-Only] |
| 데이터 영역 | 프로그램이 실행되는 동안 유지할 데이터 (e.g. 전역변수) * BSS 영역: 프로그램 실행 동안 유지할 데이터중 초기값 없는 데이터 |
| 힙 영역 | 사용자(개발자)가 직접 할당 가능한 공간 낮은 주소에서 높은 주소로 할당 |
| 스택 영역 | 임시로 저장되는 영역 (매개 변수, 지역 변수) 높은 주소에서 낮은 주소로 할당 |
프로세스 상태
대표적인 프로세스 상태
- 생성 상태 (new)
- 준비 상태 (ready)
- 실행 상태 (running)
- 대기 상태 (blocked)
- 종료 상태 (terminated)

리눅스 top 명령어 사용시 프로세스 상태(State)를 확인 가능.
- R: Running
- S: Sleeping
- W: Waiting
- S: Stopped
- Z: Zombie

프로세스 생성과 상태
| 생성 상태 (new) |
| 준비 상태 (ready) |
| 실행 상태 (running) |
| 대기 상태 (blocked) |
| 종료 상태 (terminated) |

fork-exec
* 계층적 구조로 프로세스가 생성되는 원리
fork (복사): 복사본 만들기. > 자식 프로세스 생성
exec (옷 갈아입기): 자식 프로세스를 새로운 프로그램으로 덮어 씌우기. (PID값은 유지가 됨)
스레드
* 프로세스를 구성하는 실행 흐름의 단위

| 멀티 프로세스 | 멀티 스레드 |
| 프로세스 간에는 기본적으로는 자원을 공유하지 않음. | 스레드 간에는 기본적으로는 프로세스의 자원을 공유. |
| 브라우저: 하나의 탭에서 문제가 생기면 해당 탭만 강제종료 | 브라우저: 하나의 탭에서 문제가 생기면 브라우저 자체 강제 종료 |
프로세스 간에도 자원 공유가 가능하다.
* IPC, 소켓 등