본문 바로가기

OS

시스템 콜과 인터럽트

728x90

시스템 콜

운영체제의 커널이 제공하는 서비스에 대해서 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스

(.. 말이 조금 어려운데 응용 프로그램이 커널의 서비스에 접근할 때 마주하는 인터페이스라고 생각하면 된다.)

 

기능

시스템 콜의 주요 세가지 기능은 아래와 같다. 

  1. 사용자 모드에 있는 응용 프로그램이 커널에 접근하여 그 안의 기능을 사용할 수 있도록 한다.
    (= 운영체제 서비스에 접근할 수 있게 한다.)
  2. 시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다.
  3. 커널에서 시스템 호출의 작업이 끝나면 사용자 모드로 돌아간다.

여기서 말하는 사용자 모드는 사용자가 프로그램 실행, 코드 작성 등을 하는 상태를 말한다.

커널 모드는 시스템 콜을 처리하는 상태를 말한다. 

  • 사용자 모드 : 사용자, 프로그램이 접근할 수 있는 범위를 두고 범위 내에서 동작을 한다.
  • 커널 모드 : 컴퓨터의 자원들이 운영체제의 제어 하에 동작하며 모든 종류의 명령을 사용할 수 있게 된다. 

사용자가 만들어내는 프로그램은 불안정하고 보안성이 부족할 수 있기 때문에 시스템에 큰 영향을 미칠 수 있는 연산들은 커널 모드에서 이루어지는 하드웨어/소프트웨어 추상화를 통해 컴퓨터의 전체 보안을 유지할 수 있게 된다.

 

예를 들어서 한 파일의 복사본을 만드는 과정을 보면, (cp a.txt b.txt) 다음과 같은 과정을 거친다.

open a.txt, open b.txt : a.txt 파일을 열고 b.txt파일을 새로 만들어낸다.
read a.txt => write b.txt : a.txt의 내용을 읽고 b.txt에 내용을 쓴다.
close a.txt b.txt : 두 파일을 닫는다.

위 과정에서 open 2번, read/write 1번씩, close 2번으로 총 6번의 시스템 콜이 일어났다.

 

이 두 상태는 하드웨어 내부에 존재하는 모드 비트를 통해 구분한다.

모드 비트가 0이면 커널 모드, 1이면 사용자 모드가 된다.

 

인터럽트 

프로그램이 컴퓨터에서 동작하고 있을 때 입출력 연산 혹은 예외 상황이 발생하여 처리가 필요할 때 이를 마이크로 프로세서에게 알려서 처리할 수 있도록 하는 것을 말한다. 

 

인터럽트는 발생원 / 우선순위 / 인터럽트 벡터로 이루어져 있다.

 

인터럽트에는 크게 두 가지 종류가 있다.

외부 인터럽트 (= 하드웨어 인터럽트)

CPU의 외부에서 인터럽트 요구 신호에 의해 발생하는 인터럽트이다. 

하드웨어 흐름에 의해 생기는 인터럽트이므로 비동기적인 특성을 갖고 있다.

  • I/O(입출력) 인터럽트 : 입출력 작업이 종료되어 결과를 반환하거나 오류에 의해 정지되었을 때 발생
  • Power fail(전원 이상) 인터럽트 : 전원이 이상현상에 의해 공급 중단되었을 때 발생
  • Machine check(기계 착오) 인터럽트 : CPU의 기능이 잘못되었을 때 발생
  • External(외부) 인터럽트 : 외부 장치로부터 인터럽트가 오거나 ^C 키 발생, 자원 할당 시간이 끝남을 알리는 타이머에 의해 발생

 

내부 인터럽트 (= 소프트웨어 인터럽트)

CPU 내부에서 발생하는 인터럽트, 잘못된 명령 혹은 데이터를 사용할 때 발생한다.

Trap이라고 불리기도 한다.

프로그램 내부의 명령어에 의해 고정적인 위치에서 발생하는 인터럽트로 동기적인 특성을 가진다.

  • 프로그램 검사 인터럽트 : 프로그램적으로 발생하는 오류에 의하여 발생( 0으로 나누기, over/under flow, 예외 등)
  • 시스템 콜에 의하여 발생

 

시스템 콜과 인터럽트 동작방식 

운영체제가 컴퓨터에 장착된 장치나 하드웨어를 관리하기 위해 두 가지 방식 중 하나를 사용한다.

  • 폴링 방식 : 상태를 주기적으로 검사하여 조건을 만족하면 처리하는 방식
  • 인터럽트 방식 : 특정 신호를 발생시켜 운영체제에 처리를 요구하는 방식 

폴링 방식은 주기적으로 검사를 해야 하며 문제가 없더라도 검사를 하기 때문에 CPU가 일을 많이 하게 된다.

이에 비해 인터럽트 방식은 발생 시에만 처리하고 다른 시간에는 다른 작업을 할 수 있기 때문에 효과적으로 관리할 수 있다.

-> 그래서 요즘에는 거의 모든 컴퓨터가 인터럽트 기반의 시스템을 사용한다. 

 

버그를 방지하고 CPU의 부담을 줄이기 위해 시스템 콜 동작은 인터럽트를 발생시켜서 동작한다.

 

 

 

 

 

 

'OS' 카테고리의 다른 글

프로세스 스케줄링  (0) 2022.09.05
[질문] 프로세스, 쓰레드  (0) 2022.08.29
프로세스 - 상태  (0) 2022.08.29
쓰레드  (0) 2022.08.29
프로세스 - 개념, 메모리 구조, 상태변화  (0) 2022.08.29