컴퓨터/정보>대학 전공>운영체제 - 프로세스와 스레드
개념 정리

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

단원 개요
실행 중인 프로그램인 프로세스와 실행 흐름의 최소 단위인 스레드의 메모리 구조(Code/Data/Heap/Stack), 문맥 교환(Context Switching), 동기화와 교착상태(Deadlock)를 학습합니다.
선수 개념
필수 키워드:프로세스 (Process)4개의 가상 메모리 영역Code (Text) 영역Data 영역Heap 영역Stack 영역스레드 (Thread)실행 흐름PCB문맥 교환(Context Switching)
1

프로세스(Process)와 스레드(Thread)의 메모리 구조 비교

•
프로세스 (Process): 보조기억장치에 저장된 정적인 프로그램(실행 파일)이 메모리에 적재되어 운영체제(OS)로부터 시스템 자원을 할당받아 실행 중인 상태입니다. 각 프로세스는 독립된 4개의 가상 메모리 영역을 가집니다:
1
Code (Text) 영역: 실행할 프로그램의 기계어 코드가 저장되는 읽기 전용 영역.
2
Data 영역: 전역 변수(Global)와 정적 변수(Static)가 저장되며 프로그램 시작 시 할당되어 종료 시 소멸.
3
Heap 영역: 프로그래머가 런타임에 동적으로 할당(malloc, new, 객체 생성)하는 영역.
4
Stack 영역: 함수 호출 시 생성되는 지역 변수, 매개변수, 복귀 주소가 저장되는 영역.
•
스레드 (Thread): 프로세스 내부에서 CPU 스케줄링의 기본 단위가 되는 실행 흐름입니다.
•
같은 프로세스 내의 스레드들은 Code, Data, Heap 영역을 서로 공유하고, 함수 호출 흐름이 각자 다르므로 오직 Stack 영역과 PC(Program Counter)를 포함한 레지스터 집합만 독립적으로 소유합니다.
핵심 원리
기술 면접 1순위 질문: '스레드끼리 공유하는 자원과 독립적으로 가지는 자원은?' -> Code, Data, Heap 영역은 공유하고, 각 스레드의 함수 호출 기록인 Stack 영역과 PC 레지스터는 독립적으로 가집니다!
2

문맥 교환(Context Switching)과 교착상태(Deadlock) 4대 조건

•
PCB (Process Control Block)와 문맥 교환:
•
운영체제는 각 프로세스를 관리하기 위해 프로세스 ID(PID), 상태(Ready, Running, Waiting), PC 및 레지스터 값, 메모리 관리 정보를 담은 PCB를 커널 영역에 유지합니다.
•
문맥 교환(Context Switching): 인터럽트나 타임 슬라이스 만료로 CPU를 다른 프로세스에 넘길 때, 기존 프로세스의 레지스터 상태를 PCB에 저장하고 새 프로세스의 PCB를 CPU에 복원하는 과정입니다. 스레드 간 문맥 교환은 공유 메모리(Code/Data/Heap)와 TLB 캐시를 비울 필요가 없어 프로세스 간 문맥 교환보다 훨씬 빠릅니다.
•
교착상태 (Deadlock, 데드락): 두 개 이상의 프로세스나 스레드가 서로 상대방이 점유한 자원을 무한정 기다리며 멈춰버리는 현상입니다. 아래 4가지 조건이 동시에 모두 성립할 때만 발생합니다:
1
상호 배제 (Mutual Exclusion): 한 번에 하나의 프로세스만 해당 자원을 사용할 수 있음.
2
점유와 대기 (Hold and Wait): 최소 하나의 자원을 보유한 채로 다른 프로세스의 자원을 추가로 기다림.
3
비선점 (No Preemption): 다른 프로세스가 사용 중인 자원을 강제로 빼앗을 수 없음.
4
순환 대기 (Circular Wait): 자원 대기 관계가 P1→P2→⋯→P1P_1 \rightarrow P_2 \rightarrow \dots \rightarrow P_1 형태의 닫힌 원형 고리를 이룸.
풀이

1) 원인 (경쟁 상태, Race Condition):

count = count + 1은 고급 언어에서는 한 줄이지만, 실제 CPU 기계어로는 ① 메모리에서 count 값을 레지스터로 읽기(LOAD) ② 레지스터 값에 1 더하기(ADD) ③ 결과를 메모리에 쓰기(STORE)의 3단계로 나뉩니다.

