목차
- 프로세스
- 프로세스 구조
- PCB
- Context switching
프로세스
프로세스는 실행중인 프로그램을 의미한다
, 즉 프로그램과 함께 프로세스의 상태, 프로그램 카운터, 레지스터 값, 메모리 관리 정보(예: 페이지 테이블), 입출력 상태 정보, 파일 시스템 관련 정보 등을 포함합니다.
- 프로세스(Process)의 정의
- CPU에 의해서 현재 실행되고 있는 프로그램.
- 프로세스 제어 블록(PCB, Process Control Block)의 존재로서 명시되는 것.
- 프로세서(Processor)가 할당되는 개체로서 디스패치(Dispatch)가 가능한 단위.
- 지정된 결과를 얻기 위한 일련의 계통적 동작.
- 목적 또는 결과에 따라 발생되는 사건들의 과정.
- 비동기적 행위를 일으키는 주체.
- 프로시저(Procedure)가 활동 중인 것.
- 실행중인 프로시저(Procedure)의 제어 궤적(軌跡).
- CPU가 할당되는 실체.
예시)
본인은 엑셀 프로그램(excel.exe)을 켰다. 이때 엑셀을 실행시키기 위해 컴퓨터는 엑셀 프로그램을 읽어야 한다. 컴퓨터에서 모든 프로그램은 코드로 작성되어 있다. 이 코드 파일을 컴퓨터가 읽으려면 CPU가 이해할 수 있는 형태인 저급 언어(0과 1로 이루어진 기계어)로 프로그램이 만들어져야 한다. 0과 1로 작성된 실행 프로그램을 코드 이미지 또는 바이너리라고 부르며, 보통 exe란 확장자가 붙는다. 이 exe 프로그램을 실행하면 메모리에 실행할 데이터가 올라가고, CPU가 이 데이터의 코드를 한줄씩 읽어 나가며 실행한다. 이때, 메모리에 올려진 데이터를 프로세스라고 한다.
프로세스 구조
프로세스를 실행시키기 위해서는 코드의 데이터를 메모리에 올려 실행시켜야 한다. 이때, 프로세스마다 고유한 가상 메모리 공간을 제공하며, 이 공간은 4개로 나눌 수 있다.
1. code 영역(Text Segment)
- 내가 작성한 코드가 저장되는 공간으로, 코드는 컴파일 되어 0과 1로 변환된 기계어가 저장된다.
- 실행할 수 있는 코드로 기계어로 이루어진 명령어 저장
- 데이터가 아닌 CPU가 실행할 명령어가 담기기 때문에 쓰기가 금지된 영역 (Read-only)
2. Data 영역(Data Segment)
- 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장
- 내가 작성한 코드에서 선언된 전역 변수, 정적 변수, 상수 등을 저장한다.
- 초기화된 변수와 초기화되지 않은 변수들이 나눠서 저장된다.
- 데이터 영역은 프로그램의 시작 시 초기화되며, 프로세스가 종료될 때까지 유지된다.
3. Stack
- 데이터가 일시적으로 저장되는 공간
- 내가 작성한 함수에서 지역변수, 매개변수, return 주소들을 저장한다.
- 알고리즘에서 사용하는 stack 구조를 사용해서 stack이라고 부른다. 프로세스마다 독립적인 stack을 가질 수 있고, stack 포인터를 통해 스택의 상태를 관리한다.
- 함수가 호출되면 stack 공간이 생성되며, 함수가 종료되면 제거된다.
- 스택영역의 크기는 동적으로 확장될 수 있다.
4. Heap
- 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장 공간
- 내가 작성한 코드에서 동적으로 생성되는 데이터 구조나 객체들을 저장한다.
- 예를 들면, 객체나 배열을 생성했을 때 프로그램 실행마다 얼마만큼의 데이터가 추가될 지 모른다. 데이터가 추가됨에 따라 유동적으로 공간을 늘릴 수 있는게 힙 영역이다.
- 힙은 동적으로 할당되는 메모리 영역으로, 프로세스가 실행 중에 동적으로 메모리를 할당받고 해제하는데 사용된다.
- 힙은 프로세스의 주소 공간의 나머지 영역에 위치하며, 크기는 동적으로 확장될 수 있다.
- 프로그램이 중 힙 메모리를 할당을 받았다면 언젠가는 다시 힙 메모리 공간을 반환해야한다. 파이썬과 같은 언어는 Garbage collection 가 알아서 해준다. C언어는 직접 할당, 반환 해줘야한다. 만약 반환하지 않으면 Memory Leak 을 초래할 수도 있다.
Stack 과 Heap 영역은 가변적으로 영역의 크기가 변할 수 있기 때문에 동적 할당 영역이라고 부른다

