
컴퓨터 프로그램: 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음
프로세스: 실행중인 프로그램
프로그램의 사전적 의미이는 진행 계획이나 순서, 또는 그 목록을 말하고 컴퓨터에서 프로그램이란 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문 집합이다.
프로그램과 프로세스를 연결해서 설명해보자면
보조기억장치에 저장되어 있는 데이터 덩어리를 프로그램이라 하고 이 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스 가 된다.
포그라운드 프로세스(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 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체