본문 바로가기
IT 및 프로그래밍

운영체제의 서비스에 대해

by 데이터 석사 2024. 10. 20.

앞서 운영체제의 기능을 알아보았다. 이 글에서는 운영체제가 어떤 서비스를 주어 이 기능을 실행하는지 알아본다. 운영체제별로 차이는 있겠지만, 일반적으로는 부팅 서비스, 사용자 서비스, 시스템 서비스, 시스템 호출 등 네 가지로 제공한다.

부팅 서비스

운영체제를 메인 메모리에 적재하는 과정을 부팅 혹은 부트스트래핑이라고 한다. 부트 로더는 부트스트랩 로더를 줄인 말로 하드디스크와 같은 보조기억장치에 저장된 운영체제를 메인 메모리에 탑재하는 ROM에 고정한 작은 프로그램이다.

 

초기화의 목적으로는 시스템 장치 초기화, 시간 설정, 명령 해석기 적재와 준비 등이 있다. 이 중 시스템 장치의 초기화는 디렉터리, 파일 등을 확인하고, 시스템 버퍼와 인터럽트 벡터를 초기화하며, 운영체제의 루틴 거의 메모리 하위 주소에 적재하도록 설정하는 것이다. 초기 운영체제는 하드웨어를 초기화하지 않고 컴퓨터를 동작시켰다. 그러나 메모리의 효율적인 활용 등에 관심이 생기면서 전체적인 초기화뿐만 아니라, 임시 하드웨어 결함으로 활동 중인 작업을 잃지 않도록 복구하거나 회복하는 수단과 비정상적인 일을 처리하는 부분적인 초기화가 포함되었다.

사용자 서비스

운영체제는 프로그래머가 프로그래밍 작업을 간단하게 실행할 수 있도록 다음 사용자 서비스를 제공한다.

사용자 인터페이스 제공

운영체제의 기능 중 상당한 수의 컴퓨터 화면에는 등장하지 않는다. 사용자 인터페이스는 사용자와 컴퓨터 간의 상호작용이 생겨나는 공간으로 CLI, 메뉴 GUI 등 형태로 구현할 수 있으며, 사용자가 보는 것은 사용자 인터페이스뿐이다.

 

CLI는 사용자가 키보드 등으로 명령어를 넣어 시스템에서 반응을 받은 후, 또 다른 명령어를 입력하여 시스템을 작동하게 하는 텍스트 전용 인터페이스이다. 사용자가 프롬프트에서 명령어를 작성하여 넣어 컴퓨터와 상호작용할 수 있고, 명령어를 입력한 후에는 반드시 엔터(확인 키)를 눌러야 한다.

 

메뉴 인터페이스는 메뉴 등을 이용하여 시스템과 상호작용한다. iPad나 휴대폰, 현금 자동 인출기(ATM) 등이 대표적인 예시인데, 사용이 매우 간편하고 배구거나 기억해야 할 명령이 없다.

 

GUI는 윈도우 환경에서 사용자에게 정보와 작업을 표현하는 텍스트, 레이블이나 텍스트 탐색과 함께 그래픽 아이콘과 시각적 표시기, 버튼이나 스크롤바와 같은 위젯 그래픽 통제 요소를 이용하여 컴퓨터와 상호작용할 수 있는 가장 일반적인 유형이다. 마이크로소프트의 윈도우나 애플의 맥 OS에 이용하는 방법이 대표적인 예시이다.

프로그램 실행

운영체제는 프로그램을 실행하려고 메모리 할당이나 해제, 프로세서 스케줄링과 같은 중요 작업을 수행한다. 프로그램을 실행하려면 먼저 메모리에 적재해야 하고, 프로세서 시간을 나누어줘야 한다.

입출력 동작 수행

운영체제는 입출력 동작을 직접 실행할 수 없는 사용자 프로그램의 입출력 동작 수단을 제공한다. 수행 중인 프로그램은 입력이 필수이며, 사용자가 제공하는 입력을 처리한 후에는 출력을 만들어야 한다.

파일 시스템 동작

운영체제는 파일 시스템 조작 서비스를 제공하여 사용자가 이러한 파일 연관 작업을 간단하게 할 수 있도록 한다. 사용자는 디스크에서 파일을 열고, 파일을 저장하며, 파일을 제거하는 등 다양하게 파일을 관리한다. 디스크에서 파일을 저장하면 특정 블록에 할당하여 저장하고, 이 파일을 제거하면 파일 이름이 삭제되면서 할당한 블록이 자유롭게 된다.

통신(네트워크)

운영체제는 다중 작업 환경에서 공유 메모리를 사용하거나 메시지 전달로 다양한 유형의 프로세스와 통신을 보조한다. 프로세스가 다른 프로세스와 정보를 교환하는 수단은 대략 두 가지이다. 첫 번째는 네트워크로 연결된 컴퓨터 시스템에서 실행하는 프로세스 간의 정보 교환이고, 두 번째는 동일한 컴퓨터에서 실행하는 프로세스 간의 정보 교환이다.

