CPU[Interrupt]
인터럽트
CPU는 싱글 코어 기준으로 여러 가지 작업을 동시에 처리할 수 없으며, 하나의 작업을 처리한 후에 다음 작업을 처리해야 합니다.
그러나 운영 체제는 CPU가 여러 프로그램을 동시에 실행하는 것처럼 보이도록 만들기 위해 여러 기법을 사용합니다.
메모리에는 여러 프로그램이 로드되어 있지만, CPU는 한 번에 하나의 프로그램만 실행할 수 있습니다.
이 때문에 CPU는 시분할(time-sharing)이나 멀티태스킹(multitasking)과 같은 기법을 사용하여 여러 프로그램 간에 실행을 전환합니다.
인터럽트는 이러한 프로그램 간 전환을 가능하게 하는 메커니즘 중 하나입니다.
예를 들어, 현재 실행 중인 프로그램에서 입출력이 필요한 경우(예: 키보드 입력이나 디스크에서 데이터를 읽는 경우), CPU는 해당 작업을 처리하기 위해 현재 프로그램의 실행을 일시 중단하고(I/O 인터럽트 발생), 입출력 작업을 처리하는 인터럽트 서비스 루틴(Interrupt Service Routine, ISR)을 실행합니다.
이후에 CPU는 이전 프로그램의 실행을 다시 재개하거나 다른 프로그램으로 전환하여 실행합니다.
즉, CPU가 여러 프로그램 간에 실행을 전환하고, 다양한 하드웨어 이벤트를 처리하며, 시스템의 효율성을 높이는 데 중요한 역할을 하는걸 인터럽트라고 합니다.
인터럽트는 하드웨어, 소프트웨어 두가지로 나뉘는데, 이 두가지에 대해서 알아보겠습니다.
소프트웨어 인터럽트
- 소프트웨어 실행 중에 발생하는 이벤트에 의해서 발생합니다.
- 발생하는 경우
- 시스템 호출
- 응용프로그램이 운영체제의 기능을 호출할 때 발생합니다. ( 파일 열기/닫기 )
- 예외 인터럽트
- 응용 프로그램이 잘못된 명령을 실행하거나, 잘못된 메모리 주소에 접근시 발생 합니다.
- 시스템 호출
- 발생하는 경우
하드웨어 인터럽트
- 하드웨어 장치에서 발생하는 이벤트에 의해서 발생 합니다.
- 발생하는 경우
- I/O 인터럽트
- 입출력 장치에서 데이터 전송이 완료되었을 때 발생합니다.
- 타이머 인터럽트
- CPU 내부 타이머가 특정 시간 경과 시 인터럽트를 발생합니다.
- 외부 인터럽트
- 외부 하드웨어 장치에서 사용자 입력이 발생하거나, 하드웨어 오류가 감지되면 발생합니다. ### 하드웨어 인터럽트 처리 순서 1. 입출력 장치는 CPU에 인터럽트 요청 신호를 보냅니다. 2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인합니다. 3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는 지 여부를 확인합니다. 4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업합니다. 5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다. 6. 인터럽트 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개합니다.
- I/O 인터럽트
- 발생하는 경우
위를 보면, 생소한 단어가 나옵니다.
이에 대해서 알아보겠습니다.
## 인터럽트 ### 인터럽트 플래그 하드웨어 인터럽트를 받아들일지, 무시할지 결정하는 플래그입니다.
하지만 인터럽트 플래그로 무조껀 무시할 수는 없습니다.
인터럽트에도 우선순위가 있습니다.
무시할 수 없는 인터럽트는 정전이나 하드웨어 고장으로 인한 인터럽트가 이에 해당됩니다.
### 인터럽트 서비스 루틴 [ 사진 ] 인터럽트를 처리하기 위한 프로그램입니다.
어떠한 인터럽트가 발생했을 경우, 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램입니다.
인터럽트 서비스 루틴은 메모리에 여러 개 저장 되어있습니다.
### 인터럽트 백터 인터럽트 서비스 루틴에서, 어떤 인터럽트가 발생했을 때, 이에 맞는 어느 서비스 루틴을 실행시킬지를 식별하기 위한 정보입니다.
인터럽트 벡터를 알면 인터럽스 서비스 루딘의 시작주소를 알 수 있기 때문에 CPU는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있습니다.
## 동작 과정
결론
인터럽트는 한마디로 CPU의 작업을 방해하는 신호입니다.
- 인터럽트 요청 신호
- CPU의 작업을 방해하는 인터럽트에 대한 요청입니다.
- 인터럽트 플래그
- 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트입니다.
- 인터럽트 벡터
- 인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보입니다.
- 인터럽트 서비스
- 인터럽트를 처리하는 프로그램입니다.
참고 자료 :: 혼공자 [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]