프로세스(Process)
- 메모리 상에서 실행 중인 프로그램
- 프로그램은 실행되기 전까지는 그저 보조기억장치에 저장되는 데이터 덩어리지만 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스가 됨
- 프로세스들은 차례대로 돌아가며 정해진 시간만큼 CPU를 이용하고 시간이 종료됐음을 알리는 타이머 인터럽트가 발생하면 차례를 양보하고 다음 순서를 기다림
종류
- 포그라운드 프로세스(Foreground Process) = 사용자가 볼 수 있는 공간에서 실행되는 프로세스 => 앱
- 백그라운드 프로세스(Background Process) = 사용자가 보지 못하는 뒤편에서 실행되는 프로세스
- 데몬(Daemon), 서비스(Service) = 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 프로세스
=> 데몬은 유닉스 체계의 운영체제, 서비스는 윈도우 운영체제에서 부르는 단어
프로세스 제어 블록(PCB: Process Controll Block)
- 특정 프로세스를 식별 정보를 포함하는 OS 커널의 자료 구조 (일종의 옷의 태그와 같은 기능)
- 프로세스 생성 시에 만들어지고 실행이 종료되면 폐기됨
=> 프로세스 생성 = OS가 PCB를 생성, 프로세스 종료 = OS가 PCB를 폐기
구성 요소
- 프로세스 ID(PID) = 일종의 프로세스의 고유 번호
=> 같은 프로그램일지라도 두번 실행 시 PID가 다른 두 개의 프로세스가 실행됨
- 레지스터 값 = 프로세스가 자신의 차례가 되돌아올 때 이전까지 사용하던 중간값을 복원한뒤 실행을 재개하기 위해
- 프로세스 상태 (생성, 대기, 실행 등)
- CPU 스케줄링 정보 - 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 정보 - 프로세스가 어느 주소에 저장되어 있는지에 대한 정보 (프로세스마다 메모리에 저장된 위치가 다름)
- 사용한 파일과 입출력장치 목록
문맥 교환(Context Switch)
- 기존에 실행 중인 프로세스의 문맥을 PCB에 백업한 뒤 중단하고 새로 실행할 프로세스의 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 과정 => 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리
- 문맥(Context) = 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
- 문맥 교환이 자주 발생하면 오버헤드가 발생할 수 있음
프로세스와 사용자 영역
- 하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역 등으로 나뉘어 저장됨
정적 할당 영역
- 크기가 고정된 영역
- 코드 영역(텍스트 영역) = 기계어로 이루어진 명령어를 저장 (read만 가능)
- 데이터 영역 = 잠깐 사용하고 제거할 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터를 저장 ex) 전역 변수
동적 할당 영역
- 크기가 변할 수 있는 영역
- 힙 영역(Heap Segment) = 사용자가 직접 할당할 수 있는 저장 공간
- 메모리 누수(Memory Leak) = 힙 영역에서 메모리 공간을 반환하지 않아 공간이 메모리 내에 계속 남아 메모리 낭비를 초래하는 현상
- 스택 영역(Stack Segment) = 데이터 영역과 반대로 잠깐 사용되다 제거될 데이터가 일시적으로 저장되는 공간
ex) 지역 변수, 매개 변수
- 일반적으로 힙 영역은 낮은 주소 -> 높은 주소로 할당되고, 스택 영역은 높은 주소 -> 낮은 주소로 할당됨
=> 데이터가 쌓여도 새롭게 할당되는 주소가 겹칠 일이 X
프로세스 상태
- 생성 상태(New) = 막 메모리에 적재되어 PCB를 할당받은 상태 (프로세스 생성 중)
- 준비 상태(Ready) = 아직 차례가 되지 않아 CPU를 할당 받기를 기다리고 있는 상태
※ 디스패치(Dispatch) = 준비 상태 => 실행 상태로 바뀌는 것
- 실행 상태(Running) = CPU를 할당받아 실행 중인 상태
=> 할당된 시간을 모두 사용하면 준비 상태, 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날 때가지 대기 상태
- 대기 상태(Waiting) = 입출력 작업이 끝날때까지 대기하는 상태 (입출력 작업이 끝나면 준비 상태로 전환)
- 종료 상태(Terminated) = 프로세스가 종료된 상태 => PCB, 메모리 정리
프로세스 계층 구조
- 프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있음
- 부모 프로세스 = 새 프로세스를 생성한 프로세스
- 자식 프로세스 = 부모 프로세스에 의해 생성된 프로세스 (자식 프로세스는 또 다른 프로세스를 생성할 수 있음)
프로세스 생성 기법
- fork = 부모 프로세스가 자신의 복사본을 자식 프로세스로 생성하는 시스템 호출 (복제)
=> 자식 프로세스가 PID를 제외한 모든 요소들이 부모 프로세스와 동일
- exec = 자신의 메모리 공간을 다른 프로그램으로 덮어쓰는(교체하는) 시스템 호출 (옷 갈아입기와 비슷)
=> 모든 요소들이 부모 프로세스와 다른 자식 프로세스
- 프로세스 계층 구조를 이루는 과정 = fork와 exec가 반복되는 과정
댓글