운영체제 - 프로세스와 스레드

네민·2025년 2월 13일

우당탕탕 cs 공부

목록 보기
10/14

프로세스

실행 중인 프로그램으로, 독립적인 실행 공간을 가진다.

하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있으며, 여러 프로세스를 실행하려면 컨텍스트 스위칭이 필요하다.

컨텍스트 스위칭이란?

CPU가 현재 실행 중인 프로세스의 레지스터, 프로그램 카운터(PC), 스택 포인터 등의 상태를 PCB(Process Control Block)에 저장한 후, 새로운 프로세스의 PCB를 불러와 실행하는 과정이다.

예를 들어,

A 프로세스가 실행되다가 현재 상태(레지스터 값, 실행 위치, 스택 포인터)를 PCB에 저장하고,

B 프로세스의 PCB를 CPU가 다시 로드하여 실행하는 방식이다.

단점은 자주 발생하면 오버헤드가 발생하여 성능이 저하될 수 있다.

스레드

프로세스를 구성하는 실행 흐름의 단위이다.

스레드는 각기 다른 스레드ID, 레지스터, 스택 같은 최소한의 값만 가지고 있다. 그리고 한 프로세스 내에서 구성돼있기 때문에 프로세스의 자원을 공유할 수 있다.

하나의 프로세스는 여러 개의 스레드를 가질 수 있는데, 한 개의 스레드만 실행되는 경우 단일 스레드 프로세스이고, 여러 개의 스레드가 실행되면 멀티 스레드 프로세스라고 부른다.

멀티 스레드란?

멀티 스레드는 프로세스 내에서 메모리와 자원을 공유하기 때문에, 프로세스 간 통신(IPC)보다 빠르고 효율적이다. 하지만, 동기화 문제(예: 경합 조건, 데드락)가 발생할 수 있기 때문에, 적절한 동기화 기법을 적용해야 한다.

  • IPC: 독립적인 프로세스 간 데이터를 주고받거나 자원을 공유하는 방법

멀티 프로세스 vs 멀티 스레드

위의 사진을 보면 왼쪽은 멀티 프로세스고 오른쪽은 멀티 스레드이다. 왜 이런 차이가 생길까?

우선 멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 사용하기 때문에, 동일한 작업을 수행해도 각각의 메모리에 개별적으로 존재한다.

즉, fork()를 이용해 여러 개의 동일한 프로세스를 만들면 프로세스마다 독립적인 실행 흐름을 가지며, 별도의 메모리를 할당받아 실행된다.

이 방식의 문제점은 메모리 사용량이 증가하고, IPC가 필요하다는 점이다. 이 문제를 해결하기 위해 ‘쓰기 시 복사’라는 개념을 적용한다.

  • 쓰기 시 복사(Copy-On-Write) : fork()를 호출하면 초기에는 부모 프로세스의 메모리를 그대로 공유하지만, 어떤 프로세스가 데이터를 변경할 경우 그때서야 복사하여 독립적인 메모리를 생성하는 방식이다. 이를 통해 불필요한 메모리 복사를 방지하고 성능을 최적화할 수 있다.

그다음 멀티 스레드는 하나의 프로세스 내에서 여러 개의 실행 흐름이 존재하는 구조이다. 모든 스레드가 같은 메모리 공간을 공유하며, 각 스레드는 개별적인 스택을 가진다. 이 방식의 장점은 메모리를 절약할 수 있고, 빠른 실행 속도를 가진다. 하지만 자원을 공유하기 때문에 한 스레드에서 문제가 생기면 전체적으로 오류가 생긴다.


면접 질문
1. 프로세스와 스레드의 차이를 알려주세요.
2. 컨텍스트 스위칭이란 뭔가요?
3. 멀티 프로세스와 멀티 스레드의 차이점이 뭔가요?

profile
기록하자

2개의 댓글

comment-user-thumbnail
2025년 2월 26일

왜 글 안올리시죠? 공부하세요

1개의 답글