
💡 Chapter 09. 운영체제 시작하기
💡 Chapter 10. 프로세스와 스레드
💡 Chapter 11. CPU 스케줄링
위의 챕터들을 4주차에 학습하였고, 새롭게 알게되고 어려웠던 점은 아래와 같습니다.
✅ 운영체제
| 항목 | 설명 | 예시 |
| 정의 | 컴퓨터 자원을 관리하고 응용 프로그램의 실행을 지원하는 가장 근원적인 프로그램 | Windows, macOS, Linux, Android, iOS 등 |
| 자원의 의미 | 운영체제가 관리하는 자원(Resource) | CPU, 메모리, 하드디스크, 네트워크 등 컴퓨터의 4대 핵심 부품 및 파일, 네트워크 패킷 등 |
✅ 커널 (Kernel)
| 구분 | 설명 |
| 정의 | 운영체제의 핵심 기능을 담당하는 가장 중심적인 부분 |
| 주요 역할 | 자원 관리: CPU, 메모리, 저장장치 등 핵심 자원 접근 및 제어 프로그램 보호: 응용 프로그램의 안전한 실행 환경 제공 |
| 규모 | 코드 라인 수가 수천만 줄에 달하는 거대한 소프트웨어 ( 리눅스 커널: 약 2700만 줄 이상) |
| 커널 제외 대상 | 사용자와 직접 상호작용하는 유저 인터페이스(UI) GUI (그래픽 사용자 인터페이스), CLI (명령줄 인터페이스) |
| 실행 방식 | 이중 모드(Dual Mode)를 통해 시스템을 보호 - 커널 모드: 자원 접근이 가능한 핵심 실행 모드 - 사용자 모드: 자원 접근이 제한된 일반 프로그램 실행 모드 |
[ 운영체제의 핵심 서비스 ]
| 핵심 서비스 | 설명 | 주요 기능 및 관련 주제 |
| ① 프로세스 관리 | 실행 중인 프로그램, 즉 프로세스(Process)를 생성, 실행, 종료하며 효율적으로 관리하는 기능 | • 기능: 프로세스 생성/소멸, 실행/중지, 상태 관리 • 관련 주제: 스레드, 동기화, 교착 상태(Deadlock) |
| ② 자원 접근 및 할당 | 한정된 시스템 자원(CPU, 메모리 등)을 어떤 프로세스에 언제, 얼마나 할당할지 결정하고 분배하는 기능 | • CPU: CPU 스케줄링 • 메모리: 페이징(Paging), 스와핑(Swapping) • 입출력 장치: 인터럽트(Interrupt) 처리 |
| ③ 파일 시스템 관리 | 디스크에 저장된 파일과 디렉터리를 체계적으로 관리하여 보관하고 쉽게 접근할 수 있도록 하는 기능 | • 기능: 파일 생성, 삭제, 읽기, 쓰기, 권한 관리 |
✅ 시스템 호출 (System Call)
| 항목 | 설명 |
| 정의 | 사용자 프로그램이 운영체제(커널)의 기능을 사용하기 위한 공식적인 요청 방법 |
| 목적 | 보안상의 이유로 자원에 직접 접근할 수 없는 프로그램이 커널에게 작업을 위임하기 위함 |
| 작동 원리 | 1. 요청: 프로그램이 시스템 호출 함수 실행 2. 인터럽트: 소프트웨어 인터럽트 발생 3. 모드 전환: 사용자 모드 → 커널 모드로 전환 4. 작업 수행: 커널이 요청된 기능(파일 I/O, 프로세스 관리 등)을 처리 5. 복귀: 작업 완료 후 다시 커널 모드 → 사용자 모드로 전환 |
| 핵심 이유 | 시스템 보호: 악성 코드나 오류로부터 시스템 자원을 안전하게 보호 자원 관리: 여러 프로그램의 자원 요청을 효율적으로 조율하고 관리 추상화: 프로그래머가 복잡한 하드웨어 제어 방식을 몰라도 되도록 편리한 인터페이스 제공 |
| 대표적인 예시 | 프로세스 관리: fork() (새 프로세스 생성), exit() (프로세스 종료) 파일 입출력: read() (읽기), write() (쓰기), open() (열기) 메모리 할당: brk(), mmap() |
✅ PCB (프로세스 제어 블록)
| 구분 | 설명 |
| 정의 | 운영체제가 프로세스를 관리하기 위해, 프로세스마다 유지하는 고유의 자료구조 |
| 역할 | 프로세스의 상태 정보를 저장하고, 문맥 교환(Context Switch) 시 실행 상태를 복원하는 데 사용 |
[ PCB 포함 정보 ]
| 구분 | 핵심 설명 | 포함 정보 |
| 식별 정보 | 프로세스 고유 식별자 | PID, PPID |
| 프로세스 상태 | 현재 생명주기 상태 | 준비, 실행, 대기 등 |
| CPU 컨텍스트 | 실행 재개를 위한 하드웨어 상태 | 프로그램 카운터(PC), 레지스터 |
| 메모리 정보 | 할당된 메모리 영역 정보 | 페이지 테이블 주소 |
| 스케줄링 정보 | CPU 할당 순서 결정 정보 | 우선순위 (Priority) |
| 계정/입출력 정보 | 자원 사용 및 할당된 장치 정보 | CPU 사용 시간, 열린 파일 목록 |
✅ 문맥교환 (Context Switching)
| 구분 | 설명 |
| 정의 | 하나의 프로세스에서 다른 프로세스로 CPU 실행 권한을 넘겨주는 과정 |
| 문맥(Context) | 해당 프로세스를 다시 실행하기 위해 필요한 모든 중간 상태 정보 (레지스터 값, 메모리 정보, 열린 파일 목록 등 ) |
| 교환 순서 | 1. 저장: 현재 프로세스(A)의 문맥을 PCB에 저장 2. 복원: 다음 프로세스(B)의 문맥을 PCB에서 로드 3. 전환: CPU 실행 주체가 A에서 B로 변경 |
| 발생 시점 | 타이머 인터럽트, 입출력 요청 등 스케줄링이 필요할 때 발생 |
| 효과 | 여러 프로세스가 동시에 실행되는 것처럼 보이게 하는 시분할 시스템의 핵심 원리 |
✅ 프로세스 상태와 전이