오류 탐지

입출력 장치에 연관된 오류와 메모리 오버플로, 하드디스크의 불량 섹터 검출, 부적당한 메모리 접근과 데이터 손실 등이 있으며, 운영체제는 가능한 모든 하드웨어와 소프트웨어 수준에서 오류를 탐지하고, 시스템을 모니터링하여 제어함으로써 하드웨어 문제를 예방한다. 그리고 운영체제는 다음 오류 유형을 감지하고 유형별로 적절히 처리한다.

 

- 입출력장치 오류는 테이프의 패리티 오류, 카드 판독기의 카드 체중, 프린터의 종이 부족

- 사용자 프로그램 오류는 연산의 오버플로, 부적당한 기억장치 위치 접근, 프로세서 시간을 너무 많이 이용

- 프로세서, 메모리 하드웨어와 연관된 오류는 기억장치 메모리 오류, 정전

시스템 서비스

시스템 서비스는 사용자가 아닌 시스템 자체의 효과적인 작동을 보장하는 기능이다. 여러 사용자가 이용하는 시스템에서는 컴퓨터 자원을 공유하여 시스템 자체의 효율성을 높일 수 있다.

자원 할당

프로세서 사이클, 메인 메모리, 파일 저장 장치 등은 특수한 할당 코드를 가지고 있지만 입출력장치 등은 더 일반적인 요구와 해제 코드를 가질 수 있다. 운영체제는 다수의 사용자나 일을 동시에 수행할 때는 운영체제가 자원을 각각 할당하도록 조정한다.

계정

운영체제는 각 사용자가 어떤 컴퓨터 자원을 얼마나 많이 이용하는지 정보를 저장하고 출처를 확인한다. 이 정보는 사용자 서비스를 개선하려고 시스템을 재구성하는 연구자에게는 귀하고 중요한 도구가 될 수 있다.

보호와 보안

운영체제는 다중 사용자 컴퓨터 시스템에 저장된 정보 소유자의 이용을 통제할 수도 있다. 서로 연관이 없는 여러 일을 동시에 실행할 때는 한 작업이 다른 작업이나 운영체제를 방해하지 못하게 해야 한다. 곧, 사용자가 다수인 컴퓨터 시스템에서 여러 프로세스의 같은 순간의 실행을 허가하려면 각 프로세스를 서로의 활동에서 지켜야 한다. 보안은 잘못된 접근 시도에서 외부 입출력장치를 지키며, 외부에 사용자 인증을 요청하는 것이다. 보호는 시스템 호출을 하려고 전파한 모든 매개변수의 타당한지를 검사하고 시스템 자원에 모든 사용자 접근을 조정하도록 보장하는 것이다. 

 

시스템 호출

시스템 호출은 실행 중인 프로그램과 운영체제 간의 인터페이스로, API라고도 한다. 시스템 호출에는 핵심 커널 서비스와 통신 새로운 프로세스의 생성과 수행, 하드웨어 연관 서비스 등이 있다. 사용자 프로그램은 시스템 호출을 하여 운영체제의 기능을 제공받는다. 곧, 응용 프로그램이 사용자 레벨에서 보조하지 않는 기능을 운영체제의 루틴을 호출하여 제공받는 수단이다. 

 

시스템과 상호작용하는 동작은 대다수 사용자 수준 프로세서에서는 이용할 수 없으나, 시스템 호출을 하여 운영체제 서비스를 요구할 수 있다. 예시를 들면, 입출력 프로세스는 특정 영역에 읽거나 작성하는 시스템 호출을 요구하고, 이 요구를 운영체제가 처리한다.

 

시스템 호출 방법에는 두 가지가 있다. 첫 번째는 시스템에서 명령 해석기를 이용하여 대화 형태로 호출하는 수단이다. 두 번째는 프로그램에서 명령이나 서브루틴의 호출 형태로 호출하는 방법이다. 일반적으로 어셈블리어로 주지만, 고급 언어로 작성한 프로그램에서 직접 실행할 수도 있다. 이때는 미리 정의된 기능이나 서브루틴 호출과 비슷하다.

 

운영체제가 제공하는 보통 시스템 호출에는 프로세스 제어, 파일 조작, 장치 관리, 정보 유지 등이 있다.

결론 및 요약

운영체제는 부팅, 사용자, 시스템, 시스템 호출 등 네 가지 서비스를 제공한다. 부팅 서비스는 운영체제를 메인 메모리에 적재하는 과정이다. 사용자 서비스는 사용자 인터페이스 제공, 프로그램 실행, 입출력 동작 수행, 파일 시스템 동작, 통신(네트워크), 오류 탐지 등을 제공한다. 시스템 서비스는 자원 할당, 계정 보호와 보안 등을 제공한다. 시스템 호출은 실행 중인 프로그램과 운영체제 간의 인터페이스로, 사용자 프로그램은 시스템 호출을 하여 운영체제의 기능을 제공받는다.