인터럽트란? 프로세스를 실행중인 CPU에게 해당 실행중인 작업을 중지시키고, 발생한 예외상황이나 이벤트에 대해 처리하는 것
한마디로 CPU한테
"야 너 지금 하고 있는 일보다 더 중요한 일이 생겼어 급해! 지금 하는 일 멈춰봐!!!"
라고 말(혹은 명령) 하는 거다.
시스템 콜(OS의 기능을 제공하는 함수 혹은 인터페이스)을 예로 인터럽트의 동작과정을 알아보자
프로그램에서 어떤 저장되어 있는 파일을 읽어오는 코드를 실행한다고 해보자.
해당 파일을 읽어오는 코드안에 있는 시스템콜이 호출된다.
해당 시스템콜의 코드에는 다음과 같은 값이 들어있다:
mov eax, 1 (eax레지스터쪽으로, 시스템콜 번호를 전송)
mov ebx, 0 (ebx레지스터쪽으로, 시스템콜에 해당하는 인자값을 전송)
int 0x80(인텔에서의 시스템콜의 인터럽트번호)
위의 내용을 포함한 시스템콜 인터럽트 코드를 CPU에서 받으면
1.int라는 opcode에 의해 사용자 모드가 커널모드로 바뀐다.
2.IDT(여러가지 인터럽트에 대한 번호와 그 인터럽트를 처리하는 코드가 담긴(혹은 가리키는) 코드가 적혀있다.)에서 0x80에 대한 항목을 찾아 실행한다.
3.시스템콜 함수에서 eax레지스터로부터 시스템콜 번호를 찾아서 해당 번호에 맞는 함수를 불러와서(ebx레지스터의 인자값도 참조하여) 실행한다.
4.다시 사용자 모드로 변경하고, 해당프로세스의 다음코드를 진행한다.
아래는 위의 과정을 이해하기 쉽게 그림으로 그려봤다. 클릭해서 확대!
'CS > 운영체제&네트워크' 카테고리의 다른 글
OSI 7계층 (1) | 2024.02.27 |
---|---|
스레드(쓰레드)란? (0) | 2024.02.22 |
스케줄링 알고리즘 (0) | 2022.04.02 |
운영체제 대략적인 큰 그림 (0) | 2022.03.29 |
운영체제 혹은 컴퓨터의 역사 (0) | 2022.03.14 |