[OS] 인터럽트 (Interrupt)
by 구설구설인터럽는 특정 이벤트 발생 시 현재 작업을 잠시 중단하고 해당 이벤트를 처리하도록 제어를 넘기는 메커니즘이다.
타이머 인터럽트
운영체제는 부팅과 함께 타이머 하드웨어를 초기화하고 작동을 시작한다.
타이머는 운영체제가 설정한 시간 간격마다 주기적으로 인터럽트를 발생시킨다.
주기적인 타이머 인터럽트를 통해 커널은 제어권을 주기적으로 가져오며,
이를 통해 프로세스가 무한 루프에 빠졌을 경우 커널이 해당 프로세스를 종료할 수 있도록 한다.
인터럽트 처리
- CPU 코어에서 프로세스 실행 중에 인터럽트 발생
- 현재 실행 중인 프로세스가 중단된다.
- 사용자 프로세스의 컨텍스트 저장
- 중단된 프로세스의 ~IP(Instruction Pointer)~, ~SP(Stack Pointer)~ 등 CPU 레지스터 값을 저장한다
- 이 컨텍스트는 인터럽트 스택이라는 고정된 위치에 저장된다.
- 인터럽트 핸들러로 제어 전달
- 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)이라고도 불리는 핸들러로 제어가 이동한다.
- 커널은 부팅 과정에서 ISR을 설정한다.
- 인터럽트 핸들러 실행
- 커널은 적절한 인터럽트 핸들러를 실행하여 인터럽트를 처리한다.
- 저장된 컨텍스트 복원
- 인터럽트 스택에서 저장된 값을 복원하여 중단된 작업을 재개한다.
인터럽트 스택
인터럽트 스택은 인터럽트 발생 시 커널 모드로 전환해 인터럽트 처리 루틴을 수행하기 위해 사용하는 스택이다.
- 각 프로세스 또는 스레드의 커널 스택 내에 포함되며, CPU 코어마다 독립적으로 존재한다.
- 인터럽트 발생 시 CPU는 현재 레지스터 값, 플래그, 프로그램 카운터(PC) 등을 인터럽트 스택에 저장한다.
- 이를 통해 인터럽트 처리 후 원래 작업으로 복귀할 수 있도록 한다.
인터럽트 마스킹
인터럽트 마스킹은 특정 시점에서 인터럽트를 임시로 비활성화하여, 현재 수행 중인 작업이 방해받지 않도록 하는 메커니즘이다.
인터럽트 핸들러는 인터럽트가 비활성화된 상태에서 실행된다.
인터럽트 처리가 완료되면, 다시 인터럽트가 활성화된다.
유저 모드에서 인터럽트를 끄는 것이 허용된다면, 타이머 인터럽트로 인해 커널로 제어권이 돌아와야 할 시점에 돌아오지 않을 가능성이 있다.
'CS > OS' 카테고리의 다른 글
[OS] CPU 스케줄링 (0) | 2024.12.15 |
---|---|
[OS] 시스템 콜 (System Call) (1) | 2024.12.14 |
[OS] 듀얼 모드 (Dual Mode, 이중 모드) (0) | 2024.12.12 |
[OS] 프로세스 (0) | 2024.12.11 |
[OS] 운영체제란? (0) | 2024.12.11 |
블로그의 정보
공부중임
구설구설