본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Computer Science

운영체제 개요

작성 2026. 10. 31.추가
목차18개 항목
출처와 참고

「세 가지 핵심 주제」 절은 팔만코딩경(42Seoul 커뮤니티 위키)의 「[운영체제] 개요 - 3가지 이야기」를 바탕으로 보강했다. 리눅스 커널의 다섯 하위 시스템은 ByteByteGo의 System Design 101 가이드 「5 Important Components of Linux」를 바탕으로 보강했다. 레스토랑 비유는 「레스토랑에 비유해서 알아보는 운영체제」를 바탕으로 보강했다. 학부 운영체제 과목의 전체 지도는 「개념 정리 - 운영 체제 편」을 함께 참고했다. 「개발자가 운영체제를 알아야 하는 이유」 절과 자원의 정의는 강민철의 「혼자 공부하는 컴퓨터 구조+운영체제」 강의(한빛미디어)를 바탕으로 보강했다. 「커널 패닉」 절은 CrashCourse의 「Crash Course Computer Science」 강의를 바탕으로 보강했다. 모듈·계층 구조와 처리 방식의 다중 프로그래밍·다중 처리·분산 처리는 고려사이버대학교 「운영체제이론 및 실습」(2024-1학기) 강의 내용으로 보강했다. 네트워크 운영체제, 「다중 프로그래밍·다중 작업·다중 처리의 구분」 절, 실시간 OS의 예는 GitHub 자료 모음 「Subjective-studies_OS-CN-DBMS」의 OS 면접 정리를 바탕으로 보강했다.

운영체제(Operating System)는 컴퓨터 하드웨어 바로 위에 설치되어 사용자·응용 프로그램과 하드웨어를 연결하는 소프트웨어 계층이다. 사용자에게는 컴퓨터를 편하게 쓸 수 있는 환경을, 컴퓨터 입장에서는 한정된 자원을 효율적으로 나눠 주는 자원 할당자 역할을 한다.

여기서 자원(resource, 시스템 자원) 은 프로그램이 실행되는 데 필요한 요소를 두루 가리키는 말이다. CPU·메모리·보조기억장치·입출력 장치 같은 하드웨어가 대표적이고, 파일이나 네트워크 패킷 같은 소프트웨어적인 것도 자원에 든다. 운영체제는 실행 중인 프로그램에 자원을 할당하고, 각 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.

개발자가 운영체제를 알아야 하는 이유

운영체제가 없다면 1 + 2의 결과를 화면에 찍는 프로그램조차 메모리의 빈 곳에 자신을 적재하는 코드, CPU에 덧셈을 시키는 코드, 모니터에 글자를 그리는 코드를 모두 직접 써야 한다. printf나 print 한 줄로 끝나는 이유는 그 함수가 내부에서 운영체제에 출력을 부탁하기 때문이다(시스템 콜). 응용 프로그램은 하드웨어를 직접 조작하지 않고 운영체제의 코드를 실행해 원하는 일을 맡긴다.

관점의미
프로그램을 위한 프로그램프로그램이 메모리 몇 번지에 올라갔는지, CPU를 몇 번째로 얼마나 받았는지는 사용자가 의식하지 않는다. 운영체제는 사용자보다 프로그램을 위해 일한다. 그래서 프로그램을 만드는 사람이 알아야 한다
문제를 가장 먼저 아는 곳하드웨어와 맞닿아 있어서, 프로그램이 자원을 쓰다 문제가 생기면 운영체제가 가장 먼저 알아챈다
개발자와 대화하는 창구하드웨어는 고장 나면 멈출 뿐이지만, 운영체제는 오류 메시지로 무엇이 잘못됐는지 알려 준다. 운영체제를 알면 오류 메시지를 읽는 힘과 문제 해결력이 함께 오르고, 운영체제 지식이 있어야만 풀리는 오류도 있다

협의의 운영체제와 광의의 운영체제

구분의미
협의 (커널, kernel)운영체제의 핵심으로, 부팅 이후 메모리에 상주하며 시스템 전체를 통제하는 부분
광의커널에 더해 셸, 각종 시스템 유틸리티까지 포함한 개념

보통 "운영체제"를 공부한다고 하면 커널의 동작을 다룬다.

커널 영역과 이중 모드

