[컴퓨터공학] 프로세스와 스케줄러 이해 - 인터럽트
프로세스와 스케줄러 이해 - 인터럽트
패스트캠퍼스 강의 보면서 정리하고 있습니다
인터럽트
- CPU가 프로그램을 실행하고 있을 때 입출력 하드웨어 등 장치나 예외상황이 발생하여 처리가 필요할 경우 CPU에 알려서 처리하는 기술
인터럽트 종류
- 내부 인터럽트 (소프트웨어 인터럽트)
- 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용시 발생
- 0으로 나눴을 때
- 사용자 모드에서 허용되지 않은 명령 또는 공간 접근시
- 계산 결과가 Overflow / Underflow 날 때
- 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용시 발생
- 외부 인터럽트 (하드웨어 인터럽트)
- 주로 하드웨어에서 발생되는 이벤트 (프로그램 외부)
- 전원 이상
- 기계 문제
- 키보드 등 IO관련 이벤트
- Timer 이벤트
- 주로 하드웨어에서 발생되는 이벤트 (프로그램 외부)
시스템콜 인터럽트
- 시스템콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어 CPU에게 실행시켜야 한다
- 시스템콜 코드
- eax 레지스터에 시스템콜 번호를 삽입
- ebx 레지스터에 시스템콜에 해당하는 인자갑 추가
- 소프트웨어 인터럽트 명령을 호출하면서 0x80값 넘겨줌
mov eax, 1 //시스템콜 번호
mov ebx, 0 //인자
int 0x80 //소프트웨어 인터럽트 명령
시스템콜 인터럽트 (고급)
- 시스템콜 인터럽트 명령을 호출하면서 0x80값을 넘겨줌
- CPU는 사용자 모드를 커널 모드로 바꿈
- IDT(Interrupt Descriptor Table)에서 0x80에 해당하는 주소(함수)를 찾아서 실행
- system_call() 함수에서 eax로부터 시스템콜 번호를 찾아서 해당 번호에 맞는 시스템콜 함수로 이동
- 해당 시스템콜 함수 실행 후 다시 커널 모드에서 사용자 모드로 변경, 해당 프로세스 다음 코드 진행
인터럽트와 IDT
- 인터럽트는 미리 정의되어 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있음
- IDT(Interrupt Descriptor Table)에 기록
- 컴퓨터 부팅시 운영체제가 기록
- 운영체제 내부 코드
인터럽트와 프로세스
- 프로세스 실행 중 인터럽트 발생
- 현 프로세스 실행 중단
- 인터럽트 처리 함수 실행 (운영체제)
- 현 프로세스 재실행