인터럽트 메커니즘
- 인터럽트(Interrupt):
OS에 현재 실행 중인 프로세스를 중단하고 인터럽트 핸들러를 실행하도록 알리는 이벤트.
시스템의 효율성을 높이고 적시에 서비스를 제공하기 위해 사용됩니다.
I/O 장치가 지속적으로 CPU를 폴링하는 대신, 필요할 때만 신호를 보낼 수 있게 합니다.
시스템 타이머 인터럽트와 같은 특정 간격으로 발생하는 이벤트를 적시에 처리할 수 있게 합니다.
인터럽트를 처리하기 위해 CPU는 커널 모드로 전환되며, 이 모드에서는 사용자 모드에서 접근할 수 없는 권한 있는 명령어와 메모리에 접근할 수 있습니다. - 인터럽트의 종류:
- 프로그램 인터럽트: 프로그램 실행 중에 발생하는 예외적인 상황
- 타이머 인터럽트: 일정 시간마다 발생하는 인터럽트
- 입출력 인터럽트: I/O 장치와 관련된 이벤트
- 하드웨어 실패 인터럽트: 하드웨어 고장 등의 비정상적인 이벤트
인터럽트를 포함한 명령 사이클
프로그래머블 인터럽트 컨트롤러 (PIC)
- I/O 장치는 고유한 또는 공유된 인터럽트 요청(IRQ) 라인을 가집니다.
- IRQ는 특수 하드웨어에 의해 인터럽트 벡터에 매핑되어 CPU로 전달됩니다.
- PIC는 장치의 요청을 IRQ 번호로 변환하고 이를 CPU에 전달합니다.
- CPU는 ACK 신호를 통해 인터럽트 처리를 완료했다고 응답합니다.
- 인터럽트 마스킹:
- 특정 인터럽트를 비활성화(마스크)하여 시스템에서 처리되지 않도록 할 수 있습니다.
- 각 인터럽트에는 우선순위가 있으며, 높은 우선순위의 인터럽트가 낮은 우선순위 인터럽트를 처리할 수 있도록 허용됩니다.
- 대규모 장치 관리:
- 여러 장치에서 발생하는 인터럽트를 효율적으로 처리하기 위해 PIC는 IRQ를 통해 인터럽트를 관리합니다.
인터럽트 처리 과정
- 인터럽트 발생:
- 인터럽트가 발생하면 현재 프로세서의 프로그램 카운터(PC)와 프로세서 상태 워드(PSW) 값이 스택에 푸시됩니다.
- 커널 모드로 전환:
- CPU는 인터럽트 핸들러의 진입 지점으로 PC를 로드하고, PSW는 인터럽트를 비활성화하여 다른 인터럽트를 방지할 수 있습니다.
- 인터럽트 처리:
- 인터럽트 처리 후, 스택에 저장된 PC와 PSW를 팝하여 이전 상태로 복귀하고, 중단된 명령어에서 실행을 재개합니다.
인터럽트 및 예외 처리
- 비동기 인터럽트 (Interrupts):
- 외부 하드웨어 장치에 의해 발생하며, 주로 I/O 장치나 타이머로부터 발생합니다.
- 동기 인터럽트 (Exceptions):
- CPU에서 발생하는 오류나 예외적인 상황. 예: '0으로 나누기', '세그먼트 오류', '페이지 오류', 시스템 콜(의도적인 예외 포함)
- Linux에서의 처리:
- 인터럽트와 예외는 모두 동일하게 처리되며, 이를 통해 다양한 하드웨어 및 소프트웨어 오류를 관리합니다.
인터럽트 | 예외 |
---|---|
원인: CPU 외부에서 발생 | 원인: CPU 내부에서 발생 (현재 실행 중인 명령어에서) |
비동기적: CPU 클럭과 독립적 | 동기적: CPU 클럭에 맞춰 발생 |
현재 명령어 완료 후 처리 | 현재 명령어 완료되지 않고 처리됨 |
예시: I/O 장치, 타이머 | 예시: 잘못된 명령어, 잘못된 주소, 0으로 나누기 |
중첩 인터럽트 처리
- 인터럽트 금지: 유저 프로그램이 실행 중일 때는 인터럽트 발생을 금지합니다.
- 우선순위 정의:
- 각 인터럽트에 대한 우선순위를 정의하여, 높은 우선순위 인터럽트가 낮은 우선순위 인터럽트를 처리할 수 있도록 합니다.
인터럽트 메커니즘의 장단점
- 장점:
- 시스템 리소스를 효율적으로 사용할 수 있습니다. 예를 들어, CPU는 대기 중인 I/O 작업을 기다리면서 다른 작업을 처리할 수 있습니다.
- I/O 작업 대기 시간이 상대적으로 긴 경우, 폴링 방식보다 낭비되는 시간이 적습니다.
- 단점:
- 추가 명령어 실행이 필요합니다(ex. 인터럽트 핸들러 호출).
- 레지스터 저장 및 복원, 인터럽트의 성격 파악, 적절한 조치 결정 등으로 추가적인 시스템 자원이 소모됩니다.
- 인터럽트 우선순위가 잘못 관리되면 시스템 성능 저하나 인터럽트 누락 등의 문제가 발생할 수 있습니다.
'CS > OS' 카테고리의 다른 글
[운영체제] 메모리 (0) | 2025.01.28 |
---|---|
[운영체제] virtual box에서 ubuntu 설치 및 터미널 명령어 실행하기 (0) | 2023.07.09 |
운영체제 - 생산자 소비자 문제 semaphore을 활용하여 해결하기 (0) | 2023.05.31 |
가상머신에서 우분투 설치하는 법 (0) | 2023.05.26 |
[운영체제] Overview (0) | 2023.05.19 |