프로그램(Program)과 프로세스(Process)
프로그램(Program)
프로그램은 실행 가능한 파일로, 컴퓨터가 실행할 수 있는 명령어들의 집합입니다. 여기서 명령어들의 집합은 프로그래밍 언어로 작성된 코드를 컴파일러나 인터프리터를 통해 목적코드(Object Code)로 변환되어 이진코드(Binary Code) 형태로 컴퓨터가 이해할 수 있는 데이터를 뜻합니다.
프로세스(Process)
프로세스는 실행 중인 프로그램의 인스턴스로 운영체제에 의해 생성되고 관리됩니다. 프로세스는 실행 중인 프로그램의 Code, Data, Heap, Stack 등의 상태를 포함하며, 운영체제가 할당한 시스템 자원을 사용합니다. 또한 해당 프로세스에 대한 정보를 담고 있는 PCB(Process Control Block)이 함께 생성됩니다.
프로세스의 동시성(Concurrency)
일반적으로 컴퓨터를 사용하게 되면 동시에 여러 개의 프로그램을 실행시켜 사용하는 경우 즉, 멀티 태스킹(Multi-Tasking) 작업이 빈번하게 일어납니다. CPU는 여러 개의 프로그램을 동시에 작업이 진행되는 것처럼 동작할 수 있도록 컨텍스트 스위칭(Context Switching) 작업을 반복하게 됩니다.
컨텍스트 스위칭(Context Switching)이란?
만약, 브라우저와 IDE 프로그램을 동시에 실행시킨다고 할 경우 각, 프로세스는 운영체제의 프로세스 스케줄링(Process Scheduling)에 의해서 시분할로 프로세스의 상태가 관리됩니다. 먼저 브라우저가 실행상태일 경우 PCB가 CPU에 의해서 처리되고 IDE의 실행상태는 준비상태가 됩니다. 그리고 브라우저가 준비상태가 된다면 현재상태를 저장 후 IDE는 실행상태가 되고 PCB가 CPU에 의해 처리됩니다. 이러한 작업을 컨텍스트 스위칭이라고 합니다.
스레드(Thread)
스레드는 프로세스 내에서 실행되는 작은 실행 단위입니다. 프로세스는 하나 이상의 스레드를 가질 수 있으며 부모 프로세스의 Code, Data, Heap 자원을 공유하며 Stack 은 스레드마다 고유하게 가지게 됩니다. 이러한 스레드의 자원 공유는 컨텍스트 스위칭이 일어날 때 캐싱 적중률이 오르도록 합니다. 즉, 스레드는 하나의 프로세스 내에서 서로 다른 실행 경로를 가질 수 있도록 해주는 개념입니다.
멀티 프로세스와 멀티 스레드
멀티 프로세스와 멀티 스레드는 모두 하나의 애플리케이션에 대한 처리 방식의 일종입니다. 여기서 주의해야 하는 개념은 단순히 여러 개의 프로그램을 구동시켜 멀티 프로세스가 동작하고 있다고 생각하면 멀티 스레드란 개념과 비교하기 어렵습니다. 때문에 한 애플리케이션 내에서 다른 처리방식으로 두 가지의 개념을 설명해야 합니다.
멀티 프로세스의 실사용 사례
많은 사람들이 사용하고 있는 브라우저로 예를들 수 있습니다. 브라우저는 멀티 프로세스 아키텍처를 사용한 좋은 예로 각, 브라우저 탭은 부모 프로세스를 fork()하여 별도의 프로세스로 실행되며 이는 안정성과 보안을 높이는데 도움이 됩니다. 하나의 탭에서 문제가 발생하더라도 전체 브라우저가 충동하는 것을 방지할 수 있으며 탭 간의 서로 영향을 미치지 않도록 분리된 메모리 공간을 사용합니다.
멀티 프로세스의 단점
- 멀티 프로세스 아키텍처 때문에 별도의 프로세스로 실행되어 메모리 사용량이 증가
- IPC(Inter-Process Communication)를 사용한 통신
- Context Switching 비용이 크다
멀티 스레드의 실사용 사례
하나의 REST API 어플리케이션은 사용자의 요청을 받아 처리하는 일도 하며 일정 시간마다 처리하는 일이 있다고 가정했을 때 어플리케이션은 별도의 스레드로 목적에 맞게 생성하여 처리할 수 있다. 즉, 하나의 어플리케이션 내에서 작업의 단위가 나누어질 때 스레드가 병렬로 동시에 실행하는 예로 설명할 수 있다.
멀티 스레드의 단점
- 공유 자원에 대한 관리를 해야한다.
멀티 코어
멀티 프로세스와 멀티 스레드는 소프트웨어적 동시성 작업을 위한 처리방식의 일종이다. 멀티 코어는 물리적 동시성 및 병렬성 작업을 위한 처리방식으로 멀티 프로세서(Multi Processor)를 하나의 프로세서 칩(CPU)에 통합하여 각, 코어가 동시에 작업을 처리할 수 있도록 합니다. 이를 통해 하나의 컴퓨터 시스템 내에서 여러 개의 프로세스 또는 스레드를 병렬적(Parallelism)으로 실행할 수 있습니다.
포스팅을 마치며
본 포스팅을 읽고 아래의 질문에 답변할 수 있는 것을 바랍니다🙏
- 스레드(Thread)가 무엇인지 설명할 수 있다.
- 프로세스(Process)가 무엇인지 설명할 수 있다.
- 스레드와 프로세스의 차이점을 설명할 수 있다.
- 멀티 스레드(Multi-Thread)와 멀티 프로세스(Multi-Process)의 차이점을 설명할 수 있다.
- 스레드를 사용한 사례를 설명할 수 있다.
- CPU의 Context Switching의 개념을 설명할 수 있다.
참고자료
https://www.youtube.com/watch?v=1grtWKqTn50
'기초 CS 파훼하기' 카테고리의 다른 글
블록킹(Blocking)과 논블록킹(Non-Blocking) 그리고 싱크(Sync)와 어싱크(Async) 파훼하기 (0) | 2024.10.22 |
---|