운영체제의 개요

 

운영체제란?

컴퓨터는 단순히 전원을 넣는다고 해서 우리가 원하는 프로그램을 자동으로 실행해주는 기계가 아니다. 우리가 사용하는 모든 소프트웨어는 하드웨어 자원을 효율적으로 활용해야 하며, 이 모든 과정을 조율해주는 소프트웨어가 바로 운영체제(Operating System, OS)다.

운영체제의 주요 기능

운영체제는 단순한 소프트웨어가 아니다. 하드웨어와 사용자 프로그램 사이에서 다음과 같은 핵심 기능을 수행한다:

기능 분류 설명
프로세스 관리 실행 중인 프로그램(프로세스)의 생성, 스케줄링, 종료 등을 담당
메모리 관리 여러 프로그램이 동시에 실행될 때 메모리를 효율적으로 분배
파일 시스템 관리 데이터를 저장하고 접근할 수 있도록 파일 단위로 관리
입출력 장치 관리 키보드, 마우스, 디스크 등 다양한 장치의 제어
보안 및 접근 제어 사용자 및 프로그램의 권한을 구분하고 시스템을 보호

운영체제는 왜 필요할까?

하드웨어는 원래부터 다루기 어려운 대상이다. 디스크에 직접 명령어를 보내거나, 메모리를 수동으로 할당하는 것은 복잡하고 위험하다. 운영체제가 존재함으로써 우리는 고수준의 명령만으로도 프로그램을 실행하고 데이터를 저장할 수 있다.

운영체제가 없다면:

  • 프로그램 간 자원 충돌이 발생할 수 있음
  • 메모리나 파일 시스템을 수작업으로 관리해야 함
  • 사용자 보안이 전혀 보장되지 않음

백엔드 개발자라면 자주 겪는 상황

운영체제 개념이 없다면 다음과 같은 명령의 의미를 단순히 '외우는 것'으로 그치게 된다.

ps aux | grep java
kill -9 12345

하지만 프로세스 구조와 PID, 시그널 전달 방식에 대한 이해가 있다면 다음과 같은 연결고리를 파악할 수 있다:

  • ps 명령은 현재 실행 중인 프로세스를 조회하는 시스템 호출을 래핑
  • kill은 해당 PID에 시그널을 전달하는 인터럽트 요청
  • -9는 강제 종료 시그널(SIGKILL)

이러한 맥락은 단순한 명령어 숙지를 넘어서 시스템 전반의 흐름을 이해하는 사고로 이어진다.

 


커널이란?

운영체제는 하나의 거대한 시스템처럼 보이지만, 그 중심에는 커널(Kernel)이라는 핵심 컴포넌트가 존재한다. 커널은 하드웨어와 가장 가까운 계층에서 시스템 자원을 직접 제어하며, 모든 응용 프로그램은 결국 커널을 통해 하드웨어에 접근한다.

커널의 핵심 역할

커널은 다음과 같은 기능을 제공한다:


기능 설명
프로세스 관리 프로세스의 생성, 제거, 스케줄링, 문맥 교환
메모리 관리 메모리 할당, 해제, 가상 메모리 운영
디바이스 제어 입출력 장치와의 인터페이스 담당
파일 시스템 접근 파일 읽기, 쓰기 등 고수준 API 지원
시스템 호출 처리 사용자 프로그램의 요청을 받아 시스템 수준 작업 수행
 

이러한 역할 덕분에 커널은 운영체제의 심장이라 불린다.

커널 모드와 사용자 모드

운영체제는 보안을 위해 이중 모드 구조를 사용한다. 이는 커널과 사용자 프로그램을 명확히 구분하기 위한 방식이다.

 

구분 커널 모드(Kernel Mode) 사용자 모드(User Mode)
권한 수준 높음 낮음
접근 가능 영역 전체 시스템 자원 제한된 영역 (자신의 메모리 등)
예시 시스템 호출, 장치 제어 일반 애플리케이션 (브라우저, 게임 등)
잘못된 동작 시 영향 전체 시스템에 영향 (블루스크린 등) 해당 프로그램만 종료
 

운영체제는 일반 프로그램이 시스템 자원에 직접 접근하는 것을 차단하고, 반드시 커널을 통해 요청하도록 설계되어 있다. 이를 통해 보안성과 안정성을 동시에 확보할 수 있다.

 


이중 모드

운영체제는 시스템의 안정성과 보안성을 위해 모든 실행 환경을 두 가지 모드로 나눈다: 커널 모드사용자 모드. 이를 이중 모드(Dual Mode)라고 부른다.

왜 필요한가?

하나의 프로그램이 시스템 자원 전체를 제어할 수 있다면 다음과 같은 문제가 발생할 수 있다:

  • 메모리의 다른 영역을 침범해 다른 프로그램을 강제 종료시킴
  • 입출력 장치를 독점해 시스템 전체를 멈춤
  • 악성 코드가 커널을 수정해 전체 시스템을 장악

이러한 위험을 방지하기 위해 운영체제는 사용자 모드에서는 제한된 작업만 수행 가능하게 하고, 커널 모드에서만 시스템 자원 접근을 허용한다. 이는 시스템 안정성을 보장하는 가장 기본적인 설계 원칙 중 하나다.

예시

아래는 간단한 상황 예시다:

사용자가 메모장 프로그램에서 파일을 저장하면, 해당 작업은 하드디스크에 데이터를 쓰는 것을 의미한다.
하지만 메모장 자체는 사용자 모드에서 실행되기 때문에 디스크에 직접 접근할 수 없다.
대신 시스템 호출(system call)을 통해 커널에게 요청하고, 커널이 디스크에 접근한다.

