OSTEP에서 본문에 해당하는 챕터 제목이 “Limited Directed Execution: 제한된 직접 실행 원리” 입니다.
책에서는 인터럽트의 한 종류인 trap에 대해서만 다루지만, 인터럽트에 대해 포괄적으로 알기 위해 관련내용도 정리했습니다.
먼저 Limited가 없는 직접 실행이라는 부분에 대해 알아보자면 , 운영체제가 프로그램의 실행에 관여하지 않고 CPU는 사용자 코드에서 진입점을 찾아 직접 실행함을 의미합니다. 이 경우 몇가지 문제가 발생합니다.
프로세서(CPU)가 프로세스로 자원을 나눠줄 때 고려해야할 부분으로 크게 세 가지 중요한 요소가 있습니다.
요약하자면, 다른 장치에 비해 빠른 CPU의 성능을 최대한 안전하게 활용하기 위해 운영체제가 CPU의 제어권을 갖는 개념을 Limited Directed Execution: 제한된 직접 실행이라고 합니다.
쉽게 말하자면
운영체제가 인터럽트를 통해 하드웨어 리소스에 대한 제어권을 가져올 수 있어야 “성능, 자원보호, 제어권 주도” 등의 이점을 가져올 수 있다는 이야기입니다.
다른 장치에 비해 빠른 CPU의 성능을 최대한 안전하게 활용하기 위해 운영체제가 CPU의 제어권을 갖는 개념을 Limited Directed Execution: 제한된 직접 실행이라고 합니다.
Hardware Inturrupt : 외부 기기 또는 사용자, 입/출력에 의한 불특정 시간에 발생해 Asynchronous Interrupt라고도 불립니다.
Software Interrupt (or Trap, Synchronous Interrupt): SW의 예외 핸들링 또는 제어권을 얻기 위해 발생시키는 인터럽트입니다.
프로세스가 CPU의 제어권을 갖고있는 상태에서 제어권을 얻기 위해선 인터럽트를 통해 제어권을 뺏어와야 합니다.
인터럽트 발생: MCU(또는 PIC)라는 장비에 IDT(인터럽트 종류, ISR위치, 우선순위)를 전달하면서 시작됩니다.
→ (하드웨어)프로세스 중단
→ (운영체제)인터럽트 처리(Interrupt Handling)
인터럽트 서비스 루틴 실행 : 예를들어 마우스로 음악 프로그램을 더블클릭 해 인터럽트가 발생했다면, 해당 프로그램을 프로세스 레디 큐에 등록하는 작업을 한다.
→ (하드웨어)상태 복구: 커널 스택에 저장된 CPU레지스터들을 불러오고, 복구한 PC레지스터로 이동해 원래 프로세스 실행
→ (프로그램): 복구한 PC레지스터부터 다시 실행하므로, 기존 실행시점에서 다시 동작합니다.
만약 Timer Interrupt가 발생하고 그로인해 ISR에서 스케쥴러로 분기 → Process A의 버스트 시간이 끝나 Ready상태로 바꾸는 상황을 가정해보겠습니다.
(아직 스케줄러에 대해 배우지 않았지만 참고로, 스케쥴러 알고리즘은 매 타임 퀀텀마다, I/O로 인한 블록마다 동작하도록 ISR에 정의되어있습니다. 새로운 프로세스가 등록될때에도 비교를 위해 동작합니다. )
인터럽트가 동작하는 구조는 같지만, 내부에서 동작하는 스케쥴링 처리로 인해 ISR이후 Process(j)로 실행됩니다.
(하드웨어)
(운영체제의 Timer Interrupt에 대한 ISR 동작)
(하드웨어)
(프로그램)
Process(j)를 실행
전원 이상(Power fail) > 기계 착오(Machine Check) > 외부 신호(External) > 입출력(I/O) > 명령어 잘못 > 프로그램 검사(Program Check) > SVC(SuperVisor Call)
만약 우선순위가 낮은 인터럽트를 수행하는 중에 우선순위가 높은 인터럽트가 발생하면 우선적으로 처리한 뒤 다시 낮은 순위의 ISR로 돌아가 처리합니다. (재귀적 우선순위 처리)
Interrupt, Trap, Exception의 차이를 시스템 관점에서
OSTEP: Operating Systems: Three Easy Pieces
[HPC Lab. KOREATECH, OS Lecture CH.4 Process Management](https://www.youtube.com/watch?v=jZuTw2tRT7w )
(sub reference)
https://raisonde.tistory.com/entry/인터럽트Interrupt의-개념과-종류
https://justzino.tistory.com/4
https://wiki.osdev.org/Interrupt_Service_Routine
커널의 메모리구조 - https://kariskan.tistory.com/52