컴퓨터과학 챕터 1 약 4분

운영체제 — 1강: OS의 역할, 프로세스, 스레드

O
OIYO 편집부 기여자
1/3

운영체제(Operating System)란?

운영체제의 정의:
→ 하드웨어와 응용 소프트웨어 사이의 중간 계층
→ 컴퓨터 시스템의 자원(CPU, 메모리, I/O)을 관리하는 소프트웨어

운영체제의 두 가지 관점:
1. 자원 관리자: CPU, 메모리, 파일 시스템, I/O 장치 할당
2. 인터페이스 제공자: 사용자와 하드웨어 사이 인터페이스

주요 운영체제:
→ Windows (Microsoft)
→ macOS (Apple)
→ Linux (오픈 소스)
→ Android, iOS (모바일)

운영체제의 역할

1. 프로세스 관리:
→ 프로세스 생성·종료·스케줄링
→ 멀티태스킹 지원

2. 메모리 관리:
→ 각 프로세스에 메모리 할당
→ 가상 메모리 (Virtual Memory) 관리

3. 파일 시스템 관리:
→ 파일 생성·삭제·읽기·쓰기
→ 디렉터리 구조 관리

4. I/O 장치 관리:
→ 키보드, 마우스, 디스크, 네트워크 카드 제어
→ 장치 드라이버 인터페이스

5. 보안 및 보호:
→ 사용자 인증, 접근 제어
→ 프로세스 간 격리

프로세스(Process)

프로세스의 정의:
→ 실행 중인 프로그램 (Program in Execution)
→ 프로그램: 디스크에 저장된 수동적 코드
→ 프로세스: 메모리에 올라가 실행 중인 프로그램 인스턴스

프로세스 메모리 구조:
코드 영역 (Text): 실행 코드
데이터 영역 (Data): 전역 변수, 정적 변수
힙 (Heap): 동적으로 할당된 메모리
스택 (Stack): 함수 호출 시 지역 변수, 복귀 주소

프로세스 vs 프로그램:
→ 같은 프로그램도 여러 프로세스로 실행 가능
   예: Chrome 탭 여러 개 = 여러 프로세스
→ 프로세스는 자원(메모리, 파일)을 독립적으로 소유

프로세스 상태 (Process States)

5가지 상태:

생성 (New):
→ 프로세스 생성 중

준비 (Ready):
→ CPU 할당 대기 중
→ 실행 가능 상태

실행 (Running):
→ CPU가 프로세스 명령 실행 중
→ CPU 코어 하나에 하나의 프로세스만 실행

대기/블록 (Waiting/Blocked):
→ I/O 작업 등 이벤트 기다리는 중
→ I/O 완료 후 준비 상태로 전환

종료 (Terminated):
→ 프로세스 실행 완료

상태 전환:
New → Ready: 프로세스 생성 완료
Ready → Running: 스케줄러가 CPU 할당
Running → Ready: 타임슬라이스 만료 (선점)
Running → Waiting: I/O 요청
Waiting → Ready: I/O 완료
Running → Terminated: 프로세스 종료

PCB (Process Control Block)

PCB의 정의:
→ 각 프로세스에 대한 모든 정보를 담은 자료구조
→ 운영체제가 프로세스를 관리하기 위해 유지

PCB 포함 정보:
- 프로세스 식별자 (PID)
- 프로세스 상태 (New, Ready, Running, ...)
- 프로그램 카운터 (PC): 다음 실행할 명령어 주소
- CPU 레지스터 값
- CPU 스케줄링 정보 (우선순위 등)
- 메모리 관리 정보 (페이지 테이블 등)
- I/O 상태 정보

PCB 위치:
→ 커널 메모리 (사용자 프로그램이 직접 접근 불가)

컨텍스트 스위칭 (Context Switching)

컨텍스트 스위칭:
→ CPU가 한 프로세스에서 다른 프로세스로 전환

