시스템 소프트웨어

시스템 소프트웨어는 컴퓨터의 하드웨어 자원을 제어하고 다른 소프트웨어가 실행될 수 있는 기반 환경을 제공하는 소프트웨어이다. 운영체제와 커널, 장치 드라이버, 컴파일러, 링커, 런타임 시스템, 시스템 라이브러리와 각종 관리 도구가 대표적인 시스템 소프트웨어에 해당한다.

분류소프트웨어
주요 역할하드웨어 제어, 자원 관리, 프로그램 실행 환경 제공
주요 구성운영체제, 장치 드라이버, 컴파일러, 런타임 시스템, 시스템 유틸리티
실행 위치커널 공간, 사용자 공간, 가상 머신 및 펌웨어 환경
대응 개념응용 소프트웨어
관련 분야시스템 프로그래밍, 운영체제, 컴파일러, 컴퓨터 구조

시스템 소프트웨어는 컴퓨터의 하드웨어 자원을 제어하고 다른 소프트웨어가 실행될 수 있는 기반 환경을 제공하는 소프트웨어이다. 운영체제커널, 장치 드라이버, 컴파일러, 링커, 런타임 시스템, 시스템 라이브러리와 각종 관리 도구가 대표적인 시스템 소프트웨어에 해당한다.

시스템 소프트웨어는 CPU, 메모리, 저장 장치, 네트워크 장치와 주변 기기 같은 물리적 자원을 관리하고, 응용 프로그램이 하드웨어의 세부 동작을 직접 처리하지 않아도 되도록 공통된 인터페이스와 실행 서비스를 제공한다. 운영체제는 프로세서 시간과 메모리, 입출력 장치와 파일 저장 공간을 배분하며, 장치 드라이버는 운영체제와 특정 하드웨어 사이의 제어 인터페이스를 구현한다.[1][2]

넓은 의미의 시스템 소프트웨어에는 프로그램을 번역하고 적재하며 실행하는 도구도 포함된다. 소스 코드를 기계어 또는 중간 표현으로 변환하는 컴파일러와 어셈블러, 목적 파일을 실행 파일로 결합하는 링커, 실행 파일을 메모리에 배치하는 로더, 언어별 실행 서비스를 제공하는 런타임 시스템은 응용 프로그램의 개발과 실행을 연결한다. 시스템 설정, 파일 관리, 진단, 보안, 백업과 성능 분석을 담당하는 시스템 유틸리티도 운영 환경을 유지하는 구성 요소로 분류된다.

시스템 소프트웨어와 응용 소프트웨어의 구분은 역할을 기준으로 이루어진다. 응용 소프트웨어가 문서 작성, 통신, 설계, 미디어 처리와 같은 사용자의 목적을 직접 수행한다면, 시스템 소프트웨어는 이러한 응용 프로그램이 사용할 자원과 추상화, 실행 규칙을 제공한다. 다만 데이터베이스 관리 시스템, 웹 브라우저 엔진, 가상 머신, 미들웨어와 같은 대규모 소프트웨어는 사용 방식과 배치 구조에 따라 두 범주의 성격을 함께 가질 수 있다.

시스템 소프트웨어가 반드시 커널 공간에서 실행되는 것은 아니다. 현대 운영체제에서는 많은 시스템 서비스와 장치 제어 기능이 사용자 공간 프로세스로 구현될 수 있으며, 커널은 시스템 호출과 메시지 전달, 장치 파일 등의 인터페이스를 통해 이들과 통신한다. 일부 장치 드라이버를 사용자 공간에 배치하면 일반 개발 도구와 라이브러리를 활용하고, 오류가 커널 전체로 확산되는 범위를 줄이며, 커널과 독립적으로 구성 요소를 갱신할 수 있다.[3]

펌웨어는 하드웨어 내부의 프로세서나 제어 장치에서 실행되며 장치의 초기화와 저수준 동작을 담당한다. 따라서 시스템 소프트웨어의 한 종류로 포함되기도 하고, 하드웨어와 일반 소프트웨어 사이에 위치하는 별도의 계층으로 구분되기도 한다. 현대 장치는 펌웨어와 운영체제 드라이버, 사용자 공간 관리 도구가 함께 장치 기능을 구성하는 경우가 많아 이들 사이의 경계가 고정되어 있지 않다.[4]

역사

초기 컴퓨터와 수동 운용

언어 처리 프로그램의 등장

운영체제의 형성

범용 컴퓨터와 시스템 소프트웨어의 확대

개인용 컴퓨터와 네트워크 환경

현대의 분산·가상화 환경

분류

운영체제와 커널

장치 드라이버

언어 처리 시스템

런타임 시스템과 가상 머신

시스템 라이브러리

시스템 유틸리티

부트로더와 초기화 시스템

펌웨어와 경계 영역

계층과 실행 환경

하드웨어 추상화

커널 공간과 사용자 공간

시스템 호출과 프로그래밍 인터페이스

프로세스와 서비스

라이브러리와 런타임

가상 머신과 에뮬레이션

운영체제

커널

프로세스와 스레드 관리

메모리 관리

파일 시스템

입출력 시스템

네트워크와 보안

장치와 하드웨어 제어

장치 드라이버

버스와 장치 열거

인터럽트와 직접 메모리 접근

전원 관리

사용자 공간 드라이버

펌웨어와 마이크로코드

프로그램의 변환과 실행

어셈블러와 컴파일러

인터프리터

링커

로더

실행 파일 형식

런타임 시스템

동적 링크와 프로그램 적재

시스템 관리 도구

명령줄 셸

파일과 저장 장치 관리

사용자와 권한 관리

서비스 관리

진단과 성능 분석

백업과 복구

패키지 관리와 업데이트

시스템 소프트웨어의 설계

자원 추상화

성능과 예측 가능성

동시성과 동기화

오류 처리와 복구

보안과 권한 분리

이식성과 하드웨어 종속성

호환성과 안정성

배포와 유지 관리

시스템 구성

설치와 부팅

업데이트와 패치

장기 지원

관측성과 디버깅

복구 환경

가상화와 분산 환경

하이퍼바이저

가상 머신

컨테이너 런타임

클러스터 관리

분산 시스템 기반 소프트웨어

클라우드 인프라

임베디드 시스템과 실시간 환경

임베디드 운영체제

실시간 운영체제

제한된 자원 환경

장치 전용 런타임

안전 필수 시스템

개발

시스템 프로그래밍 언어

빌드 시스템과 도구 체인

교차 컴파일

디버거와 추적 도구

테스트와 검증

성능 최적화

응용 소프트웨어와의 관계

실행 환경 제공

시스템 API와 ABI

라이브러리와 프레임워크

미들웨어

경계가 모호한 소프트웨어

활용 분야

개인용 컴퓨터

서버와 데이터 센터

모바일 장치

임베디드 시스템

네트워크 장비

산업 및 자동차 시스템

클라우드 컴퓨팅

고성능 컴퓨팅

장점과 한계

관련 문서

  1. IBM: What is an operating system?
  2. IBM AIX documentation: Responsibilities of the Device Driver
  3. Linux kernel documentation: Userspace block device driver
  4. Linux kernel documentation: fwctl subsystem