프로세스(Process)와 스레드(Thread)의 개념
• 프로세스(Process): 실행 중인 프로그램의 인스턴스이다.
• 스레드(Thread): 프로세스 내부에서 실행되는 작업의 흐름으로, 여러 스레드가 하나의 프로세스 내에서 동작할 수 있다.
주요 역할
• 새로운 프로그램 실행 시 운영체제(OS)가 프로세스를 생성하고, 종료 시 자원을 반환한다.
• 실행(Running), 준비(Ready), 대기(Waiting) 등의 상태를 관리한다.
• CPU를 효율적으로 사용하기 위해 어떤 프로세스를 실행할지 결정한다.
• CPU가 다른 프로세스로 전환될 때 CPU 레지스터와 메모리 상태를 저장하고 복원한다.
운영체제는 컴퓨터 자원(CPU, 메모리, 디스크 등)을 각 프로세스가 원활하게 사용할 수 있도록 할당하고 회수한다.
자원을 효율적으로 나누어 사용하도록 관리하여 성능을 최적화한다.
CPU 스케줄링은 운영체제가 어떤 프로세스에게 CPU를 할당할지 결정하는 과정이다.
컴퓨터 시스템의 효율성을 극대화하고 사용자에게 빠른 응답성을 제공하는 것이 목표이다.
시스템 효율성 향상
• CPU가 유휴 상태로 낭비되는 시간을 최소화하고, 최대한 많은 프로세스를 처리하여 전체 시스템의 효율성을 높인다.
사용자 응답성 향상
• 사용자의 요청에 빠르게 응답하여 사용자 경험을 개선한다.
공정성 확보
• 모든 프로세스에게 공평하게 CPU 사용 기회를 제공하여 특정 프로세스가 불이익을 받지 않도록 한다.
주요 CPU 스케줄링 알고리즘
알고리즘 | 설명 | 장점 | 단점 |
---|---|---|---|
FCFS (First Come, First Served) | 먼저 도착한 프로세스부터 CPU를 할당하는 방식 | 구현이 간단하고 공정하다 | 긴 작업이 짧은 작업을 기다리게 되어 비효율적일 수 있다 (Convoy Effect) |
SJF (Shortest Job First) | 실행 시간이 가장 짧은 프로세스부터 CPU를 할당하는 방식 | 평균 대기 시간을 최소화할 수 있다 | 실행 시간을 미리 예측하기 어렵다 |
RR (Round Robin) | 모든 프로세스에게 일정한 시간(타임 슬라이스) 동안 CPU를 할당하는 방식 | 응답 시간이 빠르고 공정하다 | 타임 슬라이스가 너무 짧으면 오버헤드가 증가할 수 있다 |
Priority Scheduling | 우선순위가 높은 프로세스에게 CPU를 먼저 할당하는 방식 | 중요한 작업을 먼저 실행할 수 있다 | 낮은 우선순위의 프로세스가 계속 대기할 수 있음 (기아 상태) |
운영체제는 상황에 따라 적절한 스케줄링 알고리즘을 선택하여 사용한다.
현대 컴퓨터 시스템은 멀티태스킹을 통해 여러 작업을 동시에 처리한다.
이때 사용되는 핵심 개념이 멀티 프로세스와 멀티 스레드이다.
두 방식 모두 동시에 여러 작업을 처리하지만, 작동 방식과 장단점에 차이가 있다.
📌 1. 멀티 프로세스 (Multi-Process)
• 각 프로세스는 독립적인 메모리 공간을 가지며, 서로 간섭 없이 작업을 수행한다.
• 프로세스 간 통신(IPC, Inter-Process Communication)이 필요할 때, 오버헤드가 발생할 수 있다.
✅ 장점
• 안정성: 하나의 프로세스가 오류가 나도 다른 프로세스에 영향을 주지 않는다.
• 병렬 처리 가능: 여러 개의 CPU 코어를 활용하여 작업을 병렬로 실행할 수 있다.
❌ 단점
• 오버헤드 발생: 프로세스를 생성하고 관리하는 데 많은 비용이 발생한다.
• 자원 사용량 증가: 독립적인 메모리 공간을 사용하므로 메모리 사용량이 많다.
📌 2. 멀티 스레드 (Multi-Thread)
• 하나의 프로세스 내에서 여러 개의 스레드를 생성하여 작업을 병렬로 실행하는 방식이다.
• 모든 스레드는 공유 메모리 공간을 사용하므로, 스레드 간 통신이 빠르다.
✅ 장점
• 자원 효율성 증가: 프로세스 내에서 메모리를 공유하므로 메모리 사용량이 적다.
• 빠른 응답성: 여러 작업을 동시에 수행할 수 있어 프로그램의 응답성이 향상된다.
❌ 단점
• 안정성 문제: 하나의 스레드가 오류가 나면 전체 프로세스가 영향을 받을 수 있다.
• 동기화 문제 발생 가능: 공유 자원에 여러 스레드가 접근하면 데이터 충돌이 발생할 수 있다.
멀티 프로세스 vs 멀티 스레드 비교
구분 | 멀티 프로세스 (Multi-Process) | 멀티 스레드 (Multi-Thread) |
---|---|---|
메모리 공간 | 프로세스마다 독립적인 메모리 사용 | 모든 스레드가 같은 메모리 공간을 공유 |
자원 소모 | 높음 (프로세스 간 통신 비용 발생) | 낮음 (메모리 공유로 오버헤드 적음) |
안정성 | 높음 (프로세스 간 격리) | 낮음 (하나의 스레드 오류가 전체에 영향) |
속도 | 느림 (프로세스 생성 비용) | 빠름 (스레드 전환 비용 적음) |
웹 브라우저, 게임 엔진 등에서는 멀티 스레드를, 서버 관리 등에서는 멀티 프로세스를 활용한다.
운영체제는 프로세스가 실행될 때 코드, 데이터, 스택, 힙 영역으로 메모리를 관리한다.
영역 | 설명 |
---|---|
코드(Code) 영역 | 프로그램의 실행 코드(명령어)가 저장되는 공간 |
데이터(Data) 영역 | 전역 변수 및 정적 변수(static 변수)가 저장되는 공간 |
스택(Stack) 영역 | 함수 호출 시 지역 변수와 매개변수가 저장되는 공간 (후입선출 구조) |
힙(Heap) 영역 | 동적으로 할당된 메모리가 저장되는 공간 (가비지 컬렉터가 자동 관리) |
힙(Heap) 영역을 많이 사용하면 메모리 누수가 발생할 수 있다.
• 운영체제는 프로세스와 스레드를 관리하며, CPU 스케줄링을 통해 최적의 성능을 제공한다.
• 멀티 프로세스는 안정성이 높고 멀티 스레드는 효율성이 높다.
• 프로세스는 메모리 영역(코드, 데이터, 스택, 힙)을 사용하며, 효율적인 메모리 관리가 필요하다.