시스템 콜 인터럽트
시스템 콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야 합니다.
eax 레지스터에 시스템 콜 번호를 넣고, ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣고, 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨줍니다.
그 후 CPU는 사용자 모드를 커널 모드로 바꿔줍니다. IDT에서 0x80에 해당하는 주소를 찾아서 실행합니다. system_call() 함수에서 eax(시스템 콜 번호)로부터 시스템 콜 번호를 찾아서, 해당 번호에 맞는 시스템 콜 함수로 이동합니다. 해당 시스템 콜 함수를 실행한 후, 다시 커널 모드에서 사용자 모드로 변경하고, 프로세스의 다음 코드를 진행합니다.
인터럽트와 IDT
인터럽트는 미리 정의되어 있어서 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있습니다. 기록 장소가 IDT(Interrupt Descriptior Table)입니다. 컴퓨터 부팅 시 운영체제가 기록을 하며 운영체제 내부 코드를 기록합니다.
'운영체제 (OS)' 카테고리의 다른 글
프로세스 구조와 스택 오버플로우 (0) | 2021.04.18 |
---|---|
프로세스와 컨텍스트 스위칭 - 프로세스 구조 (0) | 2021.04.18 |
스케줄링 알고리즘 (3) - 인터럽트 (0) | 2021.04.17 |
프로세스와 스케줄러의 이해 (1) - 선점형과 비선점형 스케줄러 (0) | 2021.04.16 |
스케줄링 알고림 (4) - 프로세스 상태와 스케줄링 (0) | 2021.04.16 |