운영체제도 프로그램이지만 특별한 프로그램이라, 부팅할 때 메모리의 커널 영역에 따로 적재된다. 나머지 응용 프로그램은 사용자 영역에 올라간다. 바탕화면 같은 사용자 인터페이스(GUI·CLI)는 운영체제가 제공하지만 커널에는 속하지 않는다.

운영체제는 응용 프로그램이 하드웨어 자원에 직접 접근하지 못하게 막고, 자신을 거쳐서만 쓰게 하는 문지기 역할을 한다. 이를 위해 CPU는 이중 모드로 명령어를 실행한다.

모드할 수 있는 일
사용자 모드커널 영역의 코드를 실행할 수 없다. 일반 응용 프로그램은 이 모드로 실행되어 자원에 직접 접근하지 못한다
커널 모드자원에 접근하는 명령어를 포함한 모든 명령어를 실행한다

응용 프로그램이 파일을 읽거나 메모리를 더 받는 등 운영체제의 서비스가 필요하면 시스템 호출(system call)로 커널 모드로 전환한다. 시스템 호출은 특정 명령어가 일으키는 소프트웨어 인터럽트라서, 처리 흐름도 인터럽트와 같다. 작업을 백업 → 커널 영역의 처리 코드 실행 → 원래 프로그램으로 복귀. 하드웨어 쪽 구조는 컴퓨터 시스템 구조와 인터럽트에 있다.

커널의 구조: 단일형·마이크로·하이브리드

커널에 어떤 기능까지 넣느냐에 따라 구조가 나뉜다. 이 선택은 성능·안정성·이식성 사이의 트레이드오프다.

구분단일형(Monolithic)마이크로(Micro)하이브리드(Hybrid)
커널에 두는 것파일 시스템·드라이버·메모리·프로세스 관리 대부분IPC·스케줄링·기본 메모리 관리만. 나머지는 사용자 모드 서버성능이 중요한 부분(IPC 등)은 커널, 일부 서비스는 사용자 모드
내부 통신함수 호출메시지 전달혼합
성능높음. 시스템 콜 처리가 빠르다상대적으로 낮음중간~높음
안정성·모듈성낮음. 한 모듈의 오류가 커널 전체로 번진다높음. 필요한 기능만 골라 구성해 임베디드·실시간에 유리중간
예UNIX, Linux, MS-DOSMINIX, QNX(자동차·임베디드), seL4(정확성을 수학적으로 검증)Windows NT 계열, macOS(XNU)

Linux는 단일형 커널이지만 장치 드라이버 같은 기능을 실행 중에 붙였다 뗄 수 있는 적재 가능 커널 모듈(LKM) 로 유연성을 보완한다. 이렇게 단일형을 모듈로 쪼갠 형태를 따로 모듈 구조라고 부르기도 한다. 모듈은 따로 개발·교체할 수 있지만 적재되면 커널 주소 공간에서 함수 호출로 돌아가므로, 속도는 단일형 그대로이고 모듈 하나의 버그가 커널 전체를 멈출 수 있다는 점도 같다. 현대 UNIX, Linux, Solaris가 이 형태다.

기능을 넣는 범위와는 다른 축으로, 커널을 계층 구조(layered) 로 짜는 방식도 있다. 하드웨어를 0층으로 두고 그 위에 CPU 스케줄링, 메모리 관리, 입출력 관리를 차례로 쌓아, 각 층은 바로 아래 층의 연산만 호출하게 한다. 아래 층부터 하나씩 검증하며 올라가면 되므로 디버깅과 검증이 쉽고 내부를 잘 감출 수 있다. 대신 어떤 기능을 어느 층에 둘지 정하기 어렵고(예: 메모리 관리도 디스크 입출력이 필요하다), 호출이 층을 여러 번 건너므로 느려서 순수한 계층 구조로 만든 범용 OS는 드물다.

커널 패닉

