CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술.
내부 인터럽트 (또는 소프트웨어 인터럽트)
외부 인터럽트 (또는 하드웨어 인터럽트)
시스템 콜 인터럽트 명령을 호출하면서 0x80값을 넘겨줌
i. CPU는 사용자 모드를 커널 모드로 변경 시켜줌
👉 <int>라는 <opcode>가 변경 역할을 해줌.
ii. IDT(Interrupt Descriptor Table)에서 0x80에 해당하는 주소(함수)를 찾아서 실행
👉 번호에 맞는 주소 찾으면 그 주소에 있는 함수들을 실행
인트럽트 번호 : 주소(코드) 🔸이렇게 매칭해준다
예: 0x80 : system_call()
~주르륵~ 실행
iii. system_call() 함수에서 eax로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템 콜 함수로 이동
👉eax에는 시스템 콜 번호가 있다. 그럼 그 시스템 콜 번호에 해당하는 함수를 호출(call) 한다.
시스템 콜 번호 : 함수 (call)
👉시스템 콜 5번은 (open)이라는 시스템 콜이다. 사용자에서 쓰는 (open)이라는 시스템 콜 함수와 매칭이 되어 있는 커널 코드 안에 있는 sys_open함수를 호출하게 되어 있고, ebx에 있는 인자 값을 같이 넘겨주게 된다.
iv. 해당 시스템 콜 함수 실행 후, 다시 커널 모드에서 사용자 모드로 변경하고, 다시 해당 프로세스 다음 코드 진행
인터럽트는 미리 정의되어 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있다.
어디에? IDT에 기록.
👉 이벤트 (키보드, 마우스, 0으로 나누기 등등) 각각의 번호가 있다. 그 번호에 따라서 실행 코드가 IDT에 써져있다. 즉, 매핑이 되어 있다.
이벤트 번호 : 실행코드의 주소(함수)
언제? 컴퓨터 부팅시 운영체제가 테이블을 기록한다.
어떤 코드? 운영체제 내부 코드 (커널모드/커널영역)