-
인터럽트(Interrupts)란 무엇인가(공룡책 공부 시작!!)CS지식/운영체제 2021. 5. 22. 22:21
지난(5월 18일) 반효경 교수님의 운영체제 강의를 완강하고 오늘부터는 강의를 통해 배운 내용을 다시 정리하고 추가적으로 더 공부하기 위해 운영체제의 바이블이라고 불리는 공룡책을 빌려서 공부를 시작했다.
나의 목표는 하루에 한 장(종이 한 장이 아니라 목차에서 의미하는 장, 약 50페이지 정도)를 목표로 하고
이전 방식처럼 네트워크, 운영체제, 데이터베이스를 하루에 한 과목씩 로테이션으로 공부할 것이다.
인터럽트라는 것은 무엇이고 무슨 역할을 할까?
우리는 실행 중인 프로그램을 프로세스라고 배웠다. 프로세스 중에는 디스크에서 정보를 읽거나 쓰는 일을 수행하기도 하고 키보드를 통해 입력을 원하기도 하고 모니터에 화면을 띄우는 일도 원하기도 한다.
이러한 경우에 프로세스가 I/O장치(키보드, 마우스 ,모니터 등)에게 직접적으로 접근할 권한이 없어 운영체제에게 도움을 요청하고 운영체제가 프로세스가 필요로 하는 요청을 I/O에게 전달한다.
그러면 I/O가 작업을 완료하여 디스크에서 읽은 정보를 프로세스에게 보낼 필요가 있고 키보드로 입력받은 정보를 프로세스에게 보낼 필요가 있는 경우에 작업을 완료했다는 사실을 알려줘야하기 위해 인터럽트를 사용하는 것이다.
간단히 말해서 인터럽트는 I/O장치(정확히 말해서는 I/O장치를 제어하는 I/O 컨트롤러)가 작업을 완료했다는 것을 운영체제에게 알리기 위한 작업이다.
이외에도 인터럽트는 다른 많은 목적으로도 사용되며 운영체제와 하드웨어의 상호 작용의 핵심 부분이다.
그러면 CPU가 인터럽트를 받게 되면 어떻게 처리할까?
CPU가 이러한 인터럽트를 받게 되면 CPU는 하고 있던 일을 중단하고 고정된 위치로 실행을 옮긴다.
고정된 위치에는 인터럽트를 처리하기 위한 서비스 루틴이 위치한 시작 주소를 가지고 있다.
서비스 루틴에 따라 인터럽트를 해결하면 CPU는 다시 중단했던 일을 처리한다.
인터럽트가 동작하는 기본적인 매커니즘은 다음과 같다.
먼저, CPU에는 interrupt request line이라는 선이 있어 CPU가 하나의 명령어의 실행을 완료할때마다 이 선을 감지하여 인터럽트가 발생했는지를 인식한다.
인터럽트가 발생했다는 것은 CPU가 감지했다면 인터럽트 번호를 읽어 인터럽트 벡터의 인덱스로 사용하여 interrupt handler routine으로 이동한다.
인터럽트 벡터는 인터럽트를 처리하기 위한 인터럽트 서비스 루틴이 저장되어있는 주소를 담고있는 배열이다.
CPU가 어떠한 프로세스의 작업을 수행하는 중에 인터럽트가 발생하여 해당 프로세스 작업이 중단되므로 중단된 작업의 프로세스가 어디까지 작업이 진행됐는지 상태는 어떠한지에 대한 정보를 저장해두어야한다.
그 이유는 인터럽트 처리를 완료한 후 다시 인터럽트당한 프로세스의 작업을 수행해야하므로 이전의 상태, 작업을 어디서부터 시작해야하는지 알아야하기 때문이다.
최신의 운영체제에서는 더욱 효율적인 작업을 수행하기 위한 다음과 같은 인터럽트 처리 기능이 필요하다.
- cpu가 중요한 작업을 수행하고 있는 경우에는 인터럽트 처리를 미룰 수 있어야한다.
- 적절한 인터럽트 핸들러로 효율적인 디스패치(CPU가 준비상태의 작업을 실행상태로 변경하는 것) 방법이 필요하다.
- 운영체제가 인터럽트의 우선순위를 비교하여 적절한 대응이 될 수 있도록 해야한다.
3가지 인터럽트 처리 기능은 CPU와 인터럽트 컨트롤러 하드웨어에 의해 제공된다.
'CS지식 > 운영체제' 카테고리의 다른 글
프로세스(Process)란 무엇인가 (0) 2021.05.28 시스템 콜(System Call)이란 무엇인가 (0) 2021.05.25 15일차 - Disk Management and Scheduling (0) 2021.05.18 14일차 - File System Implementaion (0) 2021.05.16 13일차 - File System (0) 2021.05.13