놀라운 운영체제 #1 – 운영체제 ?

전하윤·2025년 7월 12일
0

OS(operating system)

목록 보기
1/6
post-thumbnail

목차


개요

운영체제라고 하면 흔히 Window, Linux, Mac, Unix를 떠올릴 것이다. 맞는 말이다.
그렇다면 그런 운영체제들이 어떤 방식으로 동작하고, 어떻게 운영체제 위에서 우리의 서비스가 돌아가는 걸까? 쉽사리 대답하지 못할것이다. 또는 굳이 알고싶지 않을수도 있다.

“내가 백엔드 개발을 하는데, 운영체제를 굳이 깊게 알아야 할까?”
“어차피 서버도 클라우드에서 띄우고, 코드는 프레임워크가 다 처리해주는데 OS까지 알아야 할 필요가 있을까?”

아마 한 번쯤 이런 의문을 가져본 적이 있을 것이다.
나 역시 처음엔 “프로그래밍만 잘 하면 되지, OS는 굳이…”라는 생각을 했었다.
하지만 서비스가 커지고, 그리고 조금 더 효율적이고 안정적인 백엔드 서비스를 만들고 싶을수록
운영체제에 대한 이해가 단순한 ‘지식’이 아니라 ‘필수 역량’임을 깨닫게 된다.

개발자들이 구현하는 서비스들은 모두 운영체제위에서 실행된다.

서버가 동작하고, 프로세스와 스레드가 돌아가고, 메모리와 네트워크, 파일 시스템까지
결국엔 모든 동작이 OS의 관리 아래에서 이루어진다.

  • 서버가 갑자기 느려질 때, 어디서 병목이 생기는지 파악하려면?

  • 메모리 누수, CPU 폭주, 파일 핸들 고갈 같은 문제를 디버깅하려면?

  • 여러 요청을 동시에 처리하는 동시성 프로그래밍에서 안전하게 데이터 일관성을 보장하려면?

이러한 고민이 드는 순간, 우리는 결국 운영체제의 원리와 한계에 맞닥뜨리게 된다.

그래서 백엔드 개발자라면 운영체제에 대한 깊이 있는 이해가 단순한 옵션이 아니라,
더 나은 서비스를 만들기 위한 필수 역량임을 점점 더 실감하게 된다.
이 시리즈에서는 바로 그 이유와 실제 현장에서 필요한 운영체제의 원리를 공부하며 하나씩 풀어가려 한다.


운영체제란?

한마디로 컴퓨터 자원을 효율적으로 관리하는 소프트웨어이다.

운영체제는 컴퓨터를 관리하기 위해 기본적인 규칙이나 절차를 규정하여 컴퓨터 내의 모든 하드웨어와 응용 프로그램을 관리한다. 또한 사용자가 직접 자원에 접근하는것을 막음으로서, 컴퓨터의 자원을 보호한다. 대신 사용자가 자원을 이용할 수 있는 다양한 인터페이스를 지원한다.


운영체제의 역할

1. 자원관리

  • CPU 스케줄링: 여러 프로그램(프로세스/스레드)들이 CPU를 효율적으로 나눠 쓰도록 관리
  • 메모리 관리: 여러 프로그램이 안전하게 메모리를 쓰도록 할당 및 회수, 가상 메모, 메모리 보호등
  • 디스크/파일 관리: 파일 시스템, 데이터 저장 및 읽기, 디스크 공간 분배 등
  • 입출력(I/O)관리: 네트워크, 디바이스 등 하드웨어와의 입출력 처리

2. 자원보호

  • 프로세스 격리: 서로 다른 프로그램이 침범하지 못하게 보호
  • 권한 관리: 사용자별/프로세스별 접근 제어
  • 시스템 보안: 악의적인 접근, 해킹, 데이터 손상 방지

3. 하드웨어 인터페이스 제공

  • 드라이버 관리: 실제 하드웨어와 소프트웨어가 통신할 수 있게 중간다리 역할
  • 추상화: 복잡한 하드웨어 동작을 쉽고 일관성 있게 다루도록 제공