응용 프로그램은 오류가 나도 그 프로세스만 죽고 운영체제가 정리한다. 커널은 그럴 상위 관리자가 없다. 커널이 스스로 복구할 수 없는 오류(커널 코드의 잘못된 메모리 접근, 핵심 자료구조 손상 등)를 만나면, 계속 돌다 데이터를 더 망가뜨리지 않도록 일부러 시스템을 멈춘다. 이것이 커널 패닉(kernel panic)이다. 이름은 초기 UNIX 커널이 오류 복구 코드를 대부분 빼고 대신 부르던 panic 루틴에서 왔고, Linux 커널에도 같은 이름의 panic() 함수가 있다. Windows에서는 블루스크린으로 알려진 버그 체크(bug check)가 같은 역할을 한다. 단일형 커널에서는 드라이버 하나의 버그도 커널 패닉으로 이어진다.

운영체제의 목적과 역할

1. 자원의 효율적 관리 (가장 중요)

  • 프로세서, 메모리, 입출력 장치를 여러 사용자·프로그램에 형평성 있게 나누면서도 전체 성능을 최대화한다.
  • 사용자와 운영체제 자신을 보호한다.

2. 편리한 실행 환경 제공

  • 여러 프로그램이 동시에 돌아가도 각자 독립된 컴퓨터를 쓰는 것 같은 환상을 준다.
  • 하드웨어를 직접 다루는 복잡한 일을 대신해 준다. 덕분에 응용 프로그램은 작성이 쉬워지고, 하드웨어가 바뀌어도 수정할 필요가 없다.

주요 관리 대상

기능하는 일
메모리 관리프로그램을 보조기억장치에서 메인 메모리로 올리고(폰 노이만 구조), 작고 비싼 메인 메모리를 효율적으로 배분
프로세스 관리실행 중인 프로그램(프로세스)에 CPU와 자원을 할당·회수
입출력 장치 관리프로세스를 대신해 장치에 작업을 요청하고 결과를 돌려줌
파일 관리파일의 저장 위치·검색을 관리하고 여러 사용자의 접근을 제어
시스템 보호사용자·프로세스의 자원 접근 권한 통제, 네트워킹, 명령 해석기 제공

리눅스 커널을 공부할 때는 이 역할을 다섯 하위 시스템으로 나눠 보면 지도가 된다.

하위 시스템다루는 것이 창고의 노트
시스템시스템 호출 API, 장치 드라이버, 입출력, 버스, 인터럽트컴퓨터 시스템 구조와 인터럽트, 입출력 구조
메모리물리 메모리, 가상 메모리, 메모리 매핑, 객체 할당메모리 관리, 가상 메모리
프로세스스케줄링, 인터럽트, 스레드, 동기화프로세스와 스레드, 프로세스 상태와 CPU 스케줄링, 프로세스 동기화
네트워크네트워크 프로토콜, 소켓, NIC 드라이버네트워크 기초, 리눅스 네트워크 네임스페이스와 ip 명령
저장소파일 시스템, I/O 캐시, 저장 장치, 파일 시스템 구현파일 시스템, 파일 시스템 구현

운영체제의 분류

동시 작업 가능 여부

  • 단일 작업(single tasking): 한 번에 하나의 작업만 처리. 예) MS-DOS 프롬프트에서는 한 명령이 끝나야 다음 명령을 실행할 수 있다.
  • 다중 작업(multi tasking): 여러 작업을 동시에 처리. 예) UNIX, Windows

사용자 수

  • 단일 사용자: MS-DOS, 초기 Windows
  • 다중 사용자: 여러 계정이 동시에(원격 포함) 접속 가능. 예) UNIX, Windows NT 서버

처리 방식

방식특징예
일괄 처리(batch)작업을 모아서 한꺼번에 처리, 끝날 때까지 기다려야 함초기 펀치 카드 시스템
다중 프로그래밍(multiprogramming)여러 프로그램을 메모리에 함께 올려 두고, 실행 중인 작업이 입출력을 기다리는 동안 다른 작업에 CPU를 넘긴다. 목표는 CPU 이용률이고, 그래서 다음에 누구를 실행할지 고르는 CPU 스케줄링이 필요해졌다1960년대 메인프레임
시분할(time sharing)CPU 시간을 잘게 나눠 여러 작업에 번갈아 할당. 다중 프로그래밍이 CPU 이용률을 노린다면 시분할은 응답 시간을 줄여 각 사용자가 컴퓨터를 혼자 쓰는 것처럼 느끼게 한다UNIX
다중 처리(multiprocessing)한 컴퓨터 안의 CPU(코어) 여러 개가 여러 프로그램을 실제로 동시에 실행. 프로세서 사이의 연결·역할 분담·동기화를 운영체제가 맡는다멀티코어 PC·서버
실시간(real-time)정해진 시간 안에 반드시 작업이 끝나야 함공장·원자로·로봇 제어
분산 처리(distributed)네트워크로 연결된 독립된 컴퓨터 여러 대가 일을 나눠 처리하지만, 사용자에게는 하나의 시스템처럼 보인다파일·DB·웹 서버로 나눈 클러스터
네트워크 운영체제(network OS)서버에서 돌며 네트워크 안의 여러 컴퓨터가 파일·프린터·사용자 계정·보안 정책을 함께 쓰게 관리한다. 분산 처리와 달리 각 컴퓨터가 독립된 시스템으로 보이고, 사용자는 원격 자원이 어디 있는지 안다Windows Server, Linux·UNIX 서버

