본문 바로가기
정보처리기사/이론설명

[이론설명 이기적] 프로세스

by wildOjisan 2025. 7. 25.

✅ 1. 프로세스란 무엇인가?

📌 정의부터 간단히 말하면:

프로세스(Process)는 실행 중인 프로그램이다.

하지만 이건 그냥 시험용 문장이야.
진짜 의미를 이해해야, 응용문제나 상황형 문장에서 헷갈리지 않아.


✅ 2. 왜 '프로세스'라는 개념이 필요할까?

💡 상황 예시:

  • 우리가 어떤 프로그램(예: 카카오톡)을 더블 클릭하면?
    • 운영체제는 디스크에 저장된 카카오톡 실행 파일을 메모리에 불러와서 실행해줘.
    • 이때, **메모리에서 동작하는 '실행 인스턴스'**를 운영체제는 **‘프로세스’**라고 불러.

즉, 프로그램 ≠ 프로세스

  • 프로그램: 실행 파일 (정적인 존재)
  • 프로세스: 실행 중인 프로그램 (동적인 존재)

✅ 3. 프로세스는 무엇으로 구성되는가?

프로세스는 단순히 "코드가 실행 중인 상태"가 아냐.
운영체제는 이 프로세스가 뭘 하고 있었는지, 어떤 데이터 쓰고 있었는지 전부 기억하고 관리해야 해.

📦 프로세스 구성 요소 4가지

📜 코드(Code) 실행할 프로그램 명령어 (텍스트 섹션)
🧮 데이터(Data) 전역 변수 등
📍 힙(Heap) 동적으로 할당되는 메모리 공간 (malloc, new)
📌 스택(Stack) 함수 호출, 지역 변수 저장 공간
 

 


✅ 4. 운영체제는 프로세스를 어떻게 다룰까?

운영체제는 한 번에 여러 프로세스를 동시에 실행해야 해. (멀티태스킹)

그래서 등장한 개념들:

  • 👤 PCB (Process Control Block): 프로세스의 상태, 레지스터 값, 메모리 정보 등을 담고 있는 일종의 신분증.
  • 🔄 문맥 교환(Context Switch): CPU가 다른 프로세스로 전환할 때 PCB 정보를 저장하고 불러오는 과정.

 

 

 

 

------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

프로세스 상태 5단계

프로세스 상태

🔵 New (생성 상태)

  • 프로그램을 실행시키면 프로세스가 만들어짐.
  • 아직 메모리 준비가 덜 됐고, 운영체제가 프로세스를 등록하는 중.

🟡 Ready (준비 상태)

  • 실행할 준비가 완료된 상태.
  • CPU는 아직 안 받았고, 실행 순서를 기다리는 중.

🔴 Running (실행 상태)

  • 드디어 CPU를 배정받아 실행 중인 상태.

📌 현실 비유:

문제지 받고 시험 보는 중!
(CPU를 독점적으로 사용하는 순간)


⚪ Waiting / Blocked (대기 상태)

  • 입출력 요청 등 외부 이벤트를 기다리는 중이라 CPU를 반납한 상태.
  • 예: 파일 읽기, 네트워크 응답 기다리는 중

⚫ Terminated (종료 상태)

  • 실행이 끝나서 운영체제가 자원을 회수하고 있는 상태

📌 현실 비유:

시험 끝! 퇴실 중.

 

 

 

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

제어 블록(PCB)와 문맥 교환(Context Switch)

✅ 1. PCB (프로세스 제어 블록)란?

📌 한 줄 정의:

운영체제가 프로세스를 관리하기 위해 사용하는 정보 묶음 (일종의 프로세스 이력서)


🧠 왜 필요한가?

운영체제는 수많은 프로세스를 동시에 관리해야 해.
각 프로세스가 어떤 상태인지, 어디까지 실행했는지 기억해야겠지?

그래서 각 프로세스마다 하나씩 PCB를 만들어 거기에 정보를 저장해.

PID (Process ID) 프로세스 번호
상태 (State) Ready, Running 등 현재 상태
프로그램 카운터 (PC) 다음에 실행할 명령어 주소
레지스터 값 CPU 레지스터 정보
메모리 정보 코드, 데이터, 스택 등 메모리 사용 위치
파일 정보 열려 있는 파일 목록
입출력 상태 대기 중인 장치 정보 등
우선순위 스케줄링 기준

📌 즉, PCB는 프로세스의 현재 상태 전체를 보관하고 있는 운영체제의 기록지야.

 

