실행 중인 프로그램
보조기억장치 → 메모리 → 실행
ex. hwp.exe 파일은 프로세스가 아님 → hwp.exe 프로그램을 더블클릭해 실행하면 프로세스가 되는 것
사용자와 직접 상호 작용하는 프로세스
사용자와 직접 상호 작용하지 않는 프로세스
- 사용자와의 상호작용 없이 정해진 일만 수행하는 백그라운드 프로세스
- 윈도우 운영체제에서는 서비스(service)라고 부름
프로세스와 관련된 정보를 저장하는 자료 구조
- PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기됨
- PCB는 커널 영역에 생성됨
- 운영체제가 프로세스에 필요한 자원을 배분하기위해 프로세스를 식별해야 하는데 그러기 위해 사용하는 것이 PCB
- 프로세스를 식별하기 위해 부여하는 고유한 번호
- 프로세스가 실행하며 사용했던 레지스터 값들이 저장됨
- 현재 프로세스의 상태가 저장됨
- 프로세스가 언제 CPU를 할당받을지에 대한 정보가 저장됨
- 프로세스의 메모리 주소가 저장됨
- 프로세스에 할당되었던 입출력장치나 파일에 대한 내용이 저장됨
- 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구해 새로운 프로세스를 실행하는 것
- 하나의 프로세스를 실행하다가 다른 프로세스로 실행 순서가 넘어갈 때 문맥 교환이 일어남
- 문맥 교환이 너무 자주 일어나면 오버헤드가 발생할 수 있음
- 하나의 프로세스를 다시 실행하기 위해 저장되어야 할 정보
- PCB에 기록되는 정보들을 문맥이라고 생각하면 됨
- 기계어로 이루어진 명령어가 저장됨
- 읽기 전용 공간
- 프로그램이 실행되는 동안 계속 필요한 데이터가 저장됨
- 전역 변수가 대표적임
- 프로그래머가 직접 할당할 수 있는 저장 공간
- 힙 영역에 할당한 공간은 사용한 후, 반환하지 않으면 메모리 누수가 발생함
- 일시적으로 사용되는 데이터가 저장됨
- 지역 변수가 대표적임
프로세스 상태 다이어그램
- 메모리에 적재되어 PCB가 생성된 상태
⬇️ 생성된 프로세스는 준비 상태가 되어 CPU 할당을 기다림(바로 실행❌)
- CPU를 할당을 기다리는 상태
⬇️ 디스패치(dispatch)
- CPU를 할당받아 실행 중인 상태
- 실행 도중, 타이머 인터럽트가 발생하면 다시 준비 상태가 됨
- 실행 도중, 입출력 작업이 일어나면 입출력 작업이 끝날 때까지 대기 상태가 됨
- 입출력 작업을 기다리는 상태
- 입출력 작업이 완료되면 다시 준비 상태가 됨
- 프로세스가 종료되어 PCB와 메모리가 정리된 상태
새 프로세스를 생성한 프로세스
부모 프로세스에 의해 생성된 프로세스
✅ 부모 프로세스와 자식 프로세스는 독립적인 프로세스이기 때문에 서로 다른 PID를 가짐프로세스 계층 구조
부모 프로세스는 fork
와 exec
이라는 시스템 호출(시스템 콜)
을 통해 자식 프로세스를 생성함
- 부모 프로세스가 자신의 복사본을 생성하는 시스템 호출
- 부모 프로세스의 자원들이 자식 프로세스에 상속됨
✅ 프로세스 계층 구조를 이루는 과정은 fork와 exec이 반복되는 과정임
프로세스를 구성하는 실행의 단위
하나의 실행 흐름만을 가지는 프로세스
여러 개의 실행 흐름을 가지는 프로세스
여러 프로세스를 동시에 실행하는 것
여러 스레드로 프로세스를 동시에 실행하는 것
🤔 그렇다면 멀티프로세스와 멀티스레드 둘 다 여러 개의 실행 흐름을 가지고 실행하는데, 어떤 차이점이 있을까?프로세스는 다른 프로세스와 서로 자원을 공유하지 않음
스레드는 다른 스레드와 코드 영역, 데이터 영역, 힙 영역 등의 자원을 공유함