[운영체제] 인터럽트와 시스템 콜

Judy·2022년 10월 21일
0

운영체제

목록 보기
4/14

컴퓨터 시스템

CPU

  • CPU는 클럭마다 순차적으로 메모리에서 명령을 읽어와서 실행
    - 클럭(clock)이란 CPU의 속도를 나타내는 단위
  • 다음 명령을 실행하기 전에 들어온 인터럽트가 있는지 확인

Device Controller

I/O 장치를 관리하는 작은 CPU

  • I/O 디바이스마다 controller가 달려있어 일종의 CPU처럼 동작하여 관리
  • CPU가 직접 디바이스한테 요청하지 않고 device controller에서 요청함
  • 제어 정보를 위한 control register, status register를 가짐
  • local buffer를 가짐(데이터를 저장)
  • 실제 디바이스와 local buffer 사이에서 I/O가 발생
  • I/O가 끝나면 CPU에게 Interrupt로 알림

DMA controller

Direct Memory Acces
특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능

  • 데이터 관련 인터럽트가 시도때도 없이 들어오면 CPU가 일을 하기 어려움
  • 원래는 메모리엔 CPU만 접근 가능하지만 CPU 개입 없이 DMA를 통해 데이터를 이동시킴
  • CPU 대신에 메모리에 데이터를 넘겨주고 데이터 이동이 완료되었다는 단 한 번의 인터럽트만 발생
  • 데이터가 전송되는 동안 CPU는 다른 작업을 수행할 수 있어 효율성 🆙

Timer

특정 프로그램이 CPU를 독점하지 못하게 도와주는 하드웨어

  • 시간을 세팅해서 해당 시간이 지나면 운영체제로 CPU 제어권을 넘김 -> timer interrupt
  • 매 클럭 마다 1씩 감소
  • CPU를 특정 프로그램이 독점하는 것을 보호
  • time sharing을 구현하기 위한 방법


Mode bit

커널 모드(0)

  • 모니터 모드, 시스템 모드
  • 운영체제가 CPU 제어를 가짐
  • 모든 기능을 수행 가능(I/O 디바이스 접근 같은)
  • interrupt나 exception 발생 시 커널 모드로 변경됨

사용자 모드(1)

  • 사용자 프로그램이 CPU 제어권을 가짐
  • 기능이 제한되어 있음
    -> 다른 프로그램 또는 운영체제에 피해가 되지 않도록(보안상 이유)

입출력의 수행

  • 입출력의 특권 명령 중 하나 -> 사용자 프로그램은 못함

사용자 프로그램은 어떻게 I/O를 얻을 수 있나?

  • 직접 받아오는 것은 불가능
  • 사용자 프로그램이 운영체제에게 I/O 요청 ---> 운영체제에 부탁
  • 사용자 프로그램이 운영체제(커널)의 함수를 호출하는 것 = 시스템 콜
  • 프로그램을 실행하다 I/O가 필요하면 소프트웨어적으로 인터럽트를 걸음
  • 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
  • 시스템 콜이 끝나면 다음 명령을 실행


인터럽트

CPU가 프로그램을 실행하고있을 때, 입출력하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것

  • CPU 제어 루틴을 인터럽트 처리 루틴(= 인터럽트 핸들러)으로 변경

이벤트 처리 방법 - Polling

컴퓨터는 모든 유형의 이벤트를 감지할 수 있는 방법이 있어야 함 ➡️ Polling & Interrupt
두 가지 방법을 통해 CPU는 언제든 발생하는 이벤트를 처리 가능

Polling

다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 자료처리를 하는 방식

  • Device는 주의가 필요하지 않고 polling 프로그램이 조사하는 것을 기다리기만 하면 됨
  • CPU가 직접 진행하는데 불필요한 polling에 시간이 낭비되어 비효율적
  • 처리 작업이 많은 오늘날 프로세스 작업에는 알맞지 않음

인터럽트의 종류

하드웨어 인터럽트

  • 일반적으로는 하드웨어가 발생시킨 인터럽트를 말함
  • I/O 인터럽트: 입출력 작업이 종료되어 결과 혹은 오류로 정지된 경우 발생
  • 이외에도 전원 이상 시, CPU 기능 이상 시, 외부 장치에서 인터럽트 발생 혹은 타이머 인터럽트

소프트웨어 인터럽트

  • Trap이라고도 함
  • System Call로 발생
  • Exception: 프로그램 오류 발생 ex) 0으로 나누기, 오버플로우 등
  • System Call: 프로그램에서 커널 함수를 호출

인터럽트 관련 용어

인터럽트 벡터

  • 해당 인터럽트의 처리 루틴 주소를 가짐

인터럽트 핸들러

  • 인터럽트 서비스 루틴(ISR)이라고도 함
  • 해당 인터럽트를 처리하는 커널 함수
  • 인터럽트 수신으로 실행이 트리거 됨
  • 소프트웨어이자 운영체제의 콜백 함수이자 device driver의 한 부분
  • 인터럽트 벡터에 인터럽트 핸들러의 메모리 주소가 포함되어 있음

프로그램이 I/O를 받을 때

  • 소프트웨어 인터럽트(System Call)을 요청
  • I/O 디바이스가 처리하면 CPU로 하드웨어 인터럽트를 보냄

➡️ 소프트웨어 인터럽트와 하드웨어 인터럽트 모두 발생
➡️ 운영체제는 인터럽트로 제어된다


시스템 콜

  • 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
  • 프로그래밍 언어에서 지원하지 않는 기능에 대하여 운영 체제의 루틴을 호출하여 이용하는 것

시스템 콜(시스템 호출) 과정

  1. 프로그램 명령어 실행 중 인터럽트(시스템 콜) 발생
  2. CPU는 현재 실행 중인 프로그램을 중단하고 프로그램 위치(PC), 레지스터 상태 등을 스택에 저장
  3. 사용자 모드 -> 커널 모드 변경
  4. 인터럽트 벡터를 통해 알맞는 IRS를 찾아 실행해 인터럽트를 처리
  5. 처리가 끝나면 IRS 반환 값과 함께 스택에 저장했던 프로그램을 복구하고 다시 실행

시스템 콜 유형

프로세스 제어(process control)

  • 프로세스 생성 및 중지 등
  • ex) fork, exec, exit..

파일 조작(file manipulation)

  • 파일 생성, 삭제, 관리 등
  • ex) create, open, close, lseek..

장치 관리(device management)

  • 장치 연결, 방출, 관리 등
  • ex) open, close, iocil..

정보 유지(information maintenance)

  • 시간 및 날짜 설정, 프로세스와 연결돤 파일 관리 등
  • ex) time, date, dump, pid..

통신(communication)

  • 통신 연결 생성 및 제거, 메시지 송수신 등
  • ex) connect, accept, read, pope..




참고 링크

반효경 교수님 강의 - 캄퓨터 시스템 구조
위키백과 - 인터럽트
위키백과 - 시스템 호출
시스템 콜과 인터럽트
인터럽트(interrupt) & 시스템콜(system call)
위키백과 - DMA

profile
iOS Developer

0개의 댓글