✅ 2. Context Switch (문맥 교환)

📌 정의:

CPU가 현재 실행 중인 프로세스를 다른 프로세스로 전환할 때, 이전 프로세스의 상태를 저장하고 새 프로세스의 상태를 복원하는 작업


📂 이게 왜 중요한가?

운영체제는 여러 프로세스를 번갈아 실행해야 해.

예를 들어:

  1. A 프로세스가 실행 중이었는데
  2. 시간 초과로 B 프로세스로 CPU를 넘겨야 해
  3. A가 어디까지 실행했는지 기억해놔야 하고
  4. B는 전에 어디까지 했는지 다시 불러와야

→ 이 과정이 바로 문맥 교환(Context Switch)


✅ 3. 문맥 교환의 흐름 (순서)

🪜 과정 순서

  1. 📌 현재 실행 중인 프로세스의 상태(레지스터, PC 등)를 PCB에 저장
  2. 📌 새로운 프로세스의 PCB에서 상태를 CPU에 복원
  3. 📌 CPU가 새로운 프로세스를 실행

이걸 순서대로 반복하면서 멀티태스킹처럼 보이게 만드는 거야.

 

✅ 5. 문맥 교환이 일어나는 상황

 

✅ 시간 할당량 초과 CPU 점유 시간 다 써서 다른 프로세스로 전환
✅ 입출력 요청 입출력 기다리느라 CPU 반납
✅ 높은 우선순위 프로세스 등장 선점형 스케줄링
✅ 시스템 호출 or 인터럽트 운영체제 개입 필요 시

 

예시. 실행 중인 프로세스:

  • 🎵 MP3 재생기
  • 🌐 크롬 브라우저
  • 🎮 방치형 게임

운영체제(OS)는 CPU 한 개만 있다면 한 번에 하나만 실행할 수 있어.
하지만 우리가 볼 때는 셋 다 "동시에" 돌아가는 것처럼 보여.

 

운영체제가 0.01초~0.02초 단위로 아래처럼 반복해:

  1. 🎵 MP3 실행하다가 멈추고
  2. 🌐 크롬 브라우저 실행하다가 또 멈추고
  3. 🎮 방치형 게임 실행하다가 다시 MP3로

→ 이걸 CPU 하나가 번갈아가며 엄청 빠르게 바꿔주는 것

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

✅ 1. 프로세스 스케줄링이란? (정의부터)

CPU를 어떤 프로세스에게 줄지 결정하는 운영체제의 작업

한 줄 요약:

"누가 먼저 CPU를 쓸지 정하는 정책"


✅ 2. 왜 스케줄링이 필요할까?

현실에는 수많은 프로세스가 동시에 실행되고 있어.

  • 예: 크롬, 디스코드, 백신, 윈도우 시스템, 음악 플레이어, 알람 등
  • 하지만 CPU 코어 수는 제한되어 있음 (심지어 1개일 수도 있음)

그러니까 운영체제는 반드시 선택해야 해:

“지금 누구를 먼저 실행할까?”

→ 이 결정을 자동으로 내리는 시스템이 바로 **스케줄러(Scheduler)**고
그 정책을 **스케줄링 알고리즘(Scheduling Algorithm)**이라고 해.


✅ 3. 스케줄링의 대상은 누구?

스케줄링은 **"Ready 상태에 있는 프로세스"**들 중에서
누가 CPU를 쓸지 정하는 거야.

상태                                                                                   CPU 배정 대상인가?

 

🔵 New
🟡 Ready ✅ 스케줄링 대상!
🔴 Running ❌ 이미 실행 중
⚪ Waiting ❌ 입출력 대기 중
⚫ Terminated ❌ 끝났음
 

✅ 4. 스케줄링의 목적 (운영체제가 추구하는 목표)

목표                                                                                  설명

 

🔹 공정성 (Fairness) 모두에게 CPU 기회를 골고루 줘야 함
🔹 효율성 (Efficiency) CPU가 놀지 않게 계속 일하게
🔹 응답 시간 최소화 사용자의 요청에 빨리 반응
🔹 대기 시간 최소화 Ready 상태로 오래 기다리지 않도록
🔹 처리량(Throughput) 최대화 단위 시간당 많은 작업 완료
 

→ 이 목표에 따라 다양한 스케줄링 알고리즘이 등장함.


✅ 5. 스케줄러 종류

