[OS] Interrupt / System call
Interrupt
Interrupt 이전에 Polling
Polling
는 대상을 주기적으로 감시하여 상황이 발생하면 해당처리 루틴을 실행해 처리한다. 사용자가 명령어를 사용해 pin의 값을 계속 읽어나가 변화를 알아내는 방식으로 overhead가 생기게 된다.
이러한 점을 개선하기 위해 MCU(Micro-Control Unit)단에서 이를 감지하여 변화시에만 일정한 동작을 하도록 하는 방식을 채택하였고, 이것이 Interrupt이다.
Interrupt 란?
프로그램을 실행하던 도중에 하드웨어/소프트웨어 에서 문제가 생기면, 문제를 우선 처리할 필요성이 생긴다. 문제를 처리하기 위해 CPU에 특정 작업을 즉시 실행하도록 하는 것
이 Interrupt 이다.
Interrupt가 발생을 하면 ISR(Interrupt Service Routine)을 실행을 하여 Interrupt를 처리를 한다. 실행중이던 작업은 stack에 저장하고, Interrupt 처리가 끝나게 되면 stack에서 실행중이던 주소값, 레지스터값 등을 받아온 후 작업을 계속하게 된다.
Interrupt는 크게 3가지로 나눌 수 있다.
1. External Interrupt
- Power fail interrupt
- Machine check interrupt
- External signal interrupt
- timer interrupt
- key board interrupt
* 외부장치로부터 interrupt request가 오는 경우
- I/O Interrupt
- I/O data에 이상이 생기는 경우
- I/O device가 데이터 전송을 요구하거나, 전송이 끝나 다음 동작을 해야할 경우
2. Internal Interrupt(= Trap)
프로그램을 잘못짜면 발생한다.
- Division by Zero
- overflow / underflow
- 기타 Exception
3. Software Interrupt(SVC: SuperVisor Call)
외부, 내부 interrupt 와는 흐름이 다르다.
위 두 내용은 asynchornize 하게 뙇하고 발생하는데, Software Interrupt는 사용자가, 프로그램이 SuperVisor Call을 발생하여 Exception을 일으킬 수 있다는 것을 의미한다.
SWI를 이용하는 2가지 예시
- System Call
- Semi hosting
target에서 수행되는 코드중 I/O에 관련되는 코드를 캡쳐해서 I/O를 target에서 수행하는 것이 아니라 debugger를 구동하는 호스트 시스템에서 수행하게 하는 기능이다.
왜 SWI를 사용할까?
사용자는 Kernel mode를 직접적으로 사용할 수 없지만, I/O Device등을 직접적으로 사용할 수는 없다. 그렇기에, SWI 방식을 이용하여, User Mode에서 작동하는 일반적인 application이 SVC 모드에서 돌아가는 kernel에게 service를 요청하게 된다.
System Call
// Linux에서의 System Call 호출
// eax : systemcall number 주소가 저장됨
// ebx : systemcall argument 주소가 저장됨.
// argument 순서는 EBX, ECX, EDX, ESI, EDI
// return 값은 EAX에 저장이 된다
// int 0x80 : System Call 호출
mov eax, 1
mov ebx, 0
int 0x80
운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
작동 과정
- Assembly code 실행
- System interrupt 명령어 호출
- IDT(Interrupt Descripter Table) 참조
- 0X80에 있는 sytstem_call() 함수에서 eax에 담겨있는 number에 매칭되는 kernel function을 호출한다.
- 해당 kernel function을 수행한 후 user mode로 전환이 된다.
- 다음 프로세스를 진행한다.
왜 int 0x80 하나만 System call이냐?
Compatibility
문제가 생기면 저거만 수정하면 되기 때문이다.
Author And Source
이 문제에 관하여([OS] Interrupt / System call), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@xogh20321/OS-Interrupt-System-call저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)