프로그램 vs 프로세스
- 프로그램 : 컴퓨터 시스템에 실행 요청 전 프로그램 + 데이터
- 프로세스 : 실행을 위해 시스템(커널)에 등록된 작업.
- 커널에 등록하는 이유 : 운영체제가 담당해야 시스템 성능 향상 등 효율적인 관리가 가능함.
- 다른 정의들
- 커널에 등록된 job 또는 프로그램.
- 각종 자원들을 요청, 할당 받을 수 있는 개체.
- 프로세스 관리 블록(PCB)을 할당받은 개체.
- 능동적인 개체. 실행 중 각종 자원 요구, 할당, 반납하며 진행
- 한 마디로 요약하면 실행 중인 프로그램.
프로세스의 종류

자원의 개념
- 커널의 관리하에 프로세스에게 할당, 반납되는 수동적인 개체.
- H/W resource와 S/W resource로 구분됨.
프로세스 ↔ 자원
과정을 커널이 관리.
PCB(process control block)
- 프로세스를 컨트롤하기 위한 정보들.
- 메모리에서 커널이 가지고 있는 영역에 저장.
- PCB가 관리하는 정보.
- 포인터
- 프로세스 상태
- 프로세스 번호
- 프로그램 카운터
- 레지스터
- 메모리 제한
- 열린 파일 목록
프로세스의 현재 위치를 저장하는 포인터 정보입니다.
프로세스의 각 상태 (생성(New), 준비(Ready), 실행(Running), 대기(Waiting), 종료(Terminated))를 저장합니다.
모든 프로세스에는 프로세스 식별자를 저장하는 프로세스 ID 또는 PID라는 고유 한 ID가 할당됩니다.
프로세스를 위해 실행될 다음 명령어의 주소를 포함하는 카운터를 저장합니다.
누산기, 베이스, 레지스터 및 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보입니다.
이 필드에는 운영 체제에서 사용하는 메모리 관리 시스템에 대한 정보가 포함됩니다. 여기에는 페이지 테이블, 세그먼트 테이블 등이 포함될 수 있습니다.
이 정보에는 프로세스를 위해 열린 파일 목록 이 포함됩니다.
- PCB는 OS 별로 다름. PCB의 참조, 갱신 속도는 OS의 성능을 결정짓는 중요한 요소 중 하나임.
프로세스 상태

new, created state
- 프로세스 생성 중 커널 공간에 PCB가 만들어진 상태 (메모리 할당 받기 전).
- 작업을 커널에 등록.
- 메모리 공간에 의해 ready가 될지, suspended ready가 될지 결정됨.
ready
- 프로세스가 CPU를 기다리는 상태, cpu만 있으면 즉시 실행 가능한 상태.
- 프로세스가 메모리에 적재된 상태로 필요한 자원을 모두 얻은 상태.
- cpu가 준비된 상태를 dispatch, schedule이라 함.
runnig
- 프로세스가 CPU를 할당받아 명령어를 수행중인 상태.
- CPU가 하나인 경우, 여러 프로세스가 동시에 실행되도 실제로 실행중인 프로세스는 매 시점 하나 뿐임.
- 실행 중 cpu를 뻇기게 되면(preemption) ready 또는 asleep 상태로 이동함.
blocked, asleep
- 프로세스가 CPU를 할당받아도 당장 실행할 수 없는 상태.
- 현재 프로세스가 I/O작업 등을 처리 중인 상태.
- cpu를 다시 할당받으면 ready 상태로 돌아가는데 running으로 가지 않는 이유는
- 프로세스가
running
상태에서 디스크 I/O작업을 하는 동안은 CPU를 점유하고 있어도 다음 명령어를 수행하지 못하기 때문에 CPU를 낭비하지 않기 위해서 I/O 작업을 하는 프로세스는 CPU를 반납하고 Device Queue에 들어가게 됨.
suspended
- 프로세스의 중지 상태
- 메모리를 강제로 뺏긴 상태로 특정한 이유로 프로세스의 수행이 정지된 상태.
- 외부에서 다시 재개시키지 않는 이상 다시 활성화 될 수 없다.
blocked
는 잠시 중지되어있다 끝나면 다시ready
상태로 돌아온다.suspended ready
:ready
상태에 있던 프로세스가 디스크로 스왑아웃.suspended blocekd
:blocked
상태에 있던 프로세스가 디스크로 스왑아웃.- 다시 들어오는 것을 swap in이라 함.
- memory image를 하드 디스크에 보관함.
terminated, zombie state
- 종료시스템 콜을 받고 PCB가 할당 해제되기 직전의 상태.
- 프로세스의 실행이 완료되고 할당된 CPU를 반납한 상태.
- 정보 수집 후 삭제됨.
- 완전히 종료되면 더 이상 프로세스가 아님.

- 각 상태에 따른 자료구조 존재함.
- ready Queue
- I/O Queue
- Device Queue
인터럽트
- 예상치 못한, 외부에서 발생한 이벤트
- 인터럽트의 종류
- I/O interrupt
입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우 ex) 키보드 이벤트 등 예상하지 못한 이벤트
인터럽트 처리 과정
누군가 내가 하던 일을 멈추고 같이 무엇을 하자고 상상해보자

- 프로그램 중단시 커널이 개입함. 그리고 context saving을 실시.
- 인터럽트 처리시 이뤄지는 과정 a. 인터럽트 발생 장소, 원인 파악 (interrupt handling) b. 인터럽트 서비스 할 것인지 결정 (interrupt handling) c. 인터럽트 서비스 루틴 호출 (interrupt service)

- Pi는 프로세스
- interrupt가 발생하면 커널이 Pi를 중단함.
- context saving 발생.
- 메모리 PCBi에 저장.
- 커널의 interrupt handling & interrupt sevice (프로그램). 이 프로그램은 프로세서에서 일을 함.
- 서비스가 끝나면 프로세서가 비어있기 때문에 ready 상태에 있던 하나를 넣어줌. Pi가 들어올 수도 있지만 Pj가 들어올 수도 있다는 의미. 그럼 Pj의 이전 내용을 복구해서 (context restoring) 일을 수행함.
Context switching
- context
- 프로세스와 관련된 정보들의 집합.
- CPU가 작업을 수행할 땐 어떤 데이터를 register에 올린 후 작업함 - register context
- 그 외 코드 등 다양한 데이터는 메인 메모리에 저장.
- Context saving
- 현재 프로세스의 register context를 메모리에 저장하는 작업.
- Context restoring
- register context를 프로세스로 복구하는 작업.
- Context switching (process swiching)
- 실행 중인 프로세스의 context를 저장하고, 앞으로 실행할 프로세스의 context를 복구하는 일.
- 커널의 개입으로 이루어짐.
- Context saving + Context restoring이라 할 수 있음.
Context switching overhead
- 보통 컴퓨터에서 작동 중인 프로그램이 많기 때문에 이는 OS 성능에 큰 영향을 줌.
- 불필요한 context switching을 줄이는 것이 중요함.
- ex) 스레드를 이용하여 줄일 수 있음.