사용자와 하드웨어 사이에 중간 매개체로 응용 프로그램 실행을 제어하고, 자원 할당/관리하며 입출력 제어와 데이터 관리 같은 서비스를 제공하는 소프트웨어다.
작은 범위의 운영체제는 커널이라고 부를 수 있는데, 커널은 운영체제의 핵심으로 메모리에 상주하는 부분을 말한다. 넓은 범위로는 커널 외에 각종 주변 시스템과 유틸리티를 포함해 말할 수 있다.
운영체제의 목적은 컴퓨터 시스템의 자원을 효율적으로 관리하기 위함이다. 이때 자원은 하드웨어 자원뿐 아니라 소프트웨어 자원까지 포함된다. 또한, CLI·GUI 등 인터페이스 제공을 통해 사용자가 컴퓨터 시스템을 편리하게 사용하기 위한 목적도 있다.
운영체제는 작업 여부, 사용자 수 그리고 처리 방식에 따라 분류할 수 있다.
용어 정리
- Multi Tasking: 하나의 CPU가 동시에 여러 작업을 수행
- Multi Programming: 여러 프로그램이 하나의 메모리에 올라가 있음, 하나의 메모리에 여러 프로그램이 올라가면 동시에 여러 작업을 수행할 수 있는데 이는 Multi Tasking과 같다. 즉, Multi Tasking과 Multi Programming은 같은 의미지만 Multi Programming은 메모리 부분을 조금 더 강조한 용어.
- Time Sharing: 일정시간 단위마다 돌아가면서 여러 작업을 처리하기에 Multi Tasking을 구현한 대표적인 방식.
- Multi Process: 여러 CPU 코어로 나누어져 동시에 여러 작업 수행
운영체제는 여러 기능을 수행한다.
운영체제는 여러 서비스를 제공한다.
부팅 서비스: 운영체제를 메인 메모리에 적재하는 과정을 부팅(부트스트래핑)이라고 하며, 이 과정은 ROM에 고정된 부스트트랩 로더가 부트로더를 로더해 실행된다. 부팅 서비스를 통해 시스템 장치 초기화 및 명령 해석기 적재와 준비를 위해 초기화 등 운영체제의 예기치 못한 오류를 줄이기 위해 진행한다.

사용자 서비스: 프로그래머가 보다 편리하게 프로그래밍할 수 있도록 제공하는 서비스, 사용자 인터페이스(CLI, GUI, Menu 등)를 제공하며 프로그램 실행, 입출력 동작 수행, 파일 시스템 조작, 프로세스 간 통신 등 여러 편리한 기능을 제공.
시스템 서비스: 시스템 자체의 효율적인 동작을 보장하는 기능으로 자원 할당, 계정, 보호와 보안이 있다.
시스템 호출(시스템 콜): 사용자 프로그램이 운영체제의 커널 기능을 요청하기 위해 사용하는 인터페이스
사용자 프로그램이 운영체제의 커널 기능을 요청하기 위해 사용하는 인터페이스.
응용 프로그램이 시스템 콜 인터페이스를 통해 커널 기능을 요청하고, 커널이 해당 루틴을 실행해 결과를 제공한다. 운영체제의 루틴 호출 방식은 프로그램에서 명령어 또는 서브루틴의 호출형태와 시스템에서 명령 해석기를 사용해 대화 형태로 호출하는 방식이 존재한다.
A파일 내용을 새로운 B파일로 복사하는 대표적인 시스템 콜 예시가 있다. 먼저 두 파일의 이름을 알기위해서 키보드 또는 마우스 기반 시스템 등 여러 방법을 통해 수 많은 I/O 시스템 콜이 일어난다. 두 파일의 이름을 획득한 후에는 입력 파일을 열고 출력 파일을 생성 및 열어야한다. 이 과정 속에서도 수 많은 별도의 시스템 콜이 일어난다.
이를 운영체제 관점에서 설명하면 먼저, 응용 프로그램이 read()와 같은 시스템 콜을 호출한다. 이 함수 내부에는 시스템 콜 고유 번호를 인자를 포함하고 인터럽트를 요청한다. 인터럽트 요청이 발생하면 CPU는 사용자(유저) 모드에서 커널 모드로 전환되어 커널 내부의 시스템 콜 핸들러로 진입한다. 시스템 콜 핸들러에서 인자로 전달된 시스템 콜 고유 번호를 갖고 Interrupt Vector 테이블에서 매핑된 호출할 ISR(Interrupt Service Routin)의 주소 값을 획득한다. 이후, ISR에서 실질적인 인터럽트 요청을 수행하고 발생한 결과 값을 사용자 모드로 전환하면서 함께 전달한다.
모든 시스템 콜은 고유한 번호를 갖고 있다. 그래서 응용 프로그램은 시스템 콜 호출 시 C 등으로 이루어진 표준 라이브러리를 통해 시스템 콜 고유 번호를 인자로 전달한다. 이를 갖고 커널에서 해당하는 ISR을 찾아 작업을 수행한다.
그래서 각 운영체제는 이를 지원하기 위해서 시스템 콜 종류와 사용법에 대한 API 문서를 제공한다.
운영체제는 사용자 모드와 커널 모드로 이루어진 Dual Mode 방식을 채택했다. 이는 시스템의 안정성과 보안을 보장하기 위한 조치로써, 만약 응용 프로그램이 직접 하드웨어 자원에 접근하여 작업을 수행하던 중 오류가 발생하면 시스템 전체의 붕괴로 이어지거나 하나의 응용 프로그램이 모든 하드웨어 자원을 점유하는 등의 문제가 발생할 수 있기 때문이다.
일반 애플리케이션 프로그램이 실행되는 모드로 직접 하드웨어 자원에 접근하거나 제어할 수 없다. 그래서 시스템 콜을 이용해 커널에 요청을 보내는 간접적인 방법을 통해 자원에 접근한다.
운영체제의 핵심 부분인 커널이 실행되는 모드로 모든 시스템 자원에 직접 접근하거나, 특히 중요한 하드웨워 제어나 메모리 관리 등 여러 작업을 수행한다.
학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.