PCB (프로세스 제어 블록)
프로세스 제어 블록(PCB)은 운영체제가 프로세스를 관리하기 위해 필요한 정보들을 담고있는 자료구조이다.
프로세스들은 돌아가며 항정된 시간 만큼 CPU 이용
- 자신의 차례에 정해진 시간만큼 CPU 이용
- 타이머 인터럽트가 발생하면 차례 양보

프로세스 제어 블록은
- 빠르게 번갈아 수행되는 프로세스들을 관리하기 위해 사용하는 자료구조가 프로세스 제어 블록 (PCB)
- 프로세스 관련 정보를 저장하는 자료 구조
- 마치 상품에 달린 태그와 같은 정보
- 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기

PCB 에 담기는 대표적인 정보
- 프로세스 ID (=PID)
- 특정프로세스를 식별하기 위해 부여하는 고유 번호
- 레지스터값
- 프로세스가 현재 실행되는 동안 사용되는 레지스터 값들을 저장한다. 여기서 프로세스가 일시 중단되고 다시 실행 될 때 레지스터 값들을 복원하는 데 사용된다.
- 프로세스 상태
- 프로세스의 현재 상태를 나타낸다. 예를 들면, 생성, 준비 , 실행, 대기, 종료 등의 상태 등이 있다. 이 상태 정보는 프로세스 스케줄링과 상호작용하여 프로세스의 실행을 관리한다.
- CPU 스케줄링 정보
- 프로세스의 우선순위, 할당 된 CPU 시간, 스케줄링 알고리즘과 관련된 정보 등 스케줄링에 필요한 정보를 포함한다.
- 즉 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 정보
- 프로세스가 사용하는 메모리 공간의 주소 범위, 페이지 테이블, 메모리 할당 정보 등과 같이 메모리 관리에 필요한 정보를 저장한다.
- 즉프로세스가 어느 메모리 주소에 저장되어 있는지에 대한 정보
- 사용한 파일과 입출력장치 정보
- 프로세스가 현재 사용 중인 입출력 장치와 관련된 정보를 포함한다. 예를 들어, 어떤 입출력 요청을 보내고 있는지, 어떤 파일을 열어두었는지 등의 정보를 저장한다.
- 즉 할당된 입출력 장치, 사용중인 파일 정보
Context switch
현재 진행하고 있는 Task(Process, Thread)의 상태(context)를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말합니다.
- 한 프로세스 (e.g. 프로세스 A) 에서 다른 프로세스 (e.g. 프로세스 B)로 실행 순서가 넘어가면 ?
- 기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업
- 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등
- 이러한 중간 정보 == context
- 다음 차례가 왔을 때 실행을 재개하기 위한 정보 == context
- "실행 context 를 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있다"
- 뒤이어 실행할 프로세스 B의 문맥을 복구
이처럼 기존의 실행중인 프로세스 context 을 백업하고 새로운 프로세스 실행을 위해 context 을 복구하는 과정을 context switching 이라 한다
(Context switching 덕분에 여러 프로세스가 끊임없이 빠르게 번갈아 가면 실행될 수 있음)
ex) context switch 과정 예시


Context Switching Cost
- Context Switching이 발생하게 되면 많은 Cost가 소요됩니다.
- Cache 초기화
- Memory Mapping 초기화
- Kernel은 항상 실행되어야 합니다. (메모리의 접근을 위해서..)
Process vs Thread
- Context Switching 비용은 Process가 Thread보다 많이 듭니다.
- Thread는 Stack 영역을 제외한 모든 메모리를 공유하기 때문에
- Context Switching 발생시 Stack 영역만 변경을 진행하면 됩니다.
Reference :
- https://www.youtube.com/watch?v=Jjfah3t_xWk&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=28 : 참고한 강의
- https://nesoy.github.io/articles/2018-11/Context-Switching : context switching 자세히 알려줌
- https://jerryjerryjerry.tistory.com/178 : 프로세스에 대해 자세히 알려줌