| 상태 (State) | 설명 | 상태 전이 |
| 생성 상태 (New) | 프로세스가 메모리에 적재되고 막 생성된 상태 | New → Ready (프로세스 등록) |
| 준비 상태 (Ready) | CPU를 할당받기 위해 대기열에서 기다리는 상태 | Ready → Running (스케줄러에 의해 선택 / 디스패치) |
| 실행 상태 (Running) | CPU를 점유하고 명령어를 수행 중인 상태 | Running → Ready (타이머 인터럽트: 할당 시간 소진) Running → Waiting (I/O 요청: 입출력 작업 필요) Running → Terminated (작업 완료: 실행 종료) |
| 대기 상태 (Waiting) | 입출력(I/O) 작업이 완료되기를 기다리는 상태 | Waiting → Ready (I/O 완료: 작업이 끝나고 신호 받음) |
| 종료 상태 (Terminated) | 모든 실행이 끝나고 자원이 정리되는 상태 | (최종 상태, 더 이상 전이 없음) |
✅ 프로세스 계층 구조
| 구분 | 설명 | 특징 및 예시 |
| 계층 구조 | 프로세스를 부모-자식 관계로 계층화하여 관리하는 구조 | 대부분의 OS에서 사용 (※ Windows는 예외) |
| 부모/자식 프로세스 | 부모: 다른 프로세스를 생성한 주체 자식: 부모에 의해 생성된 프로세스 |
• 각자 고유 PID를 가짐 • 자식은 부모의 ID를 PPID로 저장 |
| 트리 구조 | 리눅스의 pstree 명령어로 확인 가능한 계층도 | • 최상위 프로세스: systemd • 예시: systemd → login → bash → vim |
✅ 프로세스 생성 기법 (fork vs exec)
| 구분 | fork() (복제) | exec() (교체) |
| 핵심 기능 | 새로운 자식 프로세스를 생성 | 기존 프로세스의 내용을 새 프로그램으로 덮어씀 |
| 프로세스 수 | 1개 → 2개 (부모 + 자식) | 1개 → 1개 (변화 없음) |
| 메모리 | 부모의 메모리 내용을 그대로 복사 | 기존 메모리 내용을 지우고 새 프로그램으로 교체 |
| PID | 자식에게 새로운 PID가 부여됨 | PID가 변경되지 않음 |
✅ 멀티 프로세스 vs 멀티 스레드
| 항목 | 멀티프로세스 (Multiprocess) | 멀티스레드 (Multithread) |
| 정의 | 하나의 프로그램을 여러 개의 프로세스로 나누어 실행 | 하나의 프로세스 안에서 여러 개의 스레드로 나누어 실행 |
| 자원 공유 | 각 프로세스가 독립된 자원을 가짐 (메모리 분리) | 모든 스레드가 프로세스의 자원을 공유 (메모리 공유) |
| 통신 방식 | IPC (파이프, 소켓 등)를 이용한 복잡한 통신 | 공유 메모리를 통해 간단하고 빠른 통신 |
| 안정성 | 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향 없음 | 하나의 스레드에 문제가 생기면 전체 프로세스가 종료될 수 있음 |
| 생성 비용 | 자원을 복제하므로 비용이 높고 속도가 느림 | 자원을 공유하므로 비용이 낮고 속도가 빠름 |
[ IPC : Inter-Process Communication | 프로세스간 통신 ]
| 개념 | 독립된 프로세스 간 데이터를 주고받는 통신 방법 (멀티프로세스 환경에서 사용) |
| 종류 | 파일 기반 통신, 공유 메모리 기반 통신, 파이프/소켓 기반 통신 |
✅ CPU 스케줄링
| 대분류 | 소분류 / 개념 | 설명 | 관련 내용 / 예시 |
| 스케줄링 | CPU 스케줄링 | 운영체제가 CPU 자원을 여러 프로세스에 공정하고 효율적으로 배분하는 전략 | 시스템 전체 성능 최적화의 핵심 |
| 핵심 기준 | 프로세스 우선순위 | 단순한 도착 순서가 아닌, 프로세스의 긴급성과 중요도에 따라 처리 순서를 정하는 것 | 우선순위는 PCB(Process Control Block)에 저장되어 관리됨 |
| 프로세스 유형 | I/O 바운드 (입출력 위주) |
CPU 작업보다 입출력 작업이 많아 CPU 점유 시간이 짧음 | 우선순위 높게 부여 (예: 파일 복사, 비디오 재생) |
| CPU 바운드 (계산 위주) |
입출력보다 CPU 연산 작업이 많아 CPU를 오래 점유함 | 우선순위 낮게 부여 (예: 복잡한 연산, 프로그램 컴파일) |
✅ 주요 스케줄링 큐
| 큐 종류 | 역할 | 프로세스 상태 | 특징 |
| 준비 큐 (Ready Queue) |
CPU의 할당을 기다리는 프로세스들의 줄 | 준비 (Ready) |
- 즉시 실행 가능한 상태 - CPU 스케줄러가 이 큐에서 다음 실행할 프로세스 선택 |
| 대기 큐 (Wait/Device Queue) |
입출력(I/O) 작업의 완료를 기다리는 프로세스들의 줄 | 대기 (Waiting) |
- 장치별로 별도의 큐가 존재 (예: 디스크 큐, 키보드 큐) - I/O 작업이 완료되면 준비 큐로 이동하여 CPU 할당을 다시 기다림 |
✅ 선점형 vs 비선점형 스케줄링
| 구분 | 선점형 (Preemptive) | 비선점형 (Non-Preemptive) |
| 개념 | 실행 중인 프로세스를 중단시키고 다른 프로세스에 CPU를 할당할 수 있음 (강제 교체 O) |
실행 중인 프로세스가 종료될 때까지 다른 프로세스가 CPU를 사용할 수 없음 (강제 교체 X) |
| 장점 | CPU 점유가 공정하고 응답 시간이 빠름 | 문맥 교환(컨텍스트 스위칭) 오버헤드가 적음 |
| 단점 | 잦은 문맥 교환(Context Switching)으로 인한 비용 발생 | 특정 프로세스의 CPU 독점으로 시스템 전체 반응성 저하 가능 |
✅ 스케줄링 알고리즘
| 알고리즘 | 방식/개념 | 스케줄링 방식 | 장점 및 단점 |
| First Come First Serve (FCFS) |
먼저 도착한 순서대로 처리 | 비선점형 | 장점: 단순하고 직관적 단점: 호위 효과(Convoy Effect)로 인한 평균 대기 시간 증가 |
| Shortest Job First (SJF) |
실행 시간이 가장 짧은 작업을 우선 처리 | 비선점형 | 장점: 평균 대기 시간 최소화 단점: 실행 시간 예측이 어려움 |
| Round Robin (RR) |
동일한 타임 슬라이스 할당 후 순환 | 선점형 | 장점: 공정성 확보, 빠른 응답 시간 단점: 문맥 교환 비용 증가 가능성 |
| Shortest Remaining Time (SRT) |
남은 실행 시간이 가장 짧은 프로세스 우선 처리 | 선점형 | 장점: 평균 대기 시간을 더욱 단축 단점: 남은 시간을 계속 추적해야 하므로 복잡함 |
| Priority (우선순위) |
각 프로세스의 우선순위에 따라 처리 | 선점형 /비선점형 |
장점: 중요도에 따른 유연한 스케줄링 단점: 기아 현상(Starvation) 발생 가능, 에이징(Aging) 기법으로 보완 |
| Multilevel Queue (MLQ | 다단계큐) |
고정된 여러 큐에 프로세스를 배정 | 혼합형 | 장점: 프로세스 유형별로 다른 알고리즘 적용 가능 단점: 큐 간 이동이 없어 유연성 부족 |
| Multilevel Feedback Q (MFQ | 다단계 피드백 큐) |
큐 간 이동이 가능한 다단계 큐 방식, 피드백을 통해 우선순위 조정 | 혼합형 | 장점: 유연성이 높고, 에이징 구현 용이 단점: 설계가 복잡하고 오버헤드가 큼 |
📓 기본숙제
P304 > 1. 다음은 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. ① ~ ⑤까지 올바른 상태를 적어보세요.

① 생성 상태
② 준비 상태
③ 실행 상태
④ 종료 상태
⑤ 대기 상태
📎 참고
- "혼자 공부하는 컴퓨터 구조+운영체제" 책 : https://hongong.hanbit.co.kr/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/
- "혼자 공부하는 컴퓨터 구조+운영체제" 강의 : https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl
'사이버 보안 > 컴퓨터 구조' 카테고리의 다른 글
| [혼공컴운] 6주차 정리1 > 가상 메모리 (4) | 2025.08.17 |
|---|---|
| [혼공컴운] 5주차 정리 (6) | 2025.08.09 |
| [혼공컴운] 3주차 정리 (0) | 2025.07.19 |
| [혼공컴운] 2주차 정리 (1) | 2025.07.12 |
| [혼공컴운] 1주차 정리 (0) | 2025.07.05 |
댓글