과정:
1. 현재 프로세스의 CPU 상태(레지스터, PC) → PCB에 저장
2. 새 프로세스의 PCB에서 상태 복원
3. 새 프로세스 실행 재개

비용:
→ 컨텍스트 스위칭 자체는 유용한 작업을 하지 않음 (오버헤드)
→ 스위칭이 너무 잦으면 성능 저하
→ 캐시 미스 (새 프로세스는 캐시 비워진 상태)

스위칭 발생 시점:
→ 인터럽트 (하드웨어 이벤트)
→ 시스템 콜 (소프트웨어 인터럽트)
→ 타임 슬라이스 만료 (선점형 스케줄링)

스레드 (Thread)

스레드의 정의:
→ 프로세스 내에서 실행되는 경량 실행 단위

프로세스 vs 스레드:
프로세스:
→ 독립된 메모리 공간 (코드, 데이터, 힙, 스택)
→ 생성·전환 비용 높음

스레드:
→ 같은 프로세스 내 자원 공유 (코드, 데이터, 힙)
→ 각 스레드는 독립적인 스택과 PC만 보유
→ 생성·전환 비용 낮음 (경량화)

멀티스레딩 장점:
→ 응답성 향상: UI 스레드와 작업 스레드 분리
→ 자원 공유: 프로세스 자원 공유로 효율적
→ 경제성: 스레드 생성이 프로세스 생성보다 저렴
→ 멀티코어 활용: 병렬 실행 가능

멀티스레딩 문제:
→ 경쟁 조건 (Race Condition): 공유 자원에 동시 접근
→ 교착 상태 (Deadlock): 서로 자원을 점유한 채 대기
→ 기아 (Starvation): 특정 스레드가 CPU를 오랫동안 못 받음

CPU 스케줄링

스케줄링의 목적:
→ CPU 사용률 최대화
→ 처리량 최대화
→ 대기 시간 최소화
→ 응답 시간 최소화

주요 스케줄링 알고리즘:

1. FCFS (First Come First Served):
→ 먼저 온 프로세스 먼저 실행
→ 비선점형
→ 문제: 호위 효과 (Convoy Effect): 짧은 작업이 긴 작업 뒤에서 오래 대기

2. SJF (Shortest Job First):
→ 가장 짧은 CPU 버스트 먼저 실행
→ 평균 대기 시간 최소화 (최적)
→ 문제: 긴 작업 기아 (Starvation)

3. 라운드 로빈 (Round Robin):
→ 각 프로세스에 동일한 타임 슬라이스(퀀텀) 할당
→ 선점형, 공평한 CPU 분배
→ 타임 퀀텀 크기가 성능에 큰 영향

4. 우선순위 스케줄링:
→ 우선순위 높은 프로세스 먼저 실행
→ 낮은 우선순위 프로세스 기아 가능
→ 에이징(Aging)으로 해결: 오래 기다릴수록 우선순위 증가

자주 묻는 질문

Q. 프로세스와 스레드 중 어느 것이 더 빠른가요? A. 같은 작업이라면 스레드가 더 빠릅니다. 스레드는 프로세스 내에서 메모리를 공유하므로 생성·통신·컨텍스트 스위칭 비용이 낮습니다. 그러나 스레드는 공유 메모리로 인해 동기화 문제가 발생할 수 있습니다.

Q. 실제 OS는 어느 스케줄링 알고리즘을 사용하나요? A. 현대 OS(Linux, Windows)는 단순한 하나의 알고리즘이 아닌 복잡한 복합 스케줄러를 사용합니다. Linux는 CFS(Completely Fair Scheduler)를 기본으로 사용하며, 실시간 프로세스를 위한 별도 스케줄링도 지원합니다.

O

OIYO 편집부

Content Editor

지식 인큐베이터이자 전문 콘텐츠 크리에이터. 경영, 경제, 법률 및 실생활에 유용한 실무/자격증 중심의 깊이 있는 정보를 연구하고 공유합니다.