🔸 장기 스케줄러 (Long-term) 어떤 프로그램을 프로세스로 만들지 결정
🔸 중기 스케줄러 (Medium-term) 프로세스를 메모리에서 내보내거나 복귀시킴 (스와핑)
🔸 단기 스케줄러 (Short-term) 누가 CPU를 쓸지 "즉시" 결정하는 핵심 스케줄러
 

📌 시험에선 보통 단기 스케줄러를 스케줄링이라 부름!

단기 스케줄러를 알아볼거임

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

✅ 1. 선점 스케줄링이란?

📌 정의:

실행 중인 프로세스라도, 운영체제가 강제로 CPU를 빼앗아 다른 프로세스에게 줄 수 있는 방식


🔄 쉽게 말하면?

“지금 걔가 실행 중이어도, 급한 애가 오면 CPU 뺏을 수 있어!”

이게 선점(preempt) — "강제로 중단시키다" 라는 뜻이야.


✅ 2. 왜 선점 스케줄링이 필요할까?

  • 시스템은 빠르게 반응해야 함 (실시간성)
  • 중요한 작업(예: 알림, 긴급 이벤트)이 늦어지면 안 됨
  • 사용자 체감 성능 개선 (즉각 반응하는 느낌)

📌 그래서 선점 스케줄링을 사용하면,

CPU를 많이 쓰는 애가 계속 점유하는 걸 막고,
다른 애들도 공정하게 CPU를 쓸 수 있어.

 

 

🥇 1. Round Robin (라운드 로빈)

✅ 개념:

  • 모든 작업에게 똑같은 시간만큼 CPU를 줘
  • 시간 다 쓰면 → 다음 애로 넘김
  • 그리고 다시 처음부터 돌아옴 (라운드처럼!)

🧠 사용 이유:

공정하게! 누구도 너무 오래 기다리지 않게 하자!


🔢 예시

작업                                                              도착 시간                                               작업 시간

 

A 0 5
B 1 3
C 2 1
 

🎯 Time Quantum = 2 (한 번에 2초씩만 실행 가능)


⏱️ 실행 순서 (시간 흐름)

시간                                            실행한 프로세스           남은 작업 시간

 

0~2 A A=3
2~3 B B=2
3~4 C C=0 (완료)
4~6 A A=1
6~7 B B=1
7~8 A A=0 (완료)
8~9 B B=0 (완료)
 

📌 결과:

  • C는 제일 짧지만 순서 때문에 3초 기다려야 함
  • A는 제일 먼저 왔지만, 끊겼다가 여러 번 실행

🥈 2. SRT (Shortest Remaining Time)

(= 선점형 SJF)

✅ 개념:

  • "남은 시간"이 가장 짧은 애를 항상 실행
  • 새로 더 짧은 애가 도착하면 → 현재 실행 중이던 거 중단!

🧠 사용 이유:

평균 대기 시간을 줄이자!


🔢 예시

작업                                                             도착 시간                                                작업 시간

 

A 0 5
B 1 3
C 2 1
 

⏱️ 실행 순서

시간                        실행             설명

 

0~1 A 아직 A밖에 없음
1~2 B B 도착, B(3) < A(남은 4) → 교체
2~3 C C 도착, C(1) < B(2) → 교체
3~4 C C 완료
4~6 B B 완료
6~11 A A 남은 시간 4 → 완료
 

📌 결과:

  • C는 짧아서 제일 빨리 끝남
  • A는 제일 먼저 왔지만, 계속 밀림 😢

🥉 3. MFQ (Multilevel Feedback Queue)

✅ 개념:

  • 큐를 여러 개 만든다 (빠른 애 전용, 느린 애 전용 등)
  • 처음에는 높은 큐에서 시작
  • 오래 걸리면 낮은 큐로 내려보냄
  • 사용자 체감 빠르게! 느린 애는 뒤로

🧠 왜 필요할까?

  • Round Robin은 공평하지만 성능 저하
  • SRT는 짧은 애에 유리하고 긴 애는 계속 밀림
  • MFQ는 둘을 합친 느낌
    → “빨리 끝날 것 같은 건 먼저!”
    → “너무 오래 걸리면 뒤로 보내!”

🔢 예시

작업                                                       도착                                                 작업 시간

 

A 0 10
B 1 3
C 2 2
 

큐 정책:

  • Q1: Time Quantum = 2
  • Q2: Time Quantum = 4
  • Q3: FCFS

