Process vs Program

Program은 명령어 리스트를 내용으로 가진, 디스크에 저장된 파일입니다.
Spotify를 예시로 든다면, 실행되기 전 디스크에 저장된 상태(실행파일) 그 자체가 됩니다.
(비공식적으로) Process란 실행중인 Program을 뜻합니다.
즉, Main Memory에 올라가있는 Program을 Process라고 뜻합니다.
정리하자면 Disk에 위치한 명령어 리스트들은 Program.
해당 Program중 일부를 Main Memory에 옮기게 되면, 이를 Process라고 부르게 됩니다.
현대의 컴퓨팅 시스템에서는 Process가 작업의 단위로 사용되는 만큼 중요한 개념입니다.
Process의 메모리 배치

Process의 메모리 배치는 위 그림과 같습니다.
아래에서 각 부분에 저장되는 값을 알아보겠습니다.
- text: 실행 코드가 저장됩니다.
- data: 전역 변수가 저장됩니다.
- heap: 프로그램 실행중 동적으로 할당되는 memory 입니다. (런타임에 크기가 결정)
- stack: 함수를 호출할 때 임시데이터를 저장하는 공간입니다. 함수의 매개변수, 복귀 주소 및 지역변수를 저장하는 activation record가 이곳에 저장됩니다. (컴파일 타임에 크기가 결정)
Process의 상태

Process는 실행되면서 상태가 변하게 됩니다.
Process의 상태는 부분적으로 그 Process의 현재의 활동에 따라 정의됩니다.
- New: Process 생성중
- Ready: Process가 처리기(CPU)에 할당되기를 기다림
- Running: 명령어들이 실행중
- Waiting: Process가 어떤 이벤트(입출력 완료, 신호의 수신 같은)를 기다림
- Terminated: Process 실행이 종료
한 순간에 하나의 CPU 코어는, 한 개의 Process만 실행할 수 있습니다.
하지만, 많은 Process가 waiting, ready 상태에 존재할 수 있습니다.
Process의 특징
각 Process는 별도의 Memory 공간에서 시작됩니다. 이는
- 한 Process가 다른 Process에 무단으로 접근하는 것을 막고,
- 한 Process의 오류가 다른 Process에 영향을 끼치는 것을 막으며,
- OS가 각 Process에 할당된 자원을 효과적으로 관리할 수 있게 합니다.
IPC(Inter Process Communication)
IPC는 단어 뜻 그대로 Process간 통신을 뜻합니다.
그렇다면 IPC는 왜 중요할까요?
- Data 공유: 여러 Process가 협력하여 작업을 수행할 때, 필요한 정보를 공유할 수 있습니다.
- 모듈화: 복잡한 시스템을 여러개의 독립적인 Process로 나눌수 있게 합니다.
- 성능 향상: 여러 Process가 병렬로 작업을 수행하면서 효과적으로 통신할 수 있습니다.
주요 IPC 메커니즘
- 파이프: 단방향 통신을 위한 메커니즘입니다. 주로 부모-자식간 사용됩니다.
- 소켓: Network를 통한 Process간 통신을 가능하게 합니다. Local, 원격 모두 가능합니다.
- 공유메모리: 여러개의 Process가 동일한 Memory에 접근하여 빠른 데이터 교환이 가능하게 합니다.
- 메시지 큐: Process들이 메시지를 주고 받을 수 있는 큐를 제공합니다.
- 세마포어: 공유자원에 대한 접근을 동기화하는데 사용합니다.
PCB(Process Control Block)

운영체제는 Process를 관리하기 위해 Process에 대한 정보들이 필요합니다.
이러한 Process의 정보는 OS에서, PCB(Process Control Block) 에 의해 표현됩니다.
PCB는 특정 Process에 연관된 여러 정보를 수록합니다.
- Process 상태: new, running, ready waiting 또는 halted(정지). (terminated 는 이미 종료된 상태이므로 PCB 자체가 삭제됩니다.)
- 프로그램 카운터: 해당 Process가 다음에 실행할 명령어의 주소
- CPU 레지스터들: 컴퓨터 구조에 따라 다양한 수와 종류의 레지스터가 존재합니다.
누산기(accumulateor), 인덱스 레지스터, 스택 레지스터, 범용 레지스터와 상태코드가 저장됩니다.
프로그램 카운터와 상태코드는 나중에 Process가 다시 스케줄 될 때 올바르게 실행되도롭 하기 위해 인터럽트 발생 시 저장되어야합니다.
- CPU 스케줄링 정보: OS에 의해 사용되는 메모리 시스템에 따라 base 레지스트리와 limit 레지스트리 값 그리고 페이지테이블 또는 세그먼트 테이블 등이 저장됩니다.
- 회계(accounting) 정보: CPU 사용시간, 경과된 실시간, 시간 제한, 계정 번호, 잡 또는 프로세스 번호 등이 저장됩니다.
- 입출력 상태 정보: Process에 할당된 입출력 장치들, 열린 파일 목록등이 저장됩니다.
정리하자면, 약간의 회계 정보와 Process가 시작하고 재시작 할 때 필요한 모든 데이터의 저장소가 PCB라고 할 수 있습니다.
참조
Operating System Concepts 10th edition
https://wisdom-and-record.tistory.com/85