(1) 프로세스(process): 실행 중인 프로그램
(2) 멀티 프로그래밍(multi programming): CPU가 여러 프로세스 사이를 빠르게 전환하는 것
-> CPU가 여러 프로세스를 동시에 실행하는 것처럼 보이지만 어느 한 순간에는 하나의 프로세스만 수행 중임
(1) 프로세스 상태

(1) UNIX 프로세스 계층: 부모 프로세스는 자식 프로세스를 생성할 수 있음
-> 부모 프로세스는 1개, 자식 프로세스는 여러 개 존재 가능
(2) Windows 프로세스 계층 구조: 계층 구조가 존재하지 않고 모든 프로세스가 동등함
(3) 계층 구조를 통한 보안

(1) process table(process control block): 운영체제가 프로세스를 구현하기 위해 각 프로세스마다 유지하는 하나의 엔트리가 존재하는 table
(2) 용도: 엔트리는 프로세스 상태에 중요한 모든 정보를 포함하고 있어 프로세스가 재시작될 때 중단된 적 없는 것처럼 재시작이 가능함

(1) 프로세스 생성: 기존 프로세스가 프로세스 생성 system call을 불러 새로운 프로세스를 생성함
(2) 프로세스가 생성되는 경우
(3) 프로세스 종료 조건
(1) fork(): 현재 프로세스의 복사본을 생성함
(2) waitpid(pid_t pid, int *statloc, int options): 프로세스의 종료 상태를 리턴, 특정 child 프로세스의 종료를 기다릴 수 있음
(3) execve(const char filename, char const argv[], char *const envp[]): 프로세스의 코어 이미지를 대체
(4) exit(): exit status를 반환