만약 T1이 0을 읽어 1을 만든 직후 아직 메모리에 쓰기 전에 문맥 교환이 일어나 T2도 메모리에서 여전히 0을 읽어가면, 두 스레드 모두 1을 덮어쓰게 되어 덧셈 한 번이 증발합니다.

2) 해결 방법 (동기화, Synchronization):

공유 자원에 접근하는 코드 구간을 임계 구역(Critical Section)으로 지정하고, 뮤텍스(Mutex Lock), 세마포어(Semaphore), 또는 원자적 연산(Atomic CAS)을 적용해 한 번에 하나의 스레드만 진입하도록 상호 배제를 보장해야 합니다.

3

CPU 스케줄링 알고리즘과 멀티스레드 동기화 실무

•
주요 CPU 스케줄링 알고리즘:
•
비선점형: FCFS(먼저 온 순서대로 처리, 긴 작업 뒤에 짧은 작업이 밀리는 호위 효과 Convoy Effect 발생), SJF(실행 시간이 가장 짧은 작업 우선, 평균 대기 시간은 최소이나 긴 작업의 기아 현상 Starvation 발생).
•
선점형: Round Robin (RR)(모든 프로세스에 동일한 시간 할당량 Time Quantum을 부여하고 순환, 시분할 시스템의 표준), 다단계 피드백 큐(MLFQ).
•
뮤텍스(Mutex) vs 세마포어(Semaphore):
•
뮤텍스: Key(Lock)를 가진 오직 1개의 스레드만 임계 구역에 들어갈 수 있으며, 락을 건 당사자만 락을 해제할 수 있습니다.
•
세마포어: 정수형 카운터 변수(SS)를 두어 최대 SS개의 스레드가 동시에 공유 자원에 접근하는 것을 허용합니다 (예: DB 커넥션 풀 최대 10개 제한).
주의할 점
실무에서 데드락(Deadlock)을 가장 효과적으로 예방하는 방법은 4대 조건 중 '순환 대기(Circular Wait)'를 깨뜨리는 것입니다. 모든 자원에 고유 번호를 매기고 항상 오름차순으로만 Lock을 획득하도록 강제하면 데드락이 절대 발생하지 않습니다.

핵심 요약

  • ✓
    프로세스는 독립된 메모리 공간(Code, Data, Heap, Stack)을 가지며, 스레드는 Stack과 PC만 독립적으로 갖고 나머지를 공유한다.
  • ✓
    문맥 교환(Context Switching)은 CPU 제어권을 넘길 때 PCB에 프로세스 상태를 저장하고 복원하는 과정이다.
  • ✓
    교착상태(Deadlock)는 상호 배제, 점유와 대기, 비선점, 순환 대기의 4가지 조건이 동시에 충족될 때만 발생한다.
  • ✓
    멀티스레드 환경에서는 경쟁 상태(Race Condition)를 막기 위해 뮤텍스나 세마포어를 통한 임계 구역 동기화가 필수적이다.

설명 다음에는 직접 풀어 보세요

함께 풀기와 자기 설명을 거쳐 새 문제에 도전해요. 막힌 부분은 보충하고, 다른 날 다시 기억하는지 확인할 수 있어요.

이 단원의 수업 시작하기 →
5문항 연습 세트

운영체제 - 프로세스와 스레드 단원 연습 문제

개념을 읽은 뒤 연습 문제로 이해한 내용을 확인해 보세요. 한 세트는 5문항이며, 답안을 제출하면 정답과 풀이를 볼 수 있습니다.

한 세트 5문항 단계별 상세 해설 시험지 PDF 인쇄 지원

참고 근거와 확인 범위

설명·예제·문제 구성 및 오류 수정 책임: 프리런. 위 자료는 표시한 주제를 확인하거나 더 읽기 위한 근거이며, 외부 기관의 공식 수업이나 감수본을 뜻하지 않습니다.

참고 자료 연결 점검: 2026-11-02. 제작 방식·검수 범위와 수정 기록에서 확인 범위를 볼 수 있습니다. 오류는 상단의 의견 보내기 또는 contact@freelearn.io로 알려 주세요.