컴퓨터 프로그램
: 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음
프로세스
: 실행중인 프로그램
프로그램의 사전적 의미이는 진행 계획이나 순서, 또는 그 목록을 말하고 컴퓨터에서 프로그램이란 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문 집합이다.
프로그램과 프로세스를 연결해서 설명해보자면
보조기억장치에 저장되어 있는 데이터 덩어리를 프로그램
이라 하고 이 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스
가 된다.
포그라운드 프로세스(foreground process)
: 사용자가 보는 앞에서 실행되는 프로세스백그라운드 프로세스(background process)
: 사용자가 보지 못하는 뒤편에서 실행되는 프로세스데몬(유닉스 운영체제)
,서비스(윈도우 운영체제)
: 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 프로세스
프로세스 제어 블록(PBC : Process Control Block )
: 빠르게 번갈아가며 수행되는 프로세스를 관리하기 위해 사용되는 자료 구조
PCB에 담기는 대표적인 정보
- 프로세스 ID : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
- 레지스터 값 : 프로세스 실행시 이전까지 사용한 레지스터 중간 값 복원 후 실행 재게
- 프로세스 상태 :
ex) 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태 등등..
- CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 정보 : 어느 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보
- 사용한 파일과 입출력장치 정보 : 할당된 입출력장치, 사용중인 파일 정보
문맥 교환 (Context Switching) : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
문맥 교환 순서
기존에 실행되던 프로세스 중간 정보를 백업 ↔ 뒤이어 실행할 프로세스 문맥을 복구
➡반복하여 실행
프로세스 생성 시 커널영역에 PCB가 저장되고 사용자영역에는 무엇이 배치될까?
코드 영역(code segment) == 텍스트 영역(text segment)
데이터 영역
❗❗ 코드영역과 데이터 영역은 크기가 고정된 정적 할당 영역
힙 영역
- 프로그래머가 직접 할당할 수 있는 저장공간
<메모리 누수(memory leak)>
힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 하는데
메모리 공간을 반환하지 않아 할당한 공간아 메모리 내에 계속 남아있어 메모리 낭비를 초래하는 문제
<가비지 컬렉션(garbage collection)>
메모리 누수를 방지하기 위한 메모리 관리 방법
스택 영역
❗❗ 힙 영역과 스택 영역은 크기가 가변적인 동적 할당 영역
생성 상태(new)
준비 상태(ready)
실행 상태(running)
대기 상태(blocked)
종료 상태(terminated)
⬆ 프로세스 상태 다이어그램 ⬆
부모 프로세스
: 새 프로세스를 생성한 프로세스
자식 프로세스
: 부모 프로세스에 의해 생성된 프로세스
(윈도우는 프로세스 계층이 없음)
➡ 부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가짐
fork
: 자기 자신 프로세스의 복사본을 자식 프로세스로 생성하는 시스템 호출
exec
: 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출
프로세스 생성 기법
1. 부모 프로세스는 fork 시스템 호출
을 통해 자신의 복사본을 자식 프로세스로 생성
2. 자식 프로세스는 exec 시스템 호출
을 통해 자신의 메모리 공간을 다른 프로그램으로 교체