인터럽트는 어떤 신호가 들어왔을 때 CPU 를 잠깐 정지시키는 것을 말한다.
산술 연산 오류, 프로세스 오류 등으로 발생하며, 뿐만 아니라 키보드, 마우스 등 IO 디바이스를 사용할 때의 인터럽트, 우선순위가 높은 프로세스의 발생 등으로 발생한다.
인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트 두 가지로 나뉜다.
하드웨어 인터럽트 는 IO 디바이스 등 하드웨어에서 발생하는 인터럽트이며, 마우스를 클릭하거나, 디스크에서 파일을 읽는 작업 등에서 발동된다.
소프트웨어 인터럽트 는 트랩(Trap) 이라고도 하며, 프로세스의 오류나 프로세스의 시작 및 종료 등을 기반으로 발생한다.

인터럽트의 발생 과정은 대략적으로 위와 같이 정리할 수 있다.
인터럽트가 발생하면, 해당 프로세스는 모든 작업을 일시정지 하고, 작업 내용들을 PCB 에 백업을 한다.
이후 인터럽트 벡터로 이동 하는데, 여기에는 "이때는 이렇게 하면돼~" 라며, 인터럽트를 어떻게 처리하는지 알려주는 함수들이 존재한다.
이에 해당 함수들을 통해 인터럽트를 처리하고, 프로세스의 상태를 복구 후 다시 실행 재개 하는 것이다.
시스템 콜(System Call)은 운영체제 커널이 제공하는 서비스에 접근하기 위해 사용하는 인터페이스다.

시스템 콜 호출시스템 콜 을 처리시스템 콜 과정 사진을 살펴보면 trap 이 발생하는 것을 확인할 수 있다.
시스템 콜 을 수행할 때도 인터럽트가 발생한다는 것이다.
이에 따르면 다음과 같이 정리할 수 있다.
모든 인터럽트는 시스템 콜로 이어지지 않는다.
하지만 모든 시스템콜은 인터럽트로 처리된다.
위 내용을 토대로 유저 모드에서 어떤 파일을 읽거나 쓸 때, 혹은 열 때 시스템콜이 호출되어 커널에서 수행되는 것은 알겠다.
그렇다면 이러한 시스템 콜 을 대체 왜 사용하는 것일까 ?
만약에 유저모드에서 아무런 제약 없이 커널모드에 접근할 수 있다면, 악의적 공격자가 내 시스템 자원에 제한 없이 접근 가능하여 보안적 위험이 발생할 것이다.
이에 시스템 콜 을 통한 제한된 접근은 시스템의 안정성과 보안을 지키는 핵심요소이다.
유저모드와 커널모드의 분리를 통한 제한전 접근이 시스템의 안정성을 높이는 것은 이해했다.
하지만, 공격자가 시스템 콜 을 호출하면서 접근할 수 있는 거 아닌가 ? 라는 생각이 들었다.
시스템 콜을 통해 요청된 작업은 항상 운영체제에 의해 검사된다. 이 과정에서 사용자 권한, 요청의 유효성, 작업의 안전성 등이 검토된다. 만약 요청이 시스템 안전성을 해칠 가능성이 있다 판단되면 요청을 거부한다.
운영체제는 사용하지 않는 시스템 콜 을 빈번하게 호출하거나, 일반적이지 않은 순서로 시스템 콜을 사용하는 경우 의심할 수 있다.
시스템 콜 의 순서와 패턴을 분석해 정상적인 동작과 비교해서 의심스러운지 탐지하기도 하며, 특정 규칙이나 행위 패턴을 정의하고, 이 규칙에 위배되는 시스템 콜 의 사용을 감지한다고 한다.
이처럼 시스템 콜 을 통한 악의적 접근이 시도될 수 있지만, 운영체제가 다양한 방식으로 이를 탐지하고 방어하는 역할을 수행한다.