실시간 시스템은 다시 둘로 나뉜다.

  • Hard real-time: 마감 시간을 어기면 치명적 (로켓, 반도체 장비, 자동차 에어백·ABS)
  • Soft real-time: 마감이 있지만 가끔 어겨도 큰 문제는 없음 (동영상 재생)

실시간 OS(RTOS)의 목표는 평균 처리량이 아니라 최악의 경우에도 응답 시간을 보장하는 예측 가능성이다. 그래서 선점형 고정 우선순위 스케줄링, 짧고 일정한 인터럽트 지연, 우선순위 상속 같은 기능을 갖추고(CPU 스케줄링), 범용 OS의 가상 메모리처럼 지연이 들쭉날쭉한 기능은 끄거나 쓰지 않는다. 마이크로컨트롤러용 FreeRTOS·Zephyr, 자동차·산업용 QNX·VxWorks가 대표적이다.

다중 프로그래밍·다중 작업·다중 처리의 구분

이름이 비슷해 자주 섞이는 네 용어는 무엇을 여러 개 두느냐로 구분한다.

용어여러 개인 것목표CPU가 1개여도 되나
다중 프로그래밍(multiprogramming)메모리에 올라간 프로그램입출력 대기 동안 CPU를 놀리지 않기(CPU 이용률). 작업이 스스로 입출력을 기다릴 때만 CPU가 넘어간다된다
다중 작업(multitasking), 시분할번갈아 실행되는 작업타이머로 시간 조각을 나눠 아주 자주 전환해 사용자가 각 프로그램과 대화하게 하기(응답 시간). 다중 프로그래밍의 논리적 확장이다된다. 겉보기 동시성(병행)
다중 처리(multiprocessing)CPU(코어)여러 작업을 실제로 같은 순간에 실행해 처리량 늘리기(병렬). 한 CPU가 고장 나도 나머지가 돈다안 된다
다중 스레딩(multithreading)한 프로세스 안의 실행 흐름같은 주소 공간을 공유하며 일을 나눠 응답성과 코어 활용 높이기(프로세스와 스레드)된다

다중 작업과 다중 처리는 서로 배타적이지 않다. 오늘날의 OS는 코어 여러 개(다중 처리) 위에서 각 코어가 다시 시분할(다중 작업)로 수백 개의 스레드를 돌린다. 다중 처리 시스템은 다시, 모든 CPU가 대등하게 스스로 스케줄링하는 대칭형(SMP) 과 한 CPU가 나머지에 일을 나눠 주는 비대칭형으로 나뉜다.

세 가지 핵심 주제: 가상화·병행성·영속성

운영체제 교재 『Operating Systems: Three Easy Pieces』는 운영체제가 하는 일을 세 주제로 묶는다. 이 창고의 OS 노트도 대체로 이 셋으로 나뉜다.

주제운영체제가 만드는 환상관련 노트
가상화(virtualization)CPU 하나를 여러 개처럼(CPU 가상화), 물리 메모리를 프로세스마다 독립된 주소 공간처럼(메모리 가상화) 보이게 한다. 그래서 운영체제를 가상 머신이라고도 부른다CPU 스케줄링, 가상 메모리, 가상화와 하이퍼바이저
병행성(concurrency)여러 실행 흐름이 같은 데이터를 동시에 건드려도 망가지지 않게 한다. 운영체제 자신도, 메모리를 공유하는 멀티스레드 프로그램도 이 문제를 겪는다프로세스 동기화, POSIX 스레드와 동기화 API
영속성(persistence)전원이 꺼져도 데이터가 남게 디스크를 관리한다. 파일 시스템이 데이터의 위치를 추적하고, 저널링이나 쓰기 시 복사(copy-on-write)로 쓰다가 멈춰도 일관성을 되찾게 한다파일 시스템, UNIX 파일 입출력

