시스템 소프트웨어
시스템 소프트웨어는 컴퓨터의 하드웨어 자원을 제어하고 다른 소프트웨어가 실행될 수 있는 기반 환경을 제공하는 소프트웨어이다. 운영체제와 커널, 장치 드라이버, 컴파일러, 링커, 런타임 시스템, 시스템 라이브러리와 각종 관리 도구가 대표적인 시스템 소프트웨어에 해당한다.
| 분류 | 소프트웨어 |
|---|---|
| 주요 역할 | 하드웨어 제어, 자원 관리, 프로그램 실행 환경 제공 |
| 주요 구성 | 운영체제, 장치 드라이버, 컴파일러, 런타임 시스템, 시스템 유틸리티 |
| 실행 위치 | 커널 공간, 사용자 공간, 가상 머신 및 펌웨어 환경 |
| 대응 개념 | 응용 소프트웨어 |
| 관련 분야 | 시스템 프로그래밍, 운영체제, 컴파일러, 컴퓨터 구조 |
시스템 소프트웨어는 컴퓨터의 하드웨어 자원을 제어하고 다른 소프트웨어가 실행될 수 있는 기반 환경을 제공하는 소프트웨어이다. 운영체제와 커널, 장치 드라이버, 컴파일러, 링커, 런타임 시스템, 시스템 라이브러리와 각종 관리 도구가 대표적인 시스템 소프트웨어에 해당한다.
시스템 소프트웨어는 CPU, 메모리, 저장 장치, 네트워크 장치와 주변 기기 같은 물리적 자원을 관리하고, 응용 프로그램이 하드웨어의 세부 동작을 직접 처리하지 않아도 되도록 공통된 인터페이스와 실행 서비스를 제공한다. 운영체제는 프로세서 시간과 메모리, 입출력 장치와 파일 저장 공간을 배분하며, 장치 드라이버는 운영체제와 특정 하드웨어 사이의 제어 인터페이스를 구현한다.[1][2]
넓은 의미의 시스템 소프트웨어에는 프로그램을 번역하고 적재하며 실행하는 도구도 포함된다. 소스 코드를 기계어 또는 중간 표현으로 변환하는 컴파일러와 어셈블러, 목적 파일을 실행 파일로 결합하는 링커, 실행 파일을 메모리에 배치하는 로더, 언어별 실행 서비스를 제공하는 런타임 시스템은 응용 프로그램의 개발과 실행을 연결한다. 시스템 설정, 파일 관리, 진단, 보안, 백업과 성능 분석을 담당하는 시스템 유틸리티도 운영 환경을 유지하는 구성 요소로 분류된다.
시스템 소프트웨어와 응용 소프트웨어의 구분은 역할을 기준으로 이루어진다. 응용 소프트웨어가 문서 작성, 통신, 설계, 미디어 처리와 같은 사용자의 목적을 직접 수행한다면, 시스템 소프트웨어는 이러한 응용 프로그램이 사용할 자원과 추상화, 실행 규칙을 제공한다. 다만 데이터베이스 관리 시스템, 웹 브라우저 엔진, 가상 머신, 미들웨어와 같은 대규모 소프트웨어는 사용 방식과 배치 구조에 따라 두 범주의 성격을 함께 가질 수 있다.
시스템 소프트웨어가 반드시 커널 공간에서 실행되는 것은 아니다. 현대 운영체제에서는 많은 시스템 서비스와 장치 제어 기능이 사용자 공간 프로세스로 구현될 수 있으며, 커널은 시스템 호출과 메시지 전달, 장치 파일 등의 인터페이스를 통해 이들과 통신한다. 일부 장치 드라이버를 사용자 공간에 배치하면 일반 개발 도구와 라이브러리를 활용하고, 오류가 커널 전체로 확산되는 범위를 줄이며, 커널과 독립적으로 구성 요소를 갱신할 수 있다.[3]
펌웨어는 하드웨어 내부의 프로세서나 제어 장치에서 실행되며 장치의 초기화와 저수준 동작을 담당한다. 따라서 시스템 소프트웨어의 한 종류로 포함되기도 하고, 하드웨어와 일반 소프트웨어 사이에 위치하는 별도의 계층으로 구분되기도 한다. 현대 장치는 펌웨어와 운영체제 드라이버, 사용자 공간 관리 도구가 함께 장치 기능을 구성하는 경우가 많아 이들 사이의 경계가 고정되어 있지 않다.[4]