⏱️ 실행 흐름 (시간 순서대로)

  1. A 도착 → Q1에서 2초 실행 → 남음(8초) → Q2로 내려감
  2. B 도착 → Q1에서 2초 실행 → 남음(1초) → Q1에 남아있음
  3. C 도착 → Q1에서 2초 실행 → 완료됨
  4. B 남은 1초 실행 → 완료
  5. A는 Q2에서 4초 실행 → 남음(4초) → Q3로 내려감
  6. A가 Q3에서 4초 실행 → 완료

📌 결과:

  • 짧은 B, C는 빠르게 처리
  • 긴 A는 뒤로 밀리지만 천천히 처리됨
  • 사용자 체감이 좋아짐 (UI 반응 빠름)

 

 

 

------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

✅ 1. 상호배제란? (정의부터)

두 개 이상의 프로세스(또는 스레드)가 동시에 같은 자원(CPU, 파일, 변수 등)에 접근하지 못하게 막는 것

한마디로:

"같은 자원은 한 번에 하나만 써야 한다"는 규칙!

 

 

세마포어(Semaphore)

(상호배재 기법중 하나.)

공유 자원에 동시에 접근할 수 있는 프로세스/스레드 수를 제한하기 위한 동기화 도구

즉, “자원 2개면 동시에 2명까지만 사용 가능하게 제어하는 도구!”

 

✅ 세마포어 구조

세마포어는 정수값 하나를 가지고 있어.
초기값 = 사용할 수 있는 자원의 수

세마포어 이름의미
S = 2 자원 2개 있음, 동시에 2명까지 접근 가능
 

✅ 세마포어 연산 (P / V)

세마포어는 두 가지 연산으로 동작해:

연산이름설명
P() Wait / Down 자원 사용하기 전 → 세마포어 값 1 줄임
V() Signal / Up 자원 다 쓰고 나옴 → 세마포어 값 1 늘림
세마포어 S = 2

[프로세스 A 진입]
→ P(S) → S = 1

[프로세스 B 진입]
→ P(S) → S = 0

[프로세스 C 진입]
→ P(S) → S < 0 → ❗대기 (Blocked)

[프로세스 A 종료]
→ V(S) → S = 1 → C 깨움

 

 

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

✅ 1. 교착상태(Deadlock)란?

📌 정의:

둘 이상의 프로세스가 서로가 가진 자원을 기다리며
무한정 멈춰버리는 상태를 말해.

한 마디로:

"서로 자원 놓으라고 버티다가 아무도 못 나가는 상태"


✅ 2. 현실 비유로 쉽게 설명

🎯 예시: 젓가락 문제 (철학자 문제)

  • 철학자 2명이 밥을 먹으려 함
  • 각자 왼손엔 젓가락, 오른손엔 젓가락이 필요
  • 그런데 왼쪽 사람은 오른쪽 젓가락을 기다리고
  • 오른쪽 사람은 왼쪽 젓가락을 기다림

서로가 서로를 기다리는 구조
둘 다 밥 못 먹고 멈춤!

이게 바로 교착상태!


✅ 3. 운영체제에서의 교착상태 예시

프로세스                               현재 가진 자원                                                    요청하는 자원

 

P1 자원 A 자원 B
P2 자원 B 자원 A
 

→ 둘 다 상대방이 가진 걸 필요로 함
서로 양보 안 하면 무한 대기 상태 발생


✅ 4. 교착상태 발생 4가지 조건

(시험에 거의 100% 나옴!)

조건 이름                                                            설명

 

① 상호배제 (Mutual Exclusion) 자원은 한 번에 하나만 사용 가능
② 점유대기 (Hold and Wait) 자원 하나는 잡고 있으면서, 다른 자원을 기다림
③ 비선점 (No Preemption) 다른 프로세스가 자원을 강제로 뺏을 수 없음
④ 환형대기 (Circular Wait) 각 프로세스가 다음 자원을 기다리면서 원형 구조 형성
 

→ 이 4가지가 동시에 만족되면 무조건 교착상태 발생!


✅ 5. 교착상태 해결 방법

방법                                          설명

 

🔹 예방 (Prevention) 아예 4가지 조건 중 하나를 깨버림
🔸 회피 (Avoidance) 교착상태가 발생할 가능성 있는 경우엔 실행 안 함 (ex: 은행가 알고리즘)
🔸 탐지 (Detection) 교착상태가 발생했는지 검사 → 발견되면 해결
🔸 복구 (Recovery) 프로세스 종료시키거나 자원 회수해서 푸는 방법