응용 프로그램은 이 기능들을 시스템 콜이라는 API로 쓴다(컴퓨터 시스템 구조와 인터럽트).

레스토랑으로 비유하면

운영체제의 개념들을 레스토랑 하나에 대응시키면 서로의 관계가 한눈에 들어온다.

운영체제레스토랑
운영체제손님(프로그램)과 주방(하드웨어) 사이에 선 레스토랑 운영 체계
커널주문을 받고 주방 출입을 통제하는 매니저
보호(이중 모드)홀과 주방을 엄격히 분리한다. 손님은 주방에 직접 들어가지 못하고 매니저(시스템 콜)를 거친다
프로그램 / 프로세스레시피북에 꽂힌 레시피 / 레시피와 재료를 펼쳐 둔 요리별 조리대
프로세스 메모리(코드·데이터·힙·스택)조리대의 레시피 자리, 공용 양념, 여분 공간, 손질 중인 재료 자리
CPU시킨 일만 빠르게 하는 셰프
시분할·멀티태스킹셰프가 여러 요리를 짧게 번갈아 만든다
문맥 교환매니저가 조리대를 바꿔 주는 시간. 그 사이 요리는 진행되지 않는다
PCB요리별 진행 상황과 다시 시작할 지점을 적은 주문서
프로세스 상태주문서의 상태(접수·대기·조리 중·손님 응답 대기·완료)
I/O 대기와 인터럽트손님 답을 기다리는 동안 요리를 멈추고, 답이 오면 호출벨로 매니저를 부른다. 매니저가 주기적으로 카운터를 확인하러 가는 것은 폴링이다
IPC조리대를 공유하거나 매니저가 재료를 날라 준다
스레드 / TCB한 조리대에서 같은 요리를 나눠 만드는 요리사들 / 주문서에 요리사별로 적은 진행 상황
동기화·임계 구역·락버거를 조립하는 자리는 한 번에 한 명만 쓰고 나머지는 차례를 기다린다

운영체제의 예

  • MS-DOS: 1981년 IBM PC용. 단일 사용자, 메모리 관리 한계(640KB).
  • MS Windows: GUI 기반 다중 작업 OS. Plug and Play(장치를 연결하면 별도 설정 없이 바로 사용), 풍부한 소프트웨어 생태계.
  • UNIX: 벨 연구소에서 개발했고 C로 다시 작성되어 이식성이 높다. 단일형 커널이며 System V, BSD 계열로 갈라졌고 macOS·iOS도 유닉스 계열이다(C의 역사와 표준).
  • Linux: 유닉스와 기능적으로 비슷한 Unix-like OS지만 유닉스 코드에서 파생된 것은 아니다. 엄밀히는 커널 이름이고, 실제로 쓰는 것은 배포판이다(리눅스 배포판과 패키지 관리).
  • 임베디드·소형 기기용: 예전에는 PalmOS, Windows CE가 대표적이었지만 둘 다 단종되었다. 지금은 스마트폰의 Android·iOS, 마이크로컨트롤러용 FreeRTOS·Zephyr 같은 실시간 OS, 센서 네트워크용 TinyOS 등이 쓰인다.

핵심 정리

  • 운영체제 = 하드웨어 위의 소프트웨어 계층, 핵심은 메모리에 상주하는 커널. 구조는 단일형·마이크로·하이브리드로 나뉜다.
  • 목적은 자원의 효율적 관리와 편리한 실행 환경 제공 두 가지.
  • 동시 작업 여부, 사용자 수, 처리 방식(일괄·다중 프로그래밍·시분할·다중 처리·실시간·분산)으로 분류한다. 다중 프로그래밍은 CPU 이용률, 시분할은 응답 시간, 다중 처리는 실제 병렬 실행이 목표다.
원본 기록9

댓글

GitHub 계정으로 댓글을 남길 수 있어요.