✅ 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가 현재 실행 중인 프로세스를 다른 프로세스로 전환할 때, 이전 프로세스의 상태를 저장하고 새 프로세스의 상태를 복원하는 작업
📂 이게 왜 중요한가?
운영체제는 여러 프로세스를 번갈아 실행해야 해.
예를 들어:
- A 프로세스가 실행 중이었는데
- 시간 초과로 B 프로세스로 CPU를 넘겨야 해
- A가 어디까지 실행했는지 기억해놔야 하고
- B는 전에 어디까지 했는지 다시 불러와야 해
→ 이 과정이 바로 문맥 교환(Context Switch)
✅ 3. 문맥 교환의 흐름 (순서)
🪜 과정 순서
- 📌 현재 실행 중인 프로세스의 상태(레지스터, PC 등)를 PCB에 저장
- 📌 새로운 프로세스의 PCB에서 상태를 CPU에 복원
- 📌 CPU가 새로운 프로세스를 실행
이걸 순서대로 반복하면서 멀티태스킹처럼 보이게 만드는 거야.
✅ 5. 문맥 교환이 일어나는 상황
| ✅ 시간 할당량 초과 | CPU 점유 시간 다 써서 다른 프로세스로 전환 |
| ✅ 입출력 요청 | 입출력 기다리느라 CPU 반납 |
| ✅ 높은 우선순위 프로세스 등장 | 선점형 스케줄링 |
| ✅ 시스템 호출 or 인터럽트 | 운영체제 개입 필요 시 |
예시. 실행 중인 프로세스:
- 🎵 MP3 재생기
- 🌐 크롬 브라우저
- 🎮 방치형 게임
운영체제(OS)는 CPU 한 개만 있다면 한 번에 하나만 실행할 수 있어.
하지만 우리가 볼 때는 셋 다 "동시에" 돌아가는 것처럼 보여.
운영체제가 0.01초~0.02초 단위로 아래처럼 반복해:
- 🎵 MP3 실행하다가 멈추고
- 🌐 크롬 브라우저 실행하다가 또 멈추고
- 🎮 방치형 게임 실행하다가 다시 MP3로
→ 이걸 CPU 하나가 번갈아가며 엄청 빠르게 바꿔주는 것
----------------------------------------------------------------------------------------------------------------------------------
✅ 1. 프로세스 스케줄링이란? (정의부터)
CPU를 어떤 프로세스에게 줄지 결정하는 운영체제의 작업
한 줄 요약:
"누가 먼저 CPU를 쓸지 정하는 정책"
✅ 2. 왜 스케줄링이 필요할까?
현실에는 수많은 프로세스가 동시에 실행되고 있어.
- 예: 크롬, 디스코드, 백신, 윈도우 시스템, 음악 플레이어, 알람 등
- 하지만 CPU 코어 수는 제한되어 있음 (심지어 1개일 수도 있음)
그러니까 운영체제는 반드시 선택해야 해:
“지금 누구를 먼저 실행할까?”
→ 이 결정을 자동으로 내리는 시스템이 바로 **스케줄러(Scheduler)**고
그 정책을 **스케줄링 알고리즘(Scheduling Algorithm)**이라고 해.
✅ 3. 스케줄링의 대상은 누구?
스케줄링은 **"Ready 상태에 있는 프로세스"**들 중에서
누가 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
⏱️ 실행 흐름 (시간 순서대로)
- A 도착 → Q1에서 2초 실행 → 남음(8초) → Q2로 내려감
- B 도착 → Q1에서 2초 실행 → 남음(1초) → Q1에 남아있음
- C 도착 → Q1에서 2초 실행 → 완료됨
- B 남은 1초 실행 → 완료
- A는 Q2에서 4초 실행 → 남음(4초) → Q3로 내려감
- 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) | 프로세스 종료시키거나 자원 회수해서 푸는 방법 |
'정보처리기사 > 이론설명' 카테고리의 다른 글
| [이론설명 이기적] 네트워크 구축관리 (0) | 2025.07.28 |
|---|---|
| [이론설명 이기적] 운영체제 - 기억 장치 관리 (3) | 2025.07.28 |
| [이론설명 이기적] 운영체제 (3) | 2025.07.24 |
| [이론설명 이기적] DB 물리 데이터베이스 모델링 (2) | 2025.07.24 |
| [이론설명 이기적] DB 데이터베이스 물리속성 설계 (1) | 2025.07.24 |