프로세스는 저장장치에 존재하는 프로그램이 실행되면서 운영체제로부터 CPU 시간, 메모리와 입출력 자원 등을 할당받은 실행 단위입니다. 운영체제는 여러 프로세스의 상태와 우선순위를 관리하고, 제한된 자원을 적절히 배분하여 작업이 안정적으로 진행되도록 합니다.
이 장에서는 프로세스와 프로세스 제어 블록의 개념, 프로세스 상태 전이, 스레드와 병행 프로세스, 임계 영역과 동기화 기법을 정리합니다. 이어서 여러 프로세스가 서로의 자원을 기다리며 진행하지 못하는 교착상태의 발생 조건과 해결 방법을 살펴봅니다.
이 장의 핵심 내용
- 프로세스는 실행 중인 프로그램의 인스턴스이며 운영체제의 자원 할당과 스케줄링 대상입니다.
- 운영체제는 프로세스 제어 블록에 프로세스 상태, 식별자, CPU 레지스터와 자원 정보를 저장합니다.
- 프로세스는 생성·준비·실행·대기·종료 상태 사이를 이동합니다.
- 스레드는 프로세스 내부의 실행 흐름이며 같은 프로세스의 자원을 다른 스레드와 공유합니다.
- 병행 프로세스가 공유 자원에 동시에 접근하면 경쟁 상태가 발생할 수 있으므로 임계 영역을 보호해야 합니다.
- 상호배제, 세마포어와 모니터는 프로세스 또는 스레드의 실행 순서와 공유 자원 접근을 제어하는 동기화 기법입니다.
- 교착상태는 상호배제·점유 대기·비선점·환형 대기 조건이 동시에 성립할 때 발생할 수 있습니다.
- 교착상태는 예방·회피·발견·회복의 관점에서 처리할 수 있습니다.
프로세스란 무엇인가?
프로세스(Process)는 실행 중인 프로그램의 인스턴스입니다. 프로그램이 저장장치에 보관된 정적인 코드라면, 프로세스는 해당 프로그램이 메모리에 적재되고 CPU와 각종 자원을 할당받아 실제로 동작하는 동적인 실행 단위입니다.
같은 프로그램을 여러 번 실행하면 실행마다 별도의 프로세스가 생성될 수 있습니다. 각 프로세스는 독립적인 프로세스 식별자와 실행 상태, 메모리 공간과 자원 정보를 가지며 운영체제의 관리 대상이 됩니다.
프로그램과 프로세스의 차이
| 구분 | 프로그램 | 프로세스 |
|---|---|---|
| 의미 | 작업 절차를 표현한 코드와 데이터 | 실행 중인 프로그램의 인스턴스 |
| 성격 | 정적 | 동적 |
| 존재 위치 | 주로 저장장치의 실행 파일 | 메모리와 운영체제의 관리 구조 |
| 상태 | 실행 상태가 없음 | 준비·실행·대기 등의 상태를 가짐 |
| 자원 | 자원을 직접 할당받지 않음 | CPU 시간·메모리·파일·입출력 자원을 할당받음 |
| 관리 단위 | 파일 관리 대상 | 스케줄링과 자원 관리 대상 |
프로세스가 보유하는 주요 자원
- 코드 영역 — 실행할 명령어가 저장된 영역입니다.
- 데이터 영역 — 전역 변수와 정적 데이터 등을 저장합니다.
- 힙 영역 — 실행 중 동적으로 할당되는 메모리를 저장합니다.
- 스택 영역 — 함수 호출 정보, 매개변수와 지역 변수 등을 저장합니다.
- CPU 실행 정보 — 프로그램 카운터와 레지스터 값 등 현재 실행 위치를 나타냅니다.
- 입출력 자원 — 열린 파일, 장치와 통신 연결 등의 정보를 포함합니다.
프로세스 제어 블록이란?
프로세스 제어 블록(PCB, Process Control Block)은 운영체제가 각 프로세스를 관리하기 위해 필요한 정보를 저장하는 자료구조입니다. 프로세스가 생성되면 해당 프로세스를 위한 PCB가 만들어지고, 프로세스가 종료되어 관리 대상에서 제거되면 PCB도 함께 정리됩니다.
CPU가 한 프로세스에서 다른 프로세스로 전환될 때 운영체제는 현재 프로세스의 실행 정보를 PCB에 저장하고, 다음에 실행할 프로세스의 정보를 PCB에서 복원합니다. 이 과정을 문맥 교환 또는 컨텍스트 스위칭이라고 합니다.
용어 정리: PCB는 프로세스 자체가 아니라 운영체제가 프로세스를 추적하고 다시 실행하기 위해 사용하는 관리 정보의 집합입니다.
| PCB 정보 | 내용 |
|---|---|
| 프로세스 식별 정보 | 프로세스 ID, 부모 프로세스 ID와 사용자 정보 |
| 프로세스 상태 | 생성·준비·실행·대기·종료 등 현재 상태 |
| 프로그램 카운터 | 다음에 실행할 명령어의 위치 |
| CPU 레지스터 | 범용 레지스터, 스택 포인터와 상태 레지스터 등의 값 |
| 스케줄링 정보 | 우선순위, 큐 위치와 CPU 사용 정보 |
| 메모리 관리 정보 | 주소 공간, 페이지 테이블과 메모리 경계 정보 |
| 입출력 상태 정보 | 열린 파일, 할당된 장치와 입출력 요청 상태 |
| 회계 정보 | CPU 사용 시간, 실행 시간과 자원 사용량 |
프로세스는 어떤 상태를 가질까?
프로세스는 생성된 뒤 항상 CPU를 사용하는 것이 아닙니다. CPU 할당 여부와 입출력 완료 여부 등에 따라 여러 상태를 이동합니다. 기본적인 5상태 모델은 생성, 준비, 실행, 대기와 종료 상태로 구성됩니다.
| 상태 | 영문 | 의미 |
|---|---|---|
| 생성 상태 | New | 프로세스가 만들어지고 초기화되는 상태 |
| 준비 상태 | Ready | 실행에 필요한 준비를 마치고 CPU 할당을 기다리는 상태 |
| 실행 상태 | Running | CPU를 할당받아 명령어를 실행하는 상태 |
| 대기 상태 | Blocked 또는 Waiting | 입출력이나 특정 사건이 완료되기를 기다리는 상태 |
| 종료 상태 | Terminated 또는 Exit | 실행이 끝나 운영체제가 자원을 회수하는 상태 |
프로세스 상태 전이
| 상태 전이 | 사건 | 설명 |
|---|---|---|
| 생성 → 준비 | 승인·적재 | 초기화와 자원 준비를 마치고 CPU 대기열에 들어감 |
| 준비 → 실행 | 디스패치 | 스케줄러가 선택한 프로세스에 CPU를 할당 |
| 실행 → 준비 | 선점·시간 할당량 만료 | CPU 사용 시간이 끝나거나 더 높은 우선순위 작업이 실행됨 |
| 실행 → 대기 | 블록·입출력 요청 | 입출력이나 사건 완료를 기다리기 위해 CPU를 반납 |
| 대기 → 준비 | 웨이크업·사건 완료 | 대기 조건이 충족되어 다시 CPU 할당을 기다림 |
| 실행 → 종료 | 작업 완료·강제 종료 | 프로세스 실행이 끝나고 자원이 회수됨 |

