운영체제 ‐ 프로세스 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 프로세스⭐
- 실행 중인 프로그램을 "프로세스"라고 한다.
- 포그라운드 프로세스(Foreground Process)
- 사용자가 볼 수 있는 공간에서 실행되는 프로세스
- 백그라운드 프로세스(Background Process)
- 사용자가 볼 수 없는 공간에서 실행되는 프로세스
- Ex. 데몬, 서비스 등등
📚 프로세스 제어 블록(PCB)⭐
- 프로세스 메타데이터들을 저장해 놓는 곳, 한 PCB 안에는 한 프로세스의 정보가 담긴다.
- 프로그램을 실행하면 프로세스가 생성되고 이 프로세스 주소 공간에 코드, 데이터, 스택이 저장된다.
- 프로세스들은 돌아가며 한정된 시간 만큼만 CPU를 사용한다.
- 자신의 차례에 정해진 시간만큼 CPU를 이용한다.
- 타이머 인터럽트가 발생하면 차례를 양보한다.
- 프로세스 생성 시 커널 영역에 생성되며 종료 시 폐기된다.

📚 PCB에 담기는 정보⭐
- 프로세스 ID(PID)
- 레지스터 값
- 프로세스 상태
- CPU 스케줄링 정보
- 메모리 정보
- 사용한 파일과 입출력장치 정보
📚 문맥 교환(Context Switching)⭐
- CPU가 이전 프로세스 상태를 PCB에 보관하고 또 다른 프로세스 정보를 PCB에 읽어 레지스터에 적재하는 과정
- 보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가 시간을 모두 소모하거나 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생한다.
📚 프로세스의 메모리 영역⭐
- 코드(Code) 영역
- 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
- 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역
- 데이터(Data) 영역
- 힙(Heap) 영역(멀티 쓰레드 영향을 받는 부분)
- 프로그래머가 직접 할당할 수 있는 저장공간(인스턴스) - 공유됨
- 스택(Stack) 영역(멀티 쓰레드 영향을 받지 않는 부분)
- 데이터가 일시적으로 저장되는 공간
- 잠깐 쓰다가 마는 값들이 저장되는 공간(지역 변수, 파라미터) - 공유되지않음
📚 프로세스 상태와 계층구조⭐
- 생성 상태
- 이제 막 메모리에 적재되어 PCB를 할당받은 상태
- 생성 상태 → 준비 상태
- 준비 상태
- 당장 CPU를 할당 받아 실행할 수 있으나 자신의 차례를 기다리는 상태
- 자신의 차례가 된다면 준비 상태 → 실행 상태
- 실행 상태
- CPU를 할당 받아 실행 중인 상태
- 할당된 시간을 모두 사용하게 되면 실행 상태 → 준비 상태
- 실행 도중 입출력 장치를 사용하면 입출력 작업이 끝날 때까지 실행 상태 → 대기 상태
- 대기 상태
- 프로세스가 실행 도중 입출력 장치를 사용하는 경우
- 입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태로 접어듦
- 입출력 작업이 끝나면 준비 상태로
- 종료 상태
- 프로세스가 종료된 상태
- PCB 폐기, 프로세스 메모리 영역 정리
- 프로세스 실행 도중 다른 프로세스 생성 가능(프로세스 계층 구조)
- 새 프로세스를 생성한 프로세스 : 부모 프로세스
- 부모 프로세스에 의해 생성된 프로세스 : 자식 프로세스
- 부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가진다.
📚 프로세스 생성 기법⭐
- 부모 프로세스는
fork()
시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성한다.
- 자식 프로세스는
exec()
시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다.
📚 쓰레드⭐
- 쓰레드는 프로세스 안에서 실행되는 여러 흐름 단위
- 하나의 프로세스는 여러 쓰레드를 가질 수 있다.
- 프로세스를
fork()
하면 코드/데이터/힙 영역 등 모든 자원이 복제되어 저장된다.
- 프로세스끼리는 자원을 공유하지 않는다.
- 프로세스 간에도 자원을 주고 받을 수 있다.(IPC)
- 파일을 통한 프로세스간 통신, 공유메모리를 통한 프로세스간 통신
- 쓰레드는 프로세스의 자원을 공유한다.