운영체제 면접 질문 완벽 정리
프로세스와 스레드의 차이#
**프로세스(Process)**는 실행 중인 프로그램의 인스턴스입니다. 각 프로세스는 독립적인 메모리 공간(코드, 데이터, 힙, 스택)을 가지며, OS로부터 자원을 할당받습니다.
**스레드(Thread)**는 프로세스 내에서 실행되는 작업의 단위입니다. 같은 프로세스 내의 스레드들은 코드, 데이터, 힙 영역을 공유하지만 스택은 각자 독립적으로 가집니다.
핵심 차이점 정리#
| 구분 | 프로세스 | 스레드 |
|---|---|---|
| 메모리 | 독립 메모리 공간 | 메모리 공유 |
| 통신 | IPC 필요 | 공유 메모리 직접 접근 |
| 컨텍스트 스위칭 | 무겁다 | 가볍다 |
| 안정성 | 한 프로세스 오류가 다른 프로세스에 영향 없음 | 한 스레드 오류가 전체 프로세스에 영향 |
데드락(Deadlock)이란?#
데드락은 두 개 이상의 프로세스가 서로가 가진 자원을 기다리며 무한정 대기하는 상태입니다.
데드락 발생 조건 (4가지 모두 충족 시 발생)#
- 상호 배제(Mutual Exclusion): 자원은 한 번에 하나의 프로세스만 사용 가능
- 점유 대기(Hold and Wait): 자원을 점유한 채로 다른 자원을 기다림
- 비선점(No Preemption): 다른 프로세스의 자원을 강제로 빼앗을 수 없음
- 순환 대기(Circular Wait): 프로세스들이 순환 형태로 자원을 기다림
데드락 해결 방법#
# 데드락 예방 - 자원 순서 정하기
import threading
lock_a = threading.Lock()
lock_b = threading.Lock()
def process_1():
# 항상 lock_a 먼저, lock_b 나중에 획득
with lock_a:
with lock_b:
print("Process 1 실행 중")
def process_2():
# 동일한 순서 유지
with lock_a:
with lock_b:
print("Process 2 실행 중")
메모리 관리#
페이징(Paging)#
페이징은 물리 메모리를 고정 크기의 **프레임(Frame)**으로, 논리 메모리를 같은 크기의 **페이지(Page)**로 분할하는 메모리 관리 기법입니다.
장점:
- 외부 단편화 없음
- 연속적이지 않은 물리 메모리 사용 가능
단점:
- 내부 단편화 발생 가능
- 페이지 테이블 메모리 오버헤드
세그멘테이션(Segmentation)#
프로그램을 논리적 단위(코드, 데이터, 스택 등)로 분할하는 방식입니다.
// 가상 주소 변환 예시
struct SegmentDescriptor {
uint32_t base; // 세그먼트 시작 주소
uint32_t limit; // 세그먼트 크기
uint8_t flags; // 접근 권한
};
uint32_t translate(uint16_t segment, uint32_t offset,
struct SegmentDescriptor *table) {
struct SegmentDescriptor desc = table[segment];
if (offset > desc.limit) {
// 세그먼트 폴트 발생
return -1;
}
return desc.base + offset;
}
컨텍스트 스위칭(Context Switching)#
CPU가 현재 실행 중인 프로세스에서 다른 프로세스로 전환할 때 발생합니다. 현재 프로세스의 상태(레지스터, PC, 스택 포인터 등)를 PCB에 저장하고, 다음 프로세스의 상태를 복원합니다.
컨텍스트 스위칭은 순수한 오버헤드로, 최소화하는 것이 성능에 중요합니다. 스레드의 컨텍스트 스위칭은 프로세스보다 훨씬 빠릅니다.
관련 포스트
자료구조 면접 질문 완벽 정리: 스택, 큐, 트리, 해시
스택, 큐, 연결 리스트, 트리, 힙, 해시테이블까지 개발자 면접에 나오는 핵심 자료구조를 코드와 함께 정리했습니다.
시간복잡도와 Big-O 표기법: 코딩테스트 필수 개념
코딩테스트와 면접에 반드시 필요한 시간복잡도와 Big-O 표기법을 실제 코드 예제와 함께 정리했습니다.
JavaScript 면접 질문 완벽 정리: 클로저, 호이스팅, 이벤트 루프
클로저, 호이스팅, this 바인딩, 이벤트 루프 등 프론트엔드 면접의 단골 JavaScript 질문들을 코드와 함께 정리했습니다.