4. 사용자 인터페이스 제공

  • 쉘/커맨드라인: 사용자가 시스템을 제어할 수 있는 환경 제공
  • 시스템 콜: 응용프로그램(백엔드 서버 등)에서 OS의 기능을 호출할 수 있도록 API 제공

운영체제의 목표

효율성

  • 자원을 효율적으로 관리하는 것
  • 같은 자원으로 더 많은 작업량 처리하거나, 같은 작업량 처리하는 데 더 적은 자원 사용하는 것

안정성

  • 작업을 안정적으로 처리하는 것
  • 사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제 처리
  • 시스템에 문제 발생시 이전으로 복구하는 결함 포용 기능 수행

확장성

  • 다양한 시스템 자원을 컴퓨터에 추가/제거하기 편리한 것

편리성

  • 사용자가 편리하게 작업할 수 있는 환경 제공하는 것

커널과 인터페이스

커널

  • 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능들을 모아놓은 것

인터페이스

  • 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할

  • 그래픽을 사용한 인터페이스를 GUI(Graphical User Interface)라 부름

  • 쉽게 말해 커널은 운영체제의 핵심적인 기능의 집합체이고, 인터페이스는 그 커널과 사용자들을 이어주는 중간 다리와 같다고 생각하면 될 것 같다.


커널의 종류

과거와 오늘날 사용되는 혹은 사용 됐던 커널들에 대해 간단히 소개하겠다.

단일형 구조 커널

  • 단일형 구조 커널은 초창기 운영체제의 구조로 사용됨
  • 커널의 핵심 기능을 구현하는 모듈들을 구분없이 하나로 구성함
  • 모듈 간의 통신 비용이 줄어들어 효율적으로 운영이 가능하지만, 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류를 처리하기가 어렵고, 상호 의존성이 높아서 기능상의 작은 결함이 시스템 전체로 확살 될 수 있다.

계층형 구조 커널

  • 계층형 구조 커널은 비슷한 기능을 가진 모듈을 묶어서 하나의 계층으로 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식이다.
  • 마이크로소프트 윈도우 및 오늘날의 대부분의 운영체제에서 사용한다.

마이크로 구조 커널

  • 마이크로 구조(micro architecture) 커널은 프로세스 관리, 메모리 관리, 프로세
    스 간 통신 관리 등 가장 기본적인 기능만 제공하고 나머지 기능(드라이버,파일 시스템,네트워크 등)은 별도의 프로세스(서버)로 분리해서 운영한다.

  • 커널의 각 모듈은 세분화되어 존재하고 모듈 간의 정보 교환은 프로세스 간 통
    신을 이용하여 이루어짐

  • iOS, macOS, watchOS 등 애플 생태계에서 사용되는 운영체제의 기반 구조


마이크로커널 vs 계층형 커널

마이크로커널계층형 커널
구조최소 핵심 기능만 커널에, 나머진 분리여러 계층으로 커널 구조화
확장/유지보수뛰어남비교적 쉬움
성능다소 느릴 수 있음계층이 많으면 느려질 수 있음
안정성매우 높음계층별 분리로 높음
예시QNX, MINIX 등초기 UNIX, THE OS 등

즉 둘 다 안전성과 유지보수성을 높이려는 시도지만, 구조적 철학이 다르다고 생각하면 될 것 같다.


Reference


다음 시리즈 안내

운영체제의 더 깊은 개념, 주요 동작 원리, 백엔드 개발자 실무와 연결되는 다양한 내용을
앞으로 이어질 시리즈 글들에서 자세히 정리할 예정입니다.
각 항목별 심화 내용이 궁금하다면 아래 목차나 '운영체제' 시리즈의 다음 글들을 참고해주세요.

profile
개발에 대한 고민과 성장의 기록을 일기장처럼 성찰하며 남기는 공간

0개의 댓글