시험 포인트: 디스패치(Dispatch)는 준비 상태의 프로세스를 실행 상태로 전환합니다. 타임아웃 또는 선점은 실행 상태를 준비 상태로 전환하고, 블록은 실행 상태를 대기 상태로 전환합니다. 웨이크업은 대기 상태를 준비 상태로 전환합니다.
준비 상태
실행에 필요한 자원과 조건은 갖추었지만 CPU를 아직 할당받지 못한 상태입니다.
대기 상태
CPU를 받더라도 계속 진행할 수 없으며 입출력 완료나 특정 사건을 기다리는 상태입니다.
스레드란 무엇인가?
스레드(Thread)는 프로세스 내부에서 명령어를 실행하는 흐름이며, 현대 운영체제에서는 커널이 스케줄링하는 실행 단위로 사용됩니다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 같은 프로세스에 속한 스레드는 코드·데이터·힙·열린 파일 등의 자원을 공유합니다.
각 스레드는 독립적으로 실행 위치를 추적해야 하므로 프로그램 카운터, CPU 레지스터와 스택을 개별적으로 가집니다. 자원 공유 덕분에 스레드 간 데이터 교환은 효율적이지만, 동시에 같은 데이터에 접근하면 경쟁 상태가 발생할 수 있습니다.
| 비교 항목 | 프로세스 | 스레드 |
|---|---|---|
| 기본 의미 | 실행 중인 프로그램과 자원 집합 | 프로세스 내부의 실행 흐름 |
| 메모리 공간 | 다른 프로세스와 기본적으로 분리 | 같은 프로세스의 코드·데이터·힙 공유 |
| 개별 보유 정보 | 주소 공간, 파일과 각종 운영체제 자원 | 프로그램 카운터, 레지스터와 스택 |
| 생성·전환 비용 | 상대적으로 큼 | 상대적으로 작음 |
| 통신 방식 | 프로세스 간 통신 기법 필요 | 공유 메모리를 통해 비교적 쉽게 통신 |
| 오류 영향 | 다른 프로세스와 격리되는 편 | 한 스레드 오류가 같은 프로세스 전체에 영향을 줄 수 있음 |
사용자 수준 스레드와 커널 수준 스레드
| 구분 | 사용자 수준 스레드 | 커널 수준 스레드 |
|---|---|---|
| 관리 주체 | 사용자 영역의 스레드 라이브러리 | 운영체제 커널 |
| 생성·전환 | 커널 호출이 적어 빠를 수 있음 | 커널 개입으로 상대적 비용이 큼 |
| 스케줄링 | 라이브러리가 자체적으로 관리 | 커널 스케줄러가 직접 관리 |
| 블로킹 영향 | 구현 방식에 따라 한 스레드의 블로킹이 전체에 영향을 줄 수 있음 | 한 스레드가 대기해도 다른 스레드 실행 가능 |
| 다중 CPU 활용 | 구현 모델에 따라 제한될 수 있음 | 여러 CPU에서 병렬 실행 가능 |
| 이식성 | 라이브러리 기반으로 이식성이 높을 수 있음 | 운영체제 지원 방식에 의존 |
현대적 관점: Linux의 일반적인 POSIX 스레드 구현은 각 사용자 스레드가 커널의 스케줄링 대상과 대응하는 1:1 모델을 사용합니다. 따라서 모든 사용자 수준 스레드가 항상 커널과 무관하게 동작한다고 일반화해서는 안 됩니다.
병행 프로세스란 무엇인가?
병행 프로세스(Concurrent Process)는 둘 이상의 프로세스 또는 실행 흐름이 시간적으로 겹쳐 진행되는 상태를 의미합니다. 단일 CPU에서는 짧은 시간 간격으로 실행 대상을 바꾸어 병행성을 구현할 수 있고, 다중 CPU에서는 여러 작업이 실제로 동시에 실행될 수도 있습니다.
여러 실행 흐름이 서로 독립적이면 문제가 적지만, 공유 변수·파일·메모리와 장치를 함께 사용하면 실행 순서에 따라 결과가 달라질 수 있습니다. 이러한 상황에서는 상호배제와 동기화가 필요합니다.
병행성
여러 작업의 실행 구간이 시간적으로 겹쳐 진행되는 개념입니다. 단일 CPU에서도 문맥 교환으로 구현할 수 있습니다.
병렬성
둘 이상의 작업이 여러 CPU 또는 코어에서 물리적으로 같은 시점에 실행되는 개념입니다.
임계 영역과 경쟁 상태
임계 영역(Critical Section)은 여러 프로세스나 스레드가 공유하는 데이터 또는 자원에 접근하는 코드 영역입니다. 둘 이상의 실행 흐름이 임계 영역을 동시에 수행하면 실행 순서에 따라 결과가 달라지는 경쟁 상태가 발생할 수 있습니다.
예를 들어 두 스레드가 같은 계좌 잔액을 동시에 읽고 각각 값을 변경하면 한쪽 변경이 사라질 수 있습니다. 임계 영역에서는 한 번에 하나의 실행 흐름만 공유 데이터를 변경하도록 제어해야 합니다.
올바른 임계 영역 해결 조건
- 상호배제 — 한 프로세스가 임계 영역을 실행 중이면 다른 프로세스는 동시에 들어갈 수 없어야 합니다.
- 진행 — 임계 영역에 아무도 없고 진입하려는 프로세스가 있다면 진입할 프로세스를 무한정 미루지 않아야 합니다.
- 한정 대기 — 진입 요청 후 다른 프로세스가 무한히 먼저 들어가 특정 프로세스가 영원히 기다리지 않도록 해야 합니다.
혼동 주의: 임계 영역 안의 코드는 반드시 무한 반복을 피해야 하지만, 임계 영역 문제의 정식 핵심 조건은 상호배제·진행·한정 대기입니다. 임계 영역은 가능한 한 짧게 유지하는 것이 좋습니다.
상호배제와 동기화 기법
상호배제(Mutual Exclusion)는 공유 자원에 한 번에 하나의 프로세스나 스레드만 접근하도록 제한하는 방식입니다. 동기화는 상호배제를 포함하여 여러 실행 흐름의 순서와 조건을 조정하는 더 넓은 개념입니다.
| 기법 | 핵심 원리 | 특징 |
|---|---|---|
| 소프트웨어 알고리즘 | 공유 변수와 진입 규칙으로 임계 영역 접근 제어 | Dekker·Peterson·Lamport 알고리즘 등 |
| 원자적 하드웨어 명령 | 분리할 수 없는 읽기·수정 연산 사용 | Test-and-Set, Compare-and-Swap 등 |
| 뮤텍스 | 잠금과 해제를 통해 하나의 실행 흐름만 접근 허용 | 상호배제에 특화 |
| 세마포어 | 정수 값과 원자적인 대기·해제 연산으로 접근 수와 순서 제어 | 상호배제와 실행 순서 동기화 가능 |
| 모니터 | 공유 데이터와 이를 조작하는 연산을 하나의 고수준 구조로 캡슐화 | 내부에서 상호배제를 자동으로 보장하는 방식 |
세마포어의 P 연산과 V 연산
세마포어(Semaphore)는 정수 값과 원자적 연산을 이용해 공유 자원의 사용 가능 수와 실행 순서를 제어하는 동기화 도구입니다. 전통적으로 대기 연산을 P 또는 wait, 해제 연산을 V 또는 signal이라고 부릅니다.
| 연산 | 다른 표현 | 개념적 동작 |
|---|---|---|
| P(S) | wait, down | 사용 가능한 자원이 있을 때 값을 감소시키고 진입하며, 없으면 대기 |
| V(S) | signal, up | 자원 사용을 마친 뒤 값을 증가시키고 대기 중인 실행 흐름을 깨울 수 있음 |
개념 예시:P(S) — 자원 사용을 요청하고 필요하면 대기합니다.임계 영역 실행 — 공유 데이터를 안전하게 처리합니다.V(S) — 자원을 반납하고 대기 중인 실행 흐름을 깨웁니다.
세마포어와 모니터 비교
| 구분 | 세마포어 | 모니터 |
|---|---|---|
| 추상화 수준 | 상대적으로 낮음 | 상대적으로 높음 |
| 제어 방식 | P·V 또는 wait·signal 연산을 명시적으로 사용 | 공유 데이터와 연산을 구조 안에 캡슐화 |
| 상호배제 | 프로그래머가 올바른 순서로 연산해야 함 | 모니터 내부 진입을 구조적으로 제한 |
| 오류 가능성 | 연산 순서 오류나 해제 누락 가능 | 구조화되어 상대적으로 관리가 쉬움 |
| 조건 동기화 | 세마포어 값과 대기 큐 사용 | 조건 변수와 wait·signal 사용 |
교착상태란 무엇인가?
교착상태(Deadlock)는 둘 이상의 프로세스나 스레드가 서로가 보유한 자원을 기다리면서 어느 쪽도 진행하지 못하는 상태입니다. 외부에서 자원을 회수하거나 프로세스를 종료하는 등의 조치가 없다면 대기가 계속될 수 있습니다.
예를 들어 프로세스 A가 프린터를 보유한 상태에서 스캐너를 기다리고, 프로세스 B가 스캐너를 보유한 상태에서 프린터를 기다리면 두 프로세스 모두 필요한 자원을 얻지 못해 멈출 수 있습니다.
교착상태의 네 가지 필요조건
다음 네 조건이 동시에 성립하면 교착상태가 발생할 가능성이 생깁니다. 이 조건들은 교착상태가 반드시 발생했다는 뜻이 아니라, 교착상태가 발생하기 위해 필요한 조건입니다.
| 발생 조건 | 영문 | 의미 |
|---|---|---|
| 상호배제 | Mutual Exclusion | 하나의 자원을 동시에 하나의 프로세스만 사용할 수 있음 |
| 점유 대기 | Hold and Wait | 이미 자원을 가진 상태에서 다른 자원을 추가로 기다림 |
| 비선점 | No Preemption | 다른 프로세스가 보유한 자원을 강제로 빼앗을 수 없음 |
| 환형 대기 | Circular Wait | 프로세스들이 원형으로 연결되어 다음 프로세스가 가진 자원을 기다림 |
시험 포인트: 선점(Preemption)은 교착상태의 필요조건이 아닙니다. 다른 프로세스의 자원을 강제로 빼앗을 수 없는 비선점이 교착상태의 필요조건입니다.
교착상태는 어떻게 해결할까?
교착상태 처리 방법은 발생 전에 조건을 제거하는 예방, 안전한 자원 할당만 허용하는 회피, 발생 여부를 검사하는 발견, 발생 후 시스템을 정상화하는 회복으로 나눌 수 있습니다.
| 해결 방법 | 핵심 원리 | 대표적인 특징 |
|---|---|---|
| 예방 Prevention | 교착상태의 네 필요조건 중 하나 이상을 원천적으로 제거 | 설계가 명확하지만 자원 이용률이 낮아질 수 있음 |
| 회피 Avoidance | 현재 할당 후에도 안전 상태를 유지하는 경우에만 자원 배분 | 각 프로세스의 최대 자원 요구량 등의 정보 필요 |
| 발견 Detection | 교착상태 발생을 허용하고 주기적으로 자원 대기 관계를 검사 | 검사 비용이 들며 발생 후 회복 필요 |
| 회복 Recovery | 프로세스 종료 또는 자원 선점으로 교착상태 해소 | 작업 손실과 데이터 일관성 문제를 고려해야 함 |
예방
교착상태가 발생할 수 있는 구조 자체를 제한합니다. 예를 들어 자원 요청 순서를 고정하면 환형 대기를 방지할 수 있습니다.
회피
각 자원 요청이 시스템을 불안전 상태로 만들지 않는지 검사한 뒤 안전한 요청만 허용합니다.
발견
자원 할당 그래프나 대기 관계를 검사하여 교착상태에 포함된 프로세스와 자원을 찾습니다.
회복
하나 이상의 프로세스를 종료하거나 자원을 선점하고 작업을 되돌려 대기 고리를 해소합니다.
은행가 알고리즘
은행가 알고리즘(Banker’s Algorithm)은 프로세스가 앞으로 요구할 수 있는 최대 자원량을 알고 있다는 가정 아래, 자원을 할당한 뒤에도 모든 프로세스가 차례로 종료할 수 있는 안전 순서가 존재하는지 검사합니다.
요청을 허용한 뒤 안전 순서가 존재하면 안전 상태이고, 안전 순서가 존재하지 않으면 불안전 상태입니다. 불안전 상태가 곧 교착상태를 의미하는 것은 아니지만, 이후의 요청에 따라 교착상태가 발생할 가능성이 있으므로 해당 할당을 보류합니다.
혼동 주의: 은행가 알고리즘은 교착상태를 발생 후 찾는 발견 기법이 아니라, 불안전 상태로 들어가는 자원 할당을 거부하는 회피 기법입니다.
교착상태와 기아상태의 차이
교착상태와 기아상태는 모두 프로세스가 오랫동안 진행하지 못하는 문제지만 원인이 다릅니다. 교착상태는 관련 프로세스들이 서로의 자원을 기다려 전체가 멈추는 문제이고, 기아상태는 스케줄링이나 자원 배분에서 계속 밀려 특정 프로세스만 실행 기회를 얻지 못하는 문제입니다.
| 구분 | 교착상태 | 기아상태 |
|---|---|---|
| 원인 | 프로세스 사이의 순환적인 자원 대기 | 불공정한 우선순위나 반복적인 자원 배제 |
| 영향 범위 | 대기 고리에 포함된 여러 프로세스 | 주로 특정 프로세스 |
| 다른 프로세스 진행 | 관련 프로세스 모두 진행 불가 | 다른 프로세스는 계속 진행 가능 |
| 해결 방향 | 대기 고리 제거와 자원 회수 | 공정한 스케줄링과 에이징 적용 |
시험에서 자주 혼동되는 개념
준비 상태와 대기 상태
준비 상태는 CPU만 할당받으면 실행할 수 있습니다. 대기 상태는 입출력이나 사건이 완료되지 않아 CPU를 받아도 진행할 수 없습니다.
프로세스와 스레드
프로세스는 자원과 주소 공간의 단위이고, 스레드는 프로세스 내부에서 실행되는 흐름입니다.
임계 영역과 상호배제
임계 영역은 공유 자원에 접근하는 코드이고, 상호배제는 한 번에 하나만 그 영역을 실행하게 하는 원칙입니다.
상호배제와 동기화
상호배제는 동시 접근을 막는 것이고, 동기화는 접근 제한과 함께 실행 순서와 조건까지 조정하는 더 넓은 개념입니다.
교착상태 예방과 회피
예방은 필요조건 자체를 제거하고, 회피는 현재 상태를 검사하여 안전한 자원 할당만 허용합니다.
교착상태와 기아상태
교착상태는 여러 프로세스가 서로를 기다리고, 기아상태는 특정 프로세스가 계속 실행 기회를 얻지 못하는 문제입니다.
이번 장 핵심 요약
- 프로세스는 실행 중인 프로그램이며 운영체제의 자원 할당과 스케줄링 대상입니다.
- PCB에는 프로세스 상태, 식별자, 프로그램 카운터, 레지스터와 자원 관리 정보가 저장됩니다.
- 프로세스의 기본 상태는 생성·준비·실행·대기·종료입니다.
- 디스패치는 준비 상태를 실행 상태로, 블록은 실행 상태를 대기 상태로 전환합니다.
- 웨이크업은 대기 상태를 준비 상태로 전환합니다.
- 스레드는 프로세스 내부의 실행 흐름이며 코드·데이터·힙과 파일 등을 공유합니다.
- 병행성은 실행 구간이 시간적으로 겹치는 것이고, 병렬성은 여러 작업이 실제로 동시에 실행되는 것입니다.
- 임계 영역은 공유 자원에 접근하는 코드 구간이며 상호배제로 보호해야 합니다.
- 임계 영역 문제의 핵심 조건은 상호배제·진행·한정 대기입니다.
- 세마포어는 원자적인 P·V 연산으로 자원 접근과 실행 순서를 제어합니다.
- 교착상태의 필요조건은 상호배제·점유 대기·비선점·환형 대기입니다.
- 은행가 알고리즘은 안전 상태를 유지하는 자원 요청만 허용하는 교착상태 회피 기법입니다.
- 교착상태 해결 방법은 예방·회피·발견·회복으로 구분합니다.
복습 문제
프로그램과 프로세스의 가장 중요한 차이는?
프로그램은 저장된 코드와 데이터이고, 프로세스는 해당 프로그램이 실행되면서 상태와 자원을 가진 동적인 실행 단위입니다.
운영체제가 프로세스의 상태와 실행 정보를 저장하는 구조는?
프로세스 제어 블록(PCB)입니다.
CPU만 할당받으면 곧바로 실행할 수 있는 프로세스 상태는?
준비 상태(Ready State)입니다.
입출력 완료를 기다리는 프로세스는 어떤 상태일까?
대기 상태 또는 블록 상태(Blocked State)입니다.
대기 중인 사건이 완료되면 프로세스는 일반적으로 어떤 상태로 이동할까?
준비 상태로 이동한 뒤 CPU 할당을 기다립니다.
프로세스와 스레드는 자원을 어떻게 다르게 사용할까?
프로세스는 독립적인 주소 공간과 자원을 가지며, 같은 프로세스의 스레드는 코드·데이터·힙과 열린 파일 등의 자원을 공유합니다.
공유 자원에 접근하는 코드 영역을 무엇이라고 할까?
임계 영역(Critical Section)이라고 합니다.
임계 영역 문제의 세 가지 해결 조건은?
상호배제, 진행과 한정 대기입니다.
세마포어의 P 연산과 V 연산은 각각 어떤 역할을 할까?
P 연산은 자원 사용을 요청하고 필요하면 대기하며, V 연산은 자원을 반납하고 대기 중인 실행 흐름을 깨울 수 있습니다.
교착상태의 네 가지 필요조건은?
상호배제, 점유 대기, 비선점과 환형 대기입니다.
선점과 비선점 중 교착상태의 필요조건에 해당하는 것은?
비선점(No Preemption)입니다.
은행가 알고리즘은 교착상태의 어떤 해결 방식에 해당할까?
교착상태 회피(Avoidance) 방식입니다.
교착상태 예방과 회피의 차이는?
예방은 교착상태 필요조건 중 하나 이상이 성립하지 않도록 구조적으로 제한하고, 회피는 자원 요청 때마다 안전 상태가 유지되는지 검사해 안전한 요청만 허용합니다.
교착상태와 기아상태의 가장 중요한 차이는?
교착상태는 여러 프로세스가 서로의 자원을 기다려 함께 진행하지 못하는 상태이고, 기아상태는 특정 프로세스가 계속 자원이나 실행 기회를 얻지 못하는 상태입니다.
참고자료
- 학습 범위 — 사무자동화산업기사 제1과목 사무자동화 시스템, 프로세스·스레드·병행 프로세스·교착상태
- Q-Net — 사무자동화산업기사 국가자격 종목별 상세정보
- The Open Group — POSIX.1-2024 Definitions
- The Open Group — POSIX General Concepts and Scheduling
- Linux man-pages — pthreads(7)
- The Open Group — pthread_mutex_lock()
- Oracle Solaris — Synchronization With Semaphores
- Oracle Solaris — Avoiding Deadlock
이 글은 사무자동화산업기사 시험 범위에 포함된 프로세스 관리, 스레드, 병행 처리와 교착상태의 개념을 이해하고 복습할 수 있도록 재구성한 정리입니다. 시험에서 사용하는 단순화된 상태 모델과 분류가 현대 운영체제의 실제 구현과 일부 다를 수 있으므로 실제 시험 준비 시에는 최신 Q-Net 출제기준을 함께 확인해야 합니다.