운영체제란?
운영체제는 컴퓨터 하드웨어를 관리하는 소프트웨어입니다.
운영체제를 사용하는 이유는 하드웨어와 응용 프로그램 사이의 중재자 역할을 해서 사용자가 응용 프로그램을 사용할 수 있도록 도와줍니다.
운영체제의 역할
운영체제의 역할은 다음과 같습니다.
- 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리합니다.
- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공합니다.
- 사용자와 시스템간의 편리한 인터페이스를 제공합니다.
- 시스템의 각종 하드웨어와 네트워크를 관리, 제어합니다.
- 데이터를 관리하고, 데이터 및 자원의 공유 기능을 제공합니다.
- 시스템의 오류를 검사하고 복구합니다.
- 자원 보호 기능을 제공합니다.
- 입 출력에 대한 보조 기능을 제공합니다.
- 가상 계산기 능력을 제공합니다.
운영체제의 성능 평가 기준
운영체제의 성능을 평가할때 처리능력, 반환시간, 사용가능도, 신뢰도라는 기준으로 운영체제의 성능을 평가하게 됩니다.
- 처리능력 : 일정 시간 내에 시스템이 처리하는 일의 양
- 반환시간 : 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
- 사용 가능도 : 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도
- 신뢰도 : 시스템이 주어진 문제를 정확하게 해결하는 정도
커널이란?
소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 합니다.
마찬가지로 운영체제도 소프트웨어로서 운영체제를 바로 사용하기 위해서는 전원이 켜짐과 동시에 메모리에 올라가야 합니다. 하지만 운영체제 처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것입니다.
따라서 운영체제의 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 됩니다.
이때 메모리에 상주하는 운영체제의 부분을 커널이라고 합니다.
Interrupt란?
프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고 발생된 상황에 대한 우선 처리의 필요성을 CPU에 알리는 것을 의미합니다.
지금 수행 중인 일보다 더 중요한일이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야합니다.
- 외부 인터럽트
- 입출력장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
- 내부 인터럽트
- Trap이라고 부르며 잘못된 명령이나 데이터를 발생합니다. (0으로 나누기가 발생, 오버플로우, 명령어를 잘못 사용한 경우)
- 소프트웨어 인터럽트
- 프로그램 처리 중 명령의 요청에 의해 발생한 것 (SVC 인터럽트)
- 사용자가 프로그램을 실행시킬 때 발생
- 소프트웨어 이용 중에 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 동작이 수행됩니다.
인터럽트 발생 처리 과정
주 프로그램이 실행되다가 인터럽트 발생했을 경우 다음과 같이 동작합니다.
1. 현재 수행 중인 프로그램을 멈추고 상태 레지스터와 PC 등을 스택에 잠시 저장한 뒤에 인터럽트 서비스 루틴으로 갑니다.
2. 만약 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해야합니다.
이를 폴링이라고하며 폴링을 하는 시간에는 원래 하던 일에 집중할 수가 없게 되어 많은 기능을 제대로 수행하지 못하는 단점이 있었습니다.
정리하면 컨트롤러가 입력을 받아들이는 방법에는 두가지가 있습니다.
- 폴링 방식
- 사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
- 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행 합니다. (하드웨어에 비해 속도 느림)
- 인터럽트 방식
- MCU 자체가 하드웨어적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식
- Daisy Chain
- 병렬 우선순위 부여
- MCU 자체가 하드웨어적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식
인터럽트 방식은 하드웨어로 지원을 받아야 하는 제약이 있지만, 폴링에 비해 신속하게 대응하는 것이 가능합니다.
따라서 실시간 대응이 필요할 때는 필수적인 기능입니다.
즉, 인터럽트는 발생시기를 예측하기 힘든 경우에 컨트롤러가 가장 빠르게 대응할 수 있는 방법입니다.