시스템 호출이란?

시스템 호출(System Call)은 사용자 프로그램이 커널 기능을 요청할 수 있는 공식적인 방법이다.

  • 사용자 모드에서 커널 모드로 모드를 전환하는 유일한 경로
  • 보통 라이브러리 함수가 내부적으로 시스템 호출을 감싸고 있음 (예: ⟨⟨fopen()⟩⟩ → ⟨⟨open()⟩⟩ 시스템 호출)

시스템 호출의 종류


범주 예시 시스템 호출 설명
프로세스 제어 ⟨⟨fork()⟩⟩, ⟨⟨exec()⟩⟩, ⟨⟨exit()⟩⟩ 프로세스 생성, 실행, 종료
파일 조작 ⟨⟨open()⟩⟩, ⟨⟨read()⟩⟩, ⟨⟨write()⟩⟩, ⟨⟨close()⟩⟩ 파일 입출력 및 관리
디바이스 조작 ⟨⟨ioctl()⟩⟩, ⟨⟨read()⟩⟩, ⟨⟨write()⟩⟩ 장치와의 통신
정보 유지 ⟨⟨getpid()⟩⟩, ⟨⟨alarm()⟩⟩, ⟨⟨sleep()⟩⟩ 상태 정보 조회 및 설정
통신 ⟨⟨pipe()⟩⟩, ⟨⟨shmget()⟩⟩, ⟨⟨mmap()⟩⟩ 프로세스 간 통신 (IPC)
 

이러한 시스템 호출 덕분에 사용자 프로그램은 시스템 자원을 간접적으로 안전하게 사용할 수 있는 구조를 갖게 된다.

 


모놀리식 커널과 마이크로 커널

운영체제의 커널은 시스템의 핵심 기능을 얼마나 내부에 포함할지에 따라 크게 두 가지 구조로 나뉜다: 모놀리식 커널(Monolithic Kernel)마이크로 커널(Microkernel).

커널 구조 개요

아래는 두 커널 구조의 차이를 나타낸 간략한 도식이다:

[모놀리식 커널]
 ┌────────────────────────┐
 │  응용 프로그램 (User)  │
 ├────────────────────────┤
 │       시스템 콜        │
 ├────────────────────────┤
 │     모든 커널 기능      │  ← 프로세스/메모리/파일/디바이스 등 전부 포함
 └────────────────────────┘

[마이크로 커널]
 ┌────────────────────────┐
 │  응용 프로그램 (User)  │
 ├────────────────────────┤
 │       시스템 콜        │
 ├────────────────────────┤
 │      핵심 커널 기능     │  ← 최소한의 기능만 포함 (예: 프로세스/메모리)
 ├────────────────────────┤
 │     나머지는 사용자 공간 │  ← 파일, 드라이버 등은 별도 서비스로 동작
 └────────────────────────┘

모놀리식 커널

모놀리식 커널은 필요한 모든 기능이 커널 내부에 포함되어 있는 구조다. 대표적으로 LinuxUNIX 계열 운영체제가 이 방식을 따른다.

  • 장점
    • 시스템 콜 처리 속도가 빠름 (내부 모듈 간 함수 호출)
    • 다양한 기능을 하나의 공간에서 통합 관리
  • 단점
    • 커널이 크고 복잡해 유지보수가 어려움
    • 하나의 모듈 오류가 전체 시스템 다운으로 이어질 수 있음

마이크로 커널

마이크로 커널은 핵심 기능만 커널에 남기고, 나머지는 사용자 공간에서 별도 프로세스로 실행하는 구조다. 대표적으로 Minix, QNX, L4 등이 여기에 속한다.

  • 장점
    • 각 구성 요소가 독립적으로 실행되기 때문에 안정성 높음
    • 모듈 단위로 확장과 수정이 쉬움
  • 단점
    • 커널-사용자 간 메시지 전달 비용이 큼 → 성능 저하 가능성
    • 구현이 복잡하고, 초기 설계가 까다로움

비교 요약


항목 모놀리식 커널 마이크로 커널
구조 모든 기능 포함 최소 기능만 포함
안정성 낮음 (한 번에 다운될 수 있음) 높음 (모듈 단위 복구 가능)
성능 빠름 상대적으로 느림
유지보수 어렵다 상대적으로 쉬움
대표 OS Linux, UNIX Minix, QNX

 


가상머신

가상머신(Virtual Machine, VM)은 하드웨어를 소프트웨어로 가상화한 환경이다. 하나의 컴퓨터 안에서 또 다른 운영체제를 실행할 수 있도록 도와주며, 테스트나 서버 운영, 개발 환경 분리에 자주 사용된다.

가상머신의 구조

  • 호스트 OS: 실제 컴퓨터에 설치된 운영체제
  • 게스트 OS: 가상머신 안에서 실행되는 운영체제
  • 하이퍼바이저: 가상머신을 생성하고 자원을 제어하는 소프트웨어

대표적인 사용 목적

  • 서로 다른 OS 환경에서의 테스트 (예: Windows에서 Linux 실행)
  • 서버 가상화를 통한 자원 효율화
  • 로컬 개발 환경과 운영 환경 분리

가상머신은 모든 운영체제를 독립적으로 실행할 수 있어 격리성과 유연성이 뛰어나지만, 컨테이너에 비해 상대적으로 무겁고 느리다는 단점이 있다.

 

'CS > 운영체제' 카테고리의 다른 글

동기화와 병행성 제어  (0) 2025.06.19
CPU 스케줄링  (0) 2025.06.19
프로세스와 스레드  (0) 2025.06.19