[ CS ] 인터럽트와 시스템콜

오세창·2024년 10월 7일

CS / 운영체제

목록 보기
2/4

인터럽트


인터럽트란

인터럽트는 어떤 신호가 들어왔을 때 CPU 를 잠깐 정지시키는 것을 말한다.
산술 연산 오류, 프로세스 오류 등으로 발생하며, 뿐만 아니라 키보드, 마우스 등 IO 디바이스를 사용할 때의 인터럽트, 우선순위가 높은 프로세스의 발생 등으로 발생한다.

인터럽트는 하드웨어 인터럽트, 소프트웨어 인터럽트 두 가지로 나뉜다.

하드웨어 인터럽트 는 IO 디바이스 등 하드웨어에서 발생하는 인터럽트이며, 마우스를 클릭하거나, 디스크에서 파일을 읽는 작업 등에서 발동된다.

소프트웨어 인터럽트트랩(Trap) 이라고도 하며, 프로세스의 오류나 프로세스의 시작 및 종료 등을 기반으로 발생한다.

인터럽트 발생 과정

  1. 인터럽트 발생
  2. 프로세스 실행 중단
  3. 현재의 프로세스 상태 PCB 에 보존
  4. 인터럽트 벡터로 이동
  5. 인터럽트 서비스 루틴 실행
  6. 저장해둔 프로세스 상태 복구
  7. 중단된 프로세스 실행 재개

인터럽트의 발생 과정은 대략적으로 위와 같이 정리할 수 있다.

인터럽트가 발생하면, 해당 프로세스는 모든 작업을 일시정지 하고, 작업 내용들을 PCB 에 백업을 한다.

이후 인터럽트 벡터로 이동 하는데, 여기에는 "이때는 이렇게 하면돼~" 라며, 인터럽트를 어떻게 처리하는지 알려주는 함수들이 존재한다.

이에 해당 함수들을 통해 인터럽트를 처리하고, 프로세스의 상태를 복구 후 다시 실행 재개 하는 것이다.

시스템콜


시스템 콜이란

시스템 콜(System Call)은 운영체제 커널이 제공하는 서비스에 접근하기 위해 사용하는 인터페이스다.

시스템 콜의 과정

  1. 시스템 콜 호출
  2. 사용자 모드에서 커널 모드로 전환 : modebit 1 -> 0
  3. 요청받은 시스템 콜 을 처리
  4. 사용자 모드로 전환 : modebit 0 -> 1

시스템 콜 과정 사진을 살펴보면 trap 이 발생하는 것을 확인할 수 있다.

시스템 콜 을 수행할 때도 인터럽트가 발생한다는 것이다.

이에 따르면 다음과 같이 정리할 수 있다.

모든 인터럽트는 시스템 콜로 이어지지 않는다.
하지만 모든 시스템콜은 인터럽트로 처리된다.

시스템 콜 사용 이유

위 내용을 토대로 유저 모드에서 어떤 파일을 읽거나 쓸 때, 혹은 열 때 시스템콜이 호출되어 커널에서 수행되는 것은 알겠다.

그렇다면 이러한 시스템 콜 을 대체 왜 사용하는 것일까 ?

만약에 유저모드에서 아무런 제약 없이 커널모드에 접근할 수 있다면, 악의적 공격자가 내 시스템 자원에 제한 없이 접근 가능하여 보안적 위험이 발생할 것이다.

이에 시스템 콜 을 통한 제한된 접근은 시스템의 안정성과 보안을 지키는 핵심요소이다.

시스템 콜만으로 안전할까 ?

유저모드와 커널모드의 분리를 통한 제한전 접근이 시스템의 안정성을 높이는 것은 이해했다.

하지만, 공격자가 시스템 콜 을 호출하면서 접근할 수 있는 거 아닌가 ? 라는 생각이 들었다.

시스템 콜을 통해 요청된 작업은 항상 운영체제에 의해 검사된다. 이 과정에서 사용자 권한, 요청의 유효성, 작업의 안전성 등이 검토된다. 만약 요청이 시스템 안전성을 해칠 가능성이 있다 판단되면 요청을 거부한다.

운영체제는 사용하지 않는 시스템 콜 을 빈번하게 호출하거나, 일반적이지 않은 순서로 시스템 콜을 사용하는 경우 의심할 수 있다.

시스템 콜 의 순서와 패턴을 분석해 정상적인 동작과 비교해서 의심스러운지 탐지하기도 하며, 특정 규칙이나 행위 패턴을 정의하고, 이 규칙에 위배되는 시스템 콜 의 사용을 감지한다고 한다.

이처럼 시스템 콜 을 통한 악의적 접근이 시도될 수 있지만, 운영체제가 다양한 방식으로 이를 탐지하고 방어하는 역할을 수행한다.

참고자료


https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%A9%B4%EC%A0%91-cs-%ED%8A%B9%EA%B0%95/dashboard

https://youtu.be/V4lp6iGoUFY

https://youtu.be/r_kmB2wlqGI?t=993

https://brightstarit.tistory.com/13

0개의 댓글