꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

운영체제 (OS)

프로세스와 스케줄러의 이해 - 인터럽트 내부 동작

gold_dragon 2021. 4. 18. 09:27

시스템 콜 인터럽트

시스템 콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야 합니다.

eax 레지스터에 시스템 콜 번호를 넣고, ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣고, 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨줍니다.

그 후 CPU는 사용자 모드를 커널 모드로 바꿔줍니다. IDT에서 0x80에 해당하는 주소를 찾아서 실행합니다. system_call() 함수에서 eax(시스템 콜 번호)로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템 콜 함수로 이동합니다. 해당 시스템 콜 함수를 실행한 후, 다시 커널 모드에서 사용자 모드로 변경하고, 프로세스의 다음 코드를 진행합니다.

인터럽트와 IDT

인터럽트는 미리 정의되어 있어서 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있습니다. 기록 장소가 IDT(Interrupt Descriptior Table)입니다. 컴퓨터 부팅 시 운영체제가 기록을 하며 운영체제 내부 코드를 기록합니다.