인터럽트는 cpu에게 커널영역의 시스템함수를 호출한다.
cpu는 유저모드 커널모드가 있고, 커널영역의 코드를 실행하기위해서는 cpu는 커널모드로 변경되어야한다. 이를 나눈이유는 커널은 시스템관련 중요한 함수들과 변수가 있기 때문에 함부러 접근할수 없게 하기위함이다.
printf는 라이브러리의 일종이고 안에 여러가지 알고리즘이 있지만 결국에 모니터에 찍을때에는 write라는 시스템함수을 호출하여 인터럽트를 날려 cpu에게 커널영역에있는 함수를 실행해달라고 요청한다.
printf호출(유저영역) ->write호출 -> cpu는 커널모드로 변경 -> write에해당하는 함수실행 ->write끝남-> 유저모드변경 ->다음실행
-System call Interrupt
read,write호출시 cpu는 커널모드로 바뀌고 커널 주소공간에 있는 코드를 실행하여야 한다. 이는 cpu에 인터럽트를 요청하는것
으로도 볼수있음.소프트웨어 인터럽트이고. system call에서 자세히 다룰것이다.
앞에서 말한 인터럽트처리가
주프로그램 -> 인터럽트발생(..키보드입력) -> 인터럽트처리 ->주프로그램으로 복귀
이에반해 system call interrupt는 프로그램이 명령어를 실행하면서 interrupt를 거는것이기때문에 순차적으로
주프로그램 -> 실행되다가 write를 호출 -> cpu는 커널모드로 바뀌고 write에대한 명령처리 라고봐도 무방하다.
코드를 중단하고 끼어드는 느낌은 아니라고 말하고싶다.
-Hardware Interrupt
인터럽트가 걸리면 현재 실행중인 기계어를 중단하고 해당 인터럽트에 대한 처리를한다.
ex)키보드입력,마우스입력등...
-exception interrupt
0으로나누기, 할당되지 않은주소접근 등 치명적인 오류를 막기위한 인터럽트
'Operating System & Computer Architecture > Linux' 카테고리의 다른 글
System call in Linux kernel - (1)시스템콜 수정,추가해보기 (0) | 2017.12.29 |
---|---|
Interrupt in Linux kernel - (2) 키보드입력,kernel_init 변경 (0) | 2017.12.28 |
Interrupt in Linux kernel - (1) atkbd.c 변경실험 (0) | 2017.12.28 |
' Interrupt & system call ' in Linux kernel (0) | 2017.12.28 |
Interrupt -(1) 인터럽트 (